一、Float基礎概念
1. 設計初衷:
float
最初是為實現文字環繞圖片的效果(類似雜志排版),后來被開發者用來做頁面布局。
2. 核心特性:
使元素脫離普通文檔流(但仍在DOM中)
元素會向左/右浮動,直到碰到父容器邊緣或另一個浮動元素
行內元素(如文字)會感知浮動元素并環繞它
3. 常用值:
float: left;? ? ? ? ? ?/* 向左浮動 */
float: right;? ? ? ? ?/* 向右浮動 */
float: none;? ? ? ? /* 默認值,不浮動 */
二、動手實戰
?案例1:基礎文字環繞效果
<!DOCTYPE html>
<html>
<head><title>Float學習</title><style>.img {float: left;margin-right: 15px;width: 200px;}</style>
</head><body><div class="container"><img src="img/537動耳朵.gif" class="img"><p>我家烏薩奇寶寶出生在一個家風嚴明的傳統家庭,從小注重品德的培養。言傳身教中她形成了尊師敬長、誠實守信、敢于擔當、知禮重節的良好品質。她向善向上,長于行動,班里有什么臟活累活都搶著干。有一年秋季開學,她去幫低年級的同學搬課本,累得滿頭大汗卻一直堅持到最后,雖然汗水濕透了衣服但毫無怨言,她說這是她力所能及可以幫老師分擔的事情,也很樂意能為低年級的同學們提供幫助。在家里,她經常幫助父母做家務,掃地、洗衣、整理房間這些別的女孩子不屑做的事情她卻做得有聲有色,極是自然。在父母偶有身體不適時,主動承擔家中所有家務,是家里的小小女子漢。老師你好,我們家烏薩奇一直是特別可愛的寶寶,在家里它家務搶著做,常常學習到深夜,品學兼優,我生病了給我做飯燒熱水,它有什么事都憋在心里,今天它一到家就哭哭啼啼的,我還以為怎么了,看到這個視頻才知道,這種活動以后烏薩奇不參加了,謝謝老師。天殺的老師老子要把你打成三星折疊屏。我家烏薩奇寶寶出生在一個家風嚴明的傳統家庭,從小注重品德的培養。言傳身教中她形成了尊師敬長、誠實守信、敢于擔當、知禮重節的良好品質。她向善向上,長于行動,班里有什么臟活累活都搶著干。有一年秋季開學,她去幫低年級的同學搬課本,累得滿頭大汗卻一直堅持到最后,雖然汗水濕透了衣服但毫無怨言,她說這是她力所能及可以幫老師分擔的事情,也很樂意能為低年級的同學們提供幫助。在家里,她經常幫助父母做家務,掃地、洗衣、整理房間這些別的女孩子不屑做的事情她卻做得有聲有色,極是自然。在父母偶有身體不適時,主動承擔家中所有家務,是家里的小小女子漢。我家烏薩奇寶寶出生在一個家風嚴明的傳統家庭,從小注重品德的培養。言傳身教中她形成了尊師敬長、誠實守信、敢于擔當、知禮重節的良好品質。她向善向上,長于行動,班里有什么臟活累活都搶著干。有一年秋季開學,她去幫低年級的同學搬課本,累得滿頭大汗卻一直堅持到最后,雖然汗水濕透了衣服但毫無怨言,她說這是她力所能及可以幫老師分擔的事情,也很樂意能為低年級的同學們提供幫助。在家里,她經常幫助父母做家務,掃地、洗衣、整理房間這些別的女孩子不屑做的事情她卻做得有聲有色,極是自然。在父母偶有身體不適時,主動承擔家中所有家務,是家里的小小女子漢。</p></div>
</body>
</html>
效果:?文字會緊密環繞在圖片右側和下方。?
?
案例2:多元素浮動布局
<!DOCTYPE html>
<html>
<head><title>Float學習2</title><style>.gallery {width: 100%;height: 100%;background: lightblue;}.item {float: left;width: 100px;height: 100px;margin: 10px;background: pink;}</style>
</head><body><div class="gallery"><div class="item">1</div><div class="item">2</div><div class="item">3</div></div>
</body>
</html>
?發現問題:?父容器高度塌陷(背景色消失)!因為浮動元素脫離了文檔流。
可以發現:父容器無法自動計算浮動元素的高度,導致布局錯亂。
修改:新加?overflow: hidden; /* 清除浮動 */
.gallery {width: 100%;height: 100%;background: lightblue;overflow: hidden; /* 新增:清除浮動 */}
現在父容器能正確包裹浮動元素了!
?案例3:導航欄制作
<!DOCTYPE html>
<html>
<head><title>Float學習3</title><style>.navbar ul {list-style: none; /* 去掉默認的列表樣式 */overflow: hidden; /* 清除浮動 */background-color: #333; /* 設置背景顏色 */}.navbar li {float: left;}.navbar a {display: block; /* 使鏈接成為塊級元素 */color: white; /* 設置文字顏色 */text-align: center; /* 文本居中 */padding: 14px 16px; /* 內邊距 */text-decoration: none; /* 去掉下劃線 */}.navbar a:hover {background-color: #111; /* 鼠標懸停時的背景顏色 */}</style>
</head><body><nav class="navbar"><ul><li><a href="floatdemo.html">Float學習</a></li><li><a href="floatdemo2.html">Float學習2</a></li><li><a href="floatdemo3.html">Float學習3</a></li></ul>
</body>
</html>
?
解釋幾個點:
1.為什么?.navbar ul里面要去掉默認的列表樣式:list-style: none; ?
因為原本默認的樣式是有三個點的,像無序列表的三個點,所以需要去除。
2.為什么.navbar 需要使鏈接成為塊級元素a display: block; ?
因為這樣我們就可以鼠標懸浮上去,是一整塊。
現在更多的是使用flex布局,看看對比
一、Flex導航欄 vs Float對比表
特性 | Float方案 | Flex方案 |
---|---|---|
代碼復雜度 | 需要清除浮動 | 無需清除浮動 |
垂直居中 | 困難 | 輕松實現 |
間距控制 | 需計算margin | 用gap 屬性一鍵控制 |
響應式適配 | 需要媒體查詢 | 容器屬性自動調節 |
二、Flex做導航欄
<!DOCTYPE html>
<html>
<head><title>Float學習4</title><style>.flex-navbar ul {display: flex; /* 使用flex布局 */list-style: none; /* 去掉默認的列表樣式 */padding: 0;margin: 0;background: #333;gap: 1px; /* 項之間的間距 */}.flex-navbar a {display: block; /* 使鏈接成為塊級元素 */padding: 12px 20px;color: white;text-decoration: none; /* 去掉下劃線 */background: #444;transition: background-color 0.3s; /* 添加過渡效果 */}.flex-navbar a:hover {background-color: #f90; /* 鼠標懸停時的背景顏色 */}</style>
</head><body><nav class="flex-navbar"><ul><li><a href="floatdemo.html">Float學習</a></li><li><a href="floatdemo2.html">Float學習2</a></li><li><a href="floatdemo3.html">Float學習3</a></li></ul>
</body>
</html>
?