float
float:left
或float:right
,让元素浮动。
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
li{
list-style:none;
width:20px;line-height:20px;
background-color:goldenrod;
float:left;
margin:5px;
text-align:center;
font-family:Arial, Helvetica, sans-serif;
font-size:0.75em;
}
clear
clear:left
或clear:right
或clear:both
作用在非浮动元素上,以期望该元素与 其前面的浮动元素 不在一行显示。
clear:right
时, 所有li
仍然一行显示
clear:right
无效
li:nth-of-type(3){
clear:right;
}
clear:left
时,li#3
与其前面的li#2
不在一行排列,换到了下一行
clear:left
有效
li:nth-of-type(3){
clear:left;
}
clear:both
时,li#3
与其前面的li#2
不在一行排列,换到了下一行
效果与clear:left
一样。
本例可以发现:clear:left
有效,则clear:right
必定无效。clear:left
与clear:both
效果相同。
试着让所有li
都float:right
,也会得到类似结论:clear:right
有效,则clear:left
必定无效。clear:right
与clear:both
效果相同。
可见,使用clear
时,直接clear:both
就好,不用纠结clear:left
还是clear:right
。
还有很重要的一点是,clear
顾前不顾后,clear
作用在某元素上,因此该元素将与其前面的浮动元素分行排列,但仍与其后面的浮动元素一行显示。
clear的限制
clear只对display为block|table|list-item等块级元素有效,clear对内联元素无效
比如,<img>
<body>
<div id='doraemon'>哆啦A梦怕老鼠</div>
<img src="./imgs/doraemon.gif">
</body>
#doraemon{
float:left;
}
img{
clear:both;
}
怎么办?
clear
仅对块级元素有效,给<img>
添加display:block
<body>
<div id="doraemon">哆啦A梦怕老鼠</div>
<img src="./imgs/doraemon.gif">
</body>
div{
float:left;
}
img{
clear:both;
display:block
}
还有其他办法么?
clear
仅对块级元素有效,在浮动元素div#doraemon
后添加一个空的块级元素
如,<div style='clear:both;'></div>
<body>
<div id="doraemon">哆啦A梦怕老鼠</div>
<div style='clear:both;'></div>
<img src="./imgs/doraemon.gif">
</body>
#doraemon{
float:left;
}
clear
仅对块级元素有效,使用块级伪元素:before
稍微改动下html结构,用span
包裹img
<body>
<div id="doraemon">哆啦A梦怕老鼠</div>
<span>
<img src="./imgs/doraemon.gif">
</span>
</body>
#doraemon{
float:left;
}
span:before{
display:block;
content:'';
clear:both;
}
span:before
生成的块状伪元素成为span
的第一个子节点。
clear
仅对块级元素有效,使用块级伪元素:after
稍微改动下html结构,用div#container
包裹div#doraemon
<div id="container">
<div id="doraemon">哆啦A梦怕老鼠</div>
</div>
<img src="./imgs/doraemon.gif">
</body>
#doraemon{
float:left;
}
#container:after{
display:block;
content:'';
clear:both;
}
#container:after
生成的块级伪元素成为div#container
的最后一个子节点。
clear只能清除 前面的浮动元素 的影响
之前我们介绍过浮动的两个特点:浮动元素使其父元素高度塌陷、浮动元素后面的元素受浮动影响会产生环绕效果。
clear
作用在非浮动元素仅块级元素上,该元素将独占一行,不会环绕浮动元素,进而父元素高度也不会塌陷,即消除了 前面的浮动元素 带来的影响。
注意哈,clear
顾前不顾后,仅消除了 clear
作用的元素的 前面的浮动元素 带来的影响。