已知父div容器,父容器包含两个子div,在两个子div标签后面添加一个清除浮动(clear)的div标签,父div标签的内部(左右两边/*css5*/)浮动就清除了。
如果有一个div容器
<body> <div class="divcss5"> <div class="clear"></div>
</div> </body>
如果,我现在给子容器设置top:10px,看到的效果是不发生变化,也就是是说浮动不会随着top,left发生改变。当我给子容器设置相对位置position:relative;看到的效果是怎么样的呢?现在子容器的效果还是浮动的,但是当我分别设置margin-left:10px和 left:10px;看到子容器分别会随着margin-left和left发生改变相应的位置,同样margin-top和top都会发生变化。
也就是说,当子容器设置浮动float,接着给子容器设置margin会有作用,设置left 、top是没有作用,只有给子容器设置相对位置的时候,不仅margin能起作用,left、top也能会起作用,那么是不是说left,top是在相对位置的时候才起作用呢?那么现在我们就做一个实验,我在子容器里把float:left;position:relative;都删掉,不会浮动,也不会有相对位置,然后写上top:10px;left:10px;相应的代码如下:.clear{width: 200px;background: #f2e;color:#030617;height: 20px;top:50px;left:10px;};结果是子容器根本没有移动过位置,所以,事实证明,left、top是在设置了相对位置position的时候才起作用。margin就是不管你设置position与不设置position都会起作用。
继续上面的float浮动,如果现在给float设置inherit;设置继承浏览器的浮动属性,此时我们看到的是不浮动的,默认居左。同样的设置 none initial也不会有作用。只有子容器设置了浮动left和right,子容器才会出现浮动。
下面,我们用一种其他的方法来清除浮动,HTML代码还是以上的代码,大容器的div的css代码还是上面的代码.divcss5{padding:10px 0;width: 100%; left: 50%;right: 50%;background: #007CB5;},
子容器的代码还是上面的代码:.clear{width: 200px;background: #f2e;color:#030617;height: 20px;float:left;},此时看到的是浮动的效果,子容器浮在大容器上面,同样的原理,我还是用清除浮动clear:both;我们可以用css伪元素:after,下面就是一个很简单的css代码,给父容器写css伪类,代码:.divcss5:after{content: "1";clear: both;display: block;},此时,我们看到的是,清除了大容器的浮动,并且在浏览器上能看到子容器被包含在了大容器内部。在浏览器上F12查看浏览器,可以看到after包含在了父容器内,所以,他相当于在给父容器加一个clear,只是少了一个div层,这个层被.divcss5:after实现了。