CSS浮动

107 阅读3分钟

经典真题

  • 清除浮动的方法有哪几种?

浮动

背景

浮动出现之初,是为了实现‘文字环绕’的效果,像word里的‘图文混排’,也像报纸上的文字环绕着图片。

<div class="container">
    <div class="text">
        <img class="img" src="../../大纲.jpg" width="100px" height="100px" alt="">
        <p>
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。
            这是前段课程的大纲,请您仔细阅读。                
        </p>
    </div>
    <hr />
    <div class="box1">111</div>
    <div class="box2">222</div>
    <span class="sp1">111</span>
    <span class="sp2">222</span>
</div>
.box1,
.box2 {
    width: 100px;
    height: 100px;
}

.box1 {
    background-color: aquamarine;
}

.box2 {
    background-color: bisque;
    float: left;
}

.sp1,
.sp2 {
    width: 100px;
    height: 100px;
}

.sp1 {
    background-color: paleturquoise;
    float: left;
}

.sp2 {
    background-color: pink;
}

.img {
    float: left;
}

浮动的应用场景:两栏布局、三栏布局等。

浮动的特性

脱离标准流

理解:浮起来了,后面的兄弟元素就当它不存在,都往前移动。如果前面的元素是块级就换一行,如果是行级就并排。

浮动元素互相贴着

理解:会在水平方向上紧紧贴着,直到宽度不够了才会重启一行。

块级元素的宽度收缩

理解:原本块级元素不设宽高,那么宽度就是视窗的宽,浮动之后,宽度由内容撑起来。

让行级元素变块级

理解:让span跟块级元素一样,可以设置宽高。

清除浮动

浮动带来的副作用,如元素会紧贴着

<ul>
    <li>导航1</li>
    <li>导航2</li>
    <li>导航3</li>
</ul>
<div class="clear"></div>
<ul>
    <li>衬衫</li>
    <li>裤子</li>
    <li>鞋子</li>
</ul>

法一:给父元素设置高度(高度必须比子元素高,否则不生效)。 如果一个元素要浮动,那么祖先元素一定要有高度,有高度才能关住浮动

 ul {   
    height: 50px; 
    background-color: aqua;
}
li {
    background-color: pink;
    float: left;
}

法二:使用clear:both(margin失效了,给ul加了border才生效,但是两个ul之间的还是连在一起)

ul:{
    background-color: aqua;
    border: 1px solid red
}
ul:nth-child(2) {
    clear: both; 
    margin-top: 100px;
}
li {
    background-color: pink;
    float: left;
}

法三:隔墙法,还是用clear属性,不要要借助一个div,margin也正常了

ul:nth-child(2) {
    margin-top: 100px;
}
li {
    background-color: pink;
    float: left;
}
.clear{
    clear: both;
}

法四:内墙法,没有高的父元素,子元素浮动,高度就会塌陷,用内墙法撑起父元素高度。(可以借用伪元素)

<div class="container">
    <p></p>
    <div class='clear'></div>
</div>
.container {
    background-color:red;
}
p {
    width: 100px;
    height: 100px;
    background-color: green ;
    float:left
}
.clear{
    clear: both;
}

法五:overflow属性 给父元素加overflow:hidden属性,可以生成一块独立的BFC,不会互相影响了。

<ul>
    <li>导航1</li>
    <li>导航2</li>
    <li>导航3</li>
</ul>
<ul>
    <li>衬衫</li>
    <li>裤子</li>
    <li>鞋子</li>
</ul>

样式:

ul:{
    background-color: aqua;
    overflow: hidden;
}
li {
    background-color: pink;
    float: left;
}

法六:伪元素

<ul class='one'>
    <li>导航1</li>
    <li>导航2</li>
    <li>导航3</li>
</ul>
<ul class='two'>
    <li>衬衫</li>
    <li>裤子</li>
    <li>鞋子</li>
</ul>

样式:

.two{
    margin-top: 10px
}
.one::afet{
    content:''
    display:block;
    height:0;
    clear:both;
    visibility:hidden;
}
li{
    float: left;
    width: 100px;
    height: 20px;
    background-color: pink   
}