float 常見用法與問題--摘抄

float 屬性絕對是眾多切圖仔用的最多的 CSS 屬性之一,它的用法很簡單,常用值就 leftrightnone 三個,但是它的特性你真的弄懂了嗎?

我會在這里介紹我對 float 的認識與使用,以及使用過程中遇到的問題。

對 float 的認識

1. float 元素具有 BFC 模型特性

當給元素添加 float 屬性后,元素便會具有 BFC 模型的效果。比如給內聯元素 span 等添加 float 屬性后,內聯元素也可以設置寬高和 margin。

2. float 與 position

當給元素添加了絕對定位 absolute 或者 fixed 后,元素的浮動效果就會消失,即便 float 屬性設置在 position 屬性之后。

3. 脫離標準文檔流

浮動元素會脫離標準文檔流,會給它后面的兄弟元素造成影響,如果要清楚對兄弟元素的影響,只需要給緊鄰的兄弟元素添加 clear: both 就好,但是緊鄰的兄弟元素的 margin 依然是相對于父元素的。

4. 破壞父元素高度

當父元素沒有設置高度,也不是 BFC 模型時,如果給子元素添加浮動效果,那么便會造成父元素高度的坍塌。

要清除浮動給父元素帶來的破壞效果,方案也有很多,最直接的是把父元素變成 BFC 模型的元素就行。

不過大家使用最多的方式應該是添加一個 .clearfix 的類,不過對于這個類的寫法有很多種,而我一般使用的是張鑫旭老師的方法,代碼量最少:

.clearfix {zoom: 1; } .clearfix::after { content: ''; display: table; clear: both; }

5. float 與 padding

浮動元素不會超過父元素的內邊距 padding。

利用第五點與第三點,我們在方便的實現一些布局效果并減少層級嵌套。

比如我們通常會遇到如下的樣式布局:

image

代碼實現:

