float 及 清除浮动
1. 浮动 float
官方描述:float 指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。该元素从网页的正常流动(文档流)中移除,尽管仍然保持部分的流动性
通俗解释:指定一个元素,他只能浮动在当前容器里的左侧或者右侧,浮动元素不会影响当前容器里块级元素的布局,但会影响当前容器里文本元素和內联元素的布局
常见例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>float</title> <style> .box { /* width: 200px; height: 800px; */ border: 1px solid #000; } .width { width: 50px; height: 50px; } .box1 { background-color: aqua; float: left; } .box1::after { clear: both; content: ''; } .box2 { background-color: blue; float: right; } </style> </head> <body> <div class="box"> <div class="box1 width"></div> <div class="box2 width"></div> <div>As much mud in the streets as if the waters had but newly retired from the face of the earth, and it would not be wonderful to meet a Megalosaurus, forty feet long or so, waddling like an elephantine lizard up Holborn Hill.</div> </div> </body> </html>
2. 清除浮动 clear
官方描述:clear属性 指定一个元素,是否必须移动 (清除浮动后) 到他之前的浮动元素下边。
他之前的浮动元素 指的是指定元素所在的块级格式化上下文(BFC)里面的前置浮动元素。指定的元素必须是块级元素,或者将其display设置成block
通俗解释:就是说将一个容器里面的某一个块级元素设置clear属性,将其移动到 该块级元素前边浮动的元素下边
浮动产生的问题:
1. 如果一个父元素只有一个浮动元素,并且这个浮动元素的高度大于父元素的高度,父元素不会自动伸展来包含这个浮动元素,会出现父元素“高度塌陷”的现象
2. 一个父元素下边有多个块级元素,其中一个元素是浮动的,希望其他几个可以移动到浮动元素的下边 等
第一个问题现象:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>float</title> <style> .box { border: 1px solid #000; } .width { width: 50px; height: 50px; } .box1 { background-color: aqua; float: left; } .box2 { background-color: blue; float: right; } </style> </head> <body> <div class="box"> <div class="box1 width"></div> <div class="box2 width"></div> </div> </body> </html>
第二个问题现象:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>float</title> <style> .box { border: 1px solid #000; } .width { width: 50px; height: 50px; } .box1 { background-color: aqua; float: left; } .box2 { background-color: blue; float: right; } .box3 { background-color: red; } </style> </head> <body> <div class="box"> <div class="box1 width"></div> <div class="box3 width"></div> <div class="box2 width"></div> </div> </body> </html>
解决方案:
1. 父元素的伪元素设置clear: both/left/right
2. 添加额外的标签,并将其设置clear: both/left/right
3. 使用br标签,br 有 clear=“all | left | right | none” 属性