欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

css之浮动——浮动的概念、为什么清除浮动?清除浮动的方式

程序员文章站 2024-01-29 12:02:16
...

目录

1 为什么浮动(float)?

2 为什么清除浮动?

3 清除浮动的几种方式

1)父级元素(包含块)定义 height

2)父级元素添加overflow属性(父元素添加overflow:hidden)

3)添加空白(没有任何内容)标签

4)after伪元素清除浮动


1 为什么浮动(float)?

浮动(float)最初仅仅是为了让内容环绕在浮动元素周围,后来利用它的特点逐渐将其用于布局

浮动让布局多样化,但它会脱离正常流,造成一些副作用(如高度塌陷),如果不加以解决会直接影响整体布局。

2 为什么清除浮动?

浮动的一大缺陷是让父元素高度塌陷,也就是浮动元素不能把父元素的高度撑起来(清除浮动主要是为了解决,父元素因为子级元素浮动引起的内部高度为0的问题);(附当父元素不给高度的时候,内部元素不浮动时会撑开,而浮动的时候,父元素变成一条线

另一大缺陷是影响兄弟元素的位置或样式。

3 清除浮动的几种方式

清除浮动本质上是说要清除浮动元素带来的一些影响(例如高度塌陷)。

1)父级元素(包含块)定义 height

原理:父级元素手动定义height,就解决了父级div无法自动获取到高度的问题。

  缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题

2)父级元素添加overflow属性(父元素添加overflow:hidden

原理: 通过触发BFC方式,实现浮动(父元素添加overflow,且值不为visible时,通常是hidden)。必须定义width或zoom:1(用于兼容IE6),同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度

缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #father{
            background-color: red;
            zoom: 1;
            overflow: hidden;
        }

        #son {
            background-color: #00B7FF;
            width: 100px;
            margin-top:100px ;
            float: left;
        }
    </style>
</head>
<body>
<div id="father">
    <p>我是不浮动元素1</p>
    <div id="son">我是浮动元素</div>
</div>

</body>
</html>

css之浮动——浮动的概念、为什么清除浮动?清除浮动的方式

3)添加空白(没有任何内容)标签

给其设置clear:both;(在最后一个浮动标签后,新加一个标签,)

(添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度)

缺点:缺点:添加无意义标签,语义化差

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #father{
            background-color: red;
            zoom: 1;

        }
        #son_non{
            clear: both;
        }
        #son {
            background-color: #00B7FF;
            width: 100px;
            margin-top:100px ;
            float: left;
        }
    </style>
</head>
<body>
<div id="father">
    <div id="son">我是浮动元素</div>
    <div id="son_non"></div>
</div>

</body>
</html>

                            css之浮动——浮动的概念、为什么清除浮动?清除浮动的方式

4)after伪元素清除浮动

原理:使用伪元素 :after 来代替空白标签,因为清除浮动需要在浮动元素后面,所以不可以使用 :before ,对 :after 设置 content:"" ,并使其 display:block 成为块级元素后 clear:both 来清除浮动。

缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout.

注意:伪元素:after的位置。在元素中添加伪元素,其实就是在该元素内的最后面添加一个伪元素。所以咋这里需要向父元素div添加伪元素,而不是浮动元素添加

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #father{
            background-color: red;
            *zoom: 1;  /*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/

        }
        #father:after{
            /*伪元素是行内元素 正常浏览器清除浮动方法;
            :after 来代替这个空白标签,因为清除浮动需要在浮动元素后面
            */
             content: "";  /*必须设置才有效 没有内容*/
            display: block;/*必须设置才有效 伪元素是行内元素 正常浏览器清除浮动方法*/
            clear: both;  //
        }
        #son {
            background-color: #00B7FF;
            width: 100px;
            margin-top:100px ;
            float: left;
        }
    </style>
</head>
<body>
<div id="father">
    <p>我不是浮动元素</p>
    <p id="son">我是浮动元素</p>
</div>

</body>
</html>

css之浮动——浮动的概念、为什么清除浮动?清除浮动的方式

百里于2020年3月19日

如果有错,请您指出!如有侵权,请联系我删除!