首页 > 代码库 > css之浮动的清除

css之浮动的清除

先看看不清除浮动的效果

<html><head>    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">    <title>Document</title>    <style type="text/css">        ul {list-style: none; }        li { float: left;margin-left: 5px;padding: 0;}        .div1 li {background-color: red;}        .div2 li {background-color: green; }    </style></head><body>    <div class="div1">        <ul>            <li><a href=http://www.mamicode.com/"https://home.cnblogs.com/">园子</a></li>            <li><a href=http://www.mamicode.com/"https://news.cnblogs.com">新闻</a></li>            <li><a href=http://www.mamicode.com/"https://q.cnblogs.com/">博问</a></li>        </ul>    </div>    <div class="div2">        <ul>            <li><a href=http://www.mamicode.com/"/" class="current_nav">首页</a></li>            <li><a href=http://www.mamicode.com/"/pick/" title="编辑精选博文">精华</a></li>            <li><a href=http://www.mamicode.com/"/candidate/" title="候选区的博文">候选</a></li>        </ul>    </div></body></html>

技术分享

本想让div1和div2分成两行显示,但是结果显示在了一行,第二组中的第1li,去贴靠第一组中的最后一个li了。看看两个div的高度,显示为0,原因就是因为div没有高度,不能给自己浮动的子元素们一个容器。

技术分享

清除浮动方法

清除浮动方法1.给浮动的元素的祖先元素加高度

如果一个元素要浮动,那么它的祖先元素一定要有高度,有高度的盒子,才能关住浮动。只要浮动在一个有高度的盒子中,那么这个浮动就不会影响后面的浮动元素。所以就是清除浮动带来的影响了。

上面的代码,为了让div1浮动的子元素不影响div2,给div1增加 .div1{height: 50px;} 或者给div1的任何一个父级加上高度就达到了想要的结果。

技术分享

网页制作中,高度height很少出现。因为能被内容撑高(浮动的元素不能撑高父元素),所以这种清除浮动的方法不太适用。

清除浮动方法2:clear:both; 

  clear:both; 清除左右浮动,这种方法有一个非常大的问题,margin失效了。

<html><head>    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">    <title>Document</title>    <style type="text/css">       ul{list-style: none;}       li{float: left;margin-left: 5px;padding: 0;background-color: green;}       .div1{margin-bottom: 100px;}/*margin失效*/       .div2{margin-top: 100px;clear:both;}/*margin失效*/    </style></head><body>    <div class="div1">        <ul>            <li><a href=http://www.mamicode.com/"https://home.cnblogs.com/">园子</a></li>            <li><a href=http://www.mamicode.com/"https://news.cnblogs.com">新闻</a></li>            <li><a href=http://www.mamicode.com/"https://q.cnblogs.com/">博问</a></li>        </ul>    </div>    <div class="div2">        <ul>            <li><a href=http://www.mamicode.com/"/" class="current_nav">首页</a></li>            <li><a href=http://www.mamicode.com/"/pick/" title="编辑精选博文">精华</a></li>            <li><a href=http://www.mamicode.com/"/candidate/" title="候选区的博文">候选</a></li>        </ul>    </div></body></html>

技术分享

清除浮动方法3:隔墙法

外墙法

<html><head>    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">    <title>Document</title>    <style type="text/css">       ul{list-style: none;}       li{float: left;margin-left: 5px;padding: 0;background-color: green;}       .div1{margin-bottom: 100px;}/*margin失效*/       .both { clear: both;margin-top:100px; }/*margin失效*/
     .h10{height:10px;}
</style></head><body> <div class="div1"> <ul> <li><a href=http://www.mamicode.com/"https://home.cnblogs.com/">园子</a></li> <li><a href=http://www.mamicode.com/"https://news.cnblogs.com">新闻</a></li> <li><a href=http://www.mamicode.com/"https://q.cnblogs.com/">博问</a></li> </ul> </div> <div class=both .h10></div> <div class="div2"> <ul> <li><a href=http://www.mamicode.com/"/" class="current_nav">首页</a></li> <li><a href=http://www.mamicode.com/"/pick/" title="编辑精选博文">精华</a></li> <li><a href=http://www.mamicode.com/"/candidate/" title="候选区的博文">候选</a></li> </ul> </div></body></html>

技术分享

margin仍然失效,但是可以给<div class=both></div> 设置高度,充当margin效果。

技术分享

内墙法

  <div class=both h10></div> 放到div1的内部,好处是内容可以撑出父级的高了,margin也不会失效了。

<html><head>    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">    <title>Document</title>    <style type="text/css">       ul{list-style: none;}       li{float: left;margin-left: 5px;padding: 0;background-color: green;}       .both { clear: both; }       .h10{height:10px;}    </style></head><body>    <div class="div1">        <ul>            <li><a href=http://www.mamicode.com/"https://home.cnblogs.com/">园子</a></li>            <li><a href=http://www.mamicode.com/"https://news.cnblogs.com">新闻</a></li>            <li><a href=http://www.mamicode.com/"https://q.cnblogs.com/">博问</a></li>        </ul>        <div class=both h10></div>    </div>    <div class="div2">        <ul>            <li><a href=http://www.mamicode.com/"/" class="current_nav">首页</a></li>            <li><a href=http://www.mamicode.com/"/pick/" title="编辑精选博文">精华</a></li>            <li><a href=http://www.mamicode.com/"/candidate/" title="候选区的博文">候选</a></li>        </ul>    </div></body></html>

清除浮动方法4overflow:hidden;

一个父元素不能被自己浮动的子元素撑出高度。但是只要给父级元素加上 overflow:hidden ; 父亲就能被子元素撑出高了。

<html><head>    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">    <title>Document</title>    <style type="text/css">       ul{list-style: none;}       li{float: left;margin-left: 5px;padding: 0;background-color: green;}       .div1{overflow:hidden;}    </style></head><body>    <div class="div1">        <ul>            <li><a href=http://www.mamicode.com/"https://home.cnblogs.com/">园子</a></li>            <li><a href=http://www.mamicode.com/"https://news.cnblogs.com">新闻</a></li>            <li><a href=http://www.mamicode.com/"https://q.cnblogs.com/">博问</a></li>        </ul>        <div class=both></div>    </div>    <div class="div2">        <ul>            <li><a href=http://www.mamicode.com/"/" class="current_nav">首页</a></li>            <li><a href=http://www.mamicode.com/"/pick/" title="编辑精选博文">精华</a></li>            <li><a href=http://www.mamicode.com/"/candidate/" title="候选区的博文">候选</a></li>        </ul>    </div></body></html>

本文非原创,纯粹学习笔记

css之浮动的清除