• 详解 css float属性


    一、什么是float?

      在css中float就是浮动的意思,简单来说,就是让元素浮动起来。如何理解?我们把网页想象成是拼图的底板,里面的元素就是一个个小的拼图块,所谓浮动就是让本来应该贴着拼图底板的块起来,这就是浮动,也是所谓的脱离文档流。标准文档流就是拼好的拼图。

    二、使用float的结果?

      我们先定义3个div

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <title>Document</title>
     7     <style>
     8         #son1{
     9             width: 100px;
    10             height: 100px;
    11             background-color: burlywood;
    12         }
    13         #son2{
    14             width: 200px;
    15             height: 200px;
    16             background-color: rgb(196, 222, 135);
    17         }
    18         #son3{
    19             width: 300px;
    20             height: 300px;
    21             background-color: rgb(135, 173, 222);
    22         }
    23     </style>
    24 </head>
    25 <body>
    26     <div id="parent">
    27         <div id="son1">son1</div>
    28         <div id="son2">son2</div>
    29         <div id="son3">son3</div>
    30     </div>
    31 </body>
    32 </html>

     现在我们给son1设置float

    float: left;//让元素向左浮动

    我们会看到,son2跑到了本应属于son1的位置,这就是上面所说的脱离文档流。----son1脱离了文档流,那它原来占据的位置就没东西了,但是也不能让它空着是吧,所以就由它后一个块元素son2顶替,那son2去了,son2自己原来的位置不是也没了嘛,所以它后面的块元素也会跟着补上。

    下面我们把son2也设置浮动

    我们发现,son2在son1的旁边,并没有把son1再往上顶一层。原因在于整个网页就分为两层,标准文档流一层,脱离文档流一层。那它既然不能往上顶,所以只好委曲求全站旁边咯。

    现在我们把三个son都设置浮动

     诶,我们发现,这玩意有点意思哈,它可以让块级元素横着排,好爽诶,但是古人说过:“一个东西,有利必有弊。”(别问我是谁,问就是我瞎编的)

    我们先不浮动,给parent加上背景颜色:

    #parent{
                background-color: cadetblue;
            }

     然后我们依次给son1、son2、son3加上浮动

    son1

     son2

     son3

     大家发现没,这个背景咋就最后都没有了呢?

    我们调出开发工具(F12  一般浏览器都是这个)审查一下元素

     嘿,这个parent的高度居然是0,不对呀,我们不是有元素吗?按理说它应该被撑开有高度才对呀,为啥呀?

    因为本来在parent里面的元素全都浮起来了,那parent里面就没东西可以撑开它的高度了,所以它的高度为0。我们称这种为现象为父元素塌陷。

    三、如何解决父元素塌陷?

    我们上面分析,造成父元素塌陷的原因是因为里面没有元素可以撑开它的高度,那我们只要有东西可以撑开它就行了

    下面有4种方法可以解决父元素塌陷问题:

      1.给父元素设置宽高(此处不做演示)

      2.给父元素设置overflow:hidden

      3.给父元素添加一个最小子元素,设置clear属性

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            #son1{
                width: 100px;
                height: 100px;
                background-color: burlywood;
                float: left;
            }
            #son2{
                width: 200px;
                height: 200px;
                background-color: rgb(196, 222, 135);
                float: left;
            }
            #son3{
                width: 300px;
                height: 300px;
                background-color: rgb(135, 173, 222);
                float: left;
            }
            #parent{
                background-color: cadetblue;
            }
    
            #littleSon{
                clear: both;
            }
        </style>
    </head>
    <body>
        <div id="parent">
            <div id="son1">son1</div>
            <div id="son2">son2</div>
            <div id="son3">son3</div>
            <div id="littleSon"></div>
        </div>
    </body>
    </html>

      4.给父元素添加一个伪类设置clear

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            #son1{
                width: 100px;
                height: 100px;
                background-color: burlywood;
                float: left;
            }
            #son2{
                width: 200px;
                height: 200px;
                background-color: rgb(196, 222, 135);
                float: left;
            }
            #son3{
                width: 300px;
                height: 300px;
                background-color: rgb(135, 173, 222);
                float: left;
            }
            #parent{
                background-color: cadetblue;
            }
    
            /* #littleSon{
                clear: both;
            } */
    
            .clear::after{
                content: '';
                display: block;
                clear: both;
            }
        </style>
    </head>
    <body>
        <div id="parent" class="clear">
            <div id="son1">son1</div>
            <div id="son2">son2</div>
            <div id="son3">son3</div>
            <!-- <div id="littleSon"></div> -->
        </div>
    </body>
    </html>

     

  • 相关阅读:
    树莓派ZeroW的Python中使用SQLite数据库
    树莓派Python读写配置文件--configparser库
    信号量示例——“生产者——消费者”实验
    互斥锁示例——模拟银行卡取钱
    管道通信(上)
    命名管道——进程通信案例
    文件I/O
    链表习题
    蓝桥杯ACM训练Day4——算法2-8~2-11:链表的基本操作
    C++——类模板几种常见的情况
  • 原文地址:https://www.cnblogs.com/jiushui/p/13375628.html
Copyright © 2020-2023  润新知