css
.container{
margin: 30px auto;
width:600px;
height: 300px;
}
.p{
border:solid 3px #a33;
}
.c{
width: 100px;
height: 100px;
background-color: #060;
margin: 10px;
float: left;
}
<p class="container">
<p class="p">
<p style="clear:both">//為什么不能寫元素之前?
<p class="c"></p>
<p class="c"></p>
<p class="c"></p>
<p style="clear:both">
</p>
</p>
有clear屬性的元素為什麼不能寫浮動元素之前?
在 css 文件裡面規(guī)定 clear:both 的意思是:
要求框的頂邊框邊低於在來源文件中之前產(chǎn)生的任何浮動框的底外邊距邊。
Requires that the top border edge of the box be below the bottom outer edge of any right-floating and left-floating boxes that resulted from elements earlier in the source document.
所以有 clear:both 屬性的元素放在浮動元素之後才能起到閉合浮動的作用。
我一般清除浮動是透過浮動元素的父元素的偽元素實現(xiàn)的。在你這個例子中就是
.p:after{
clear:both;
display:block;
content:"";
}
after 偽元素是父元素的最後一個子元素,所以能清除這個區(qū)塊裡面的浮動。
說說我的理解吧
clearboth 是針對的自身
所以
對於 clear
屬性一定要牢記的是:
1) 該屬性是針對元素本身的,比如說 A B C 三個浮動元素,想要清除C元素左邊的浮動,則是將clear
作用在C上, 寫成:
C {
clear : left
}
當(dāng)然你會想,寫成
B {
clear : right;
}
行不行呢?答案是不行。因為clear
只能清除該元素之前的浮動。
"clear on an element only clears the floats before it in document order. It doesn't clear floats after it."
2) 清除浮動的方式有不少,不過最常見,也是最優(yōu)化的一種就是使用偽元素:
Parent :after{
clear:both;
display:block;
content:"";
}