<!DOCTYPE html>
<html lang="en"> <head> <meta charset="UTF-8" /> <title>浮動</title> </head> <body> <div class="container"> <p class="tt">1\. 這是標題</p> <button class="btn">刪除</button> <div class="con"> 這里是具體的內容 </div> </div> </body> </html>
.container {width: 400px; padding: 20px; border: 1px solid #ccc; } .tt { float: left; margin: 0; width: 200px; overflow: hidden; } .btn { float: right; } .con { padding-top: 10px; clear: both; }

標題欄既有文本也有刪除等按鈕,我們直接使用 float,而下面的內容部分我們通過 clear: both; 來讓顯示位置正確。標題欄部分和內容部分的間距則通過給 .con 元素添加 padding 而不是 margin 來控制,因為它的 margin 是相對于父容器的。

6. float 與 margin

兩個相鄰的浮動元素,當第一個浮動元素的寬度為100%時,第二個浮動元素會被擠到下面,通過添加負的 margin-left 或者 margin-right 值(絕對值最少等于它自身的寬度),可以使它回到第一行。

常見布局

利用這一點,我們也可以實現很多布局,比如:

在書寫html代碼時,我們通常的習慣根據UI樣式,從左往右來寫代碼,但有時候右側的內容比較重要,所以它的html結構需要放在左側內容上面,讓它更早的加載。

圖一

  <div class="comment"> <!-- 右側重要內容 --> <div class="content"> <div class="author"> <span class="name">哇哈哈</span> <span class="date">2016-78-55</span> </div> <p class="text">吃的再多也不長胖,好愁人啊,怎么能快速長胖呢,在線等,急!吃的再多也不長胖,好愁人啊,怎么能快速長胖呢,在線等,急!吃的再多也不長胖,好愁人啊,怎么能快速長胖呢,在線等,急!吃的再多也不長胖,好愁人啊,怎么能快速長胖呢,在線等,急!吃的再多也不長胖,好愁人啊,怎么能快速長胖呢,在線等,急!吃的再多也不長胖,好愁人啊,怎么能快速長胖呢,在線等,急!吃的再多也不長胖,好愁人啊,怎么能快速長胖呢,在線等,急!</p> <div class="meta"> <span class="msg-tag"></span> <span class="msg-tag">回復</span> </div> </div> <!-- 左側內容 --> <a href="#" class="avatar"><img src="images/header.jpg" alt="頭像"></a> </div>
* {margin:0; padding:0;} li {list-style: none;} a {text-decoration: none;} body {font-family: '微軟雅黑';} .wrap { width: 800px; margin: 50px auto; } .content { float: right; margin-left: 100px; } .date { font-size: 14px; color: #666; } .text { margin: 20px 0; } .avatar { float: left; margin-right: -80px; } .avatar img { width: 80px; height: 80px; border-radius: 50%; }

如上面圖的效果,盡管在UI上,.content 元素在 .avatar 右邊,但我們在 html 結構中,仍然需要把 .content 元素放到 .avatar 元素前面,這個時候就可以通過給 .content 元素設置為右浮動,然后給 .avatar 元素設置左浮動,再添加負 margin-right 值,讓它回到上面。

2. 右側定寬流式布局

image

<!DOCTYPE html>
<html lang="en"> <head> <meta charset="UTF-8" /> <title>test</title> </head> <body> <div class="content"> <div class="box1"> <div class="inner"></div> </div> <div class="box2"></div> </div> </body> </html>
.content {width: 500px; overflow: hidden; } .box1 { box-sizing: border-box; float: left; width: 100%; height: 50px; padding-right: 220px; border: 1px solid #ccc; } .inner { width: 100%; height: 40px; border: 1px solid #f23; } .box2 { float: right; width: 200px; height: 30px; margin-left: -100%; border: 1px solid #2fe; }

轉載于:https://www.cnblogs.com/liuhao-web/p/8458051.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250934.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250934.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250934.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

javascipt -- find方法和findIndex方法的實現

find: 根據傳入的條件函數,返回符合條件的第一項 var arr [{id: 1, name: zs, age: 18},{id: 2, name: zs, age: 17},{id: 3, name: ls, age: 16},{id: 4, name: ls, age: 15}]Array.prototype._find_ function(cb){for(var i0; i< this.length; i){if(cb(this[i],i)){ret…

bzoj 2179 FFT快速傅立葉 FFT

題面 題目傳送門 解法 題如其名…… 不妨將多項式的\(x^i\)變成\(10^i\)&#xff0c;然后就是一個比較簡單的FFT了 md讀進來的是一個字符串&#xff0c;并且要倒序 最后注意進位問題 時間復雜度&#xff1a;\(O(n\ log\ n)\) 代碼 #include <bits/stdc.h> #define N 1 &l…

【探討】javascript事件機制底層實現原理

前言 又到了扯淡時間了&#xff0c;我最近在思考javascript事件機制底層的實現&#xff0c;但是暫時沒有勇氣去看chrome源碼&#xff0c;所以今天我來猜測一把 我們今天來猜一猜&#xff0c;探討探討&#xff0c;javascript底層事件機制是如何實現的 博客里面關于事件綁定與執行…

node --- 在node中使用mongoosemongoDB的安裝

*首先確保,你的電腦安裝了mongodb,網址: mongodb官網 *使用npm安裝 mongoose: mongoose官網 ps:mongoose是Node中操作mongoDB的第三方插件.用于提高數據庫操作效率(相當于在mongoDB上封裝了一次,暴露出更友好的API) MongoDB的安裝 1.下載地址 2.下載好了后,傻瓜式的安裝(我的…

websocket demo

git node.js創建websocket 的服務 Nodejs Websocket包 ws.createServer([options], [callback]) The callback is a function which is automatically added to the “connection” event. 前端代碼 1. 創建實例、打開連接 this.websocket new WebSocket(ws://127.0.0.1:80…

shell常用命令總結總結

打rpm包&#xff1a; rpmbuild -bb SPECS/smplayer.spec --define "_topdir pwd" 安裝rpm包&#xff1a; rpm -ivh [rpm包文件] 如果安裝不上 rpm -ivh [rpm包文件] --force #強制安裝 打包的時候可能需要一些依賴&#xff1a; dnf install 【依賴文件名】 sed -i常用…

Filter

一、簡介 Filter也稱之為過濾器&#xff0c;它是Servlet技術中最激動人心的技術&#xff0c;WEB開發人員通過Filter技術&#xff0c;對web服務器管理的所有web資源&#xff1a;例如Jsp&#xff0c;Servlet&#xff0c;靜態圖片文件或靜態html文件進行攔截&#xff0c;從而實現一…

前端面試手寫題

深拷貝 // 深拷貝 function deepClone(ori) {let tar;if (typeof ori object && ori ! null) {tar Array.isArray(ori) ? [] : {}for (let k in ori) {if (ori.hasOwnProperty(k)) {tar[k] deepClone(ori[k])}}} else {tar ori}return tar}繼承 // 圣杯模式實現…

node --- 使用express.Router與body-parser

express框架提供了一個Router方法,用于監聽路由 // 命令行(windows*64) npm install express --save// router.js const express require("express"); // 定義路由 const router express.Router();// 處理http://host:port/students/ 路由(GET方法) router.get…

python基礎1 第一天

TEST 1 阿斯蒂芬 day1test1 while 1&#xff1a;print&#xff08;333&#xff09; import randomprint轉載于:https://www.cnblogs.com/shuangzhu/p/9243853.html

【數據庫】《SQL必知必會 4th》部分筆記

9.匯總數據 count(*) 包括空 count(name) 不包括空 10.分組數據 group by 分組 having 過濾分組 where 過濾行 11.子查詢 select .. from .. where in (select ...) 由內向外處理 A.子查詢過濾 作為子查詢的語句只能查詢單個列。 B.作為計算字段使用子查詢 select cust_name, …

微軟認知服務應用秘籍 – 漫畫翻譯篇

概述 微軟認知服務包括了影像、語音、語言、搜索、知識五大領域&#xff0c;通過對這些認知服務的獨立或者組合使用&#xff0c;可以解決很多現實世界中的問題。作為AI小白&#xff0c;我們可以選擇艱難地攀登崇山峻嶺&#xff0c;也可以選擇像牛頓一樣站在巨人的肩膀上。本章節…

01 React初步認知、React元素、渲染、工程化

定義 react&#xff1a;用于構建用戶界面的 JavaScript 庫 &#xff08;僅負責View層渲染、應在視圖上體現交互邏輯&#xff09;vue&#xff1a;漸進式JavaScript 框架&#xff08;MVVM&#xff09; 使用 引入CDN腳本添加根容器 div #app創建React組件 ReactDOM.render Re…

node --- 在express中配置使用模板引擎(art-template)

下載依賴: npm install --save art-template express-art-template配置: // app.js const express require("express"); const app express(); app.engine("html", require("express-art-template"));使用: 例如處理瀏覽器GET請求 /students…

PAM認證機制

一、PAM簡介 Sun公司1995年開發的一種與認證相關的通用框架機制&#xff0c;PAM只關注如何為服務驗證用戶的API&#xff0c;通過提供一些動態鏈接庫和一套統一的API&#xff0c;將系統提供的服務和該服務的認證方式分開&#xff1b;PAM只是一個框架而已&#xff0c;自身不做認證…

02 JSX學習

使用vite處理jsx vite引入的腳本必須是ESM的 npm init -y yarn add vite package.json 添加vite命令 index.html引入jsxJSX是什么 一種標簽語法&#xff0c;在JS基礎上進行的語法擴展不是字符串、也不是HTML是描述UI呈現與交互的直觀的表現形式JSX被編譯后會生成React元素 &am…

使用FreeCookies 控制瀏覽器cookies及修改http響應內容

FreeCookies 插件安裝 1&#xff1a;您的計算機需要已經安裝Fiddler &#xff08;如未安裝&#xff0c;請至官網下載安裝 http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler&#xff09; 2&#xff1a;進入Fiddler安裝目錄下的Scripts目錄下&#xff…

node --- 使用node連接mysql

1.確保下載了mysql,且mysql處于打開狀態. 2.確保下載了node,并成功安裝:https://nodejs.org/en/ (小黑窗 node -v 查看) 3.安裝node操作mysql的依賴包: # 命令行 npm install --save -mysql# 注:如果沒有package.json 建議先使用 npm init -y 初始化正題 // app.js// 1. 引…

03 渲染元素ReactDOM.render

React與ReactDOM是2個不同的庫&#xff0c;根節點內的所有內容&#xff08;和DOM更新、渲染相關&#xff09;由ReactDOM來管理一個React應用只有一個根節點用ReactDOM.render將React元素渲染到根節點 ReactDOM.render 參數1 React元素&#xff08;React.createElement(類組件/…

javascript --- 異步按順序執行

使用promise可以很優雅的封裝一個異步函數,使其按指定順序執行: // 異步讀取文件操作 const fs require("fs"); function promiseReadFile(url) {return new Promise(function (resolve, reject) {fs.readFile(url, function(err, data) {if(err) {reject(err);} e…