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

浮动与清除浮动

程序员文章站 2022-04-24 22:11:40
...

浮动是什么?

元素的浮动是指设置浮动的元素脱离了标准文档流的控制,移动到其父元素中的指定位置的过程,碰到父元素的边框会停留。脱离文档流的元素不占据标准流的位置,因此会影响标准流。

在CSS中,通过float属性来定义浮动,其基本语法格式为 选择器 {float:属性值;}

属性值 描述
left 元素向左浮动
right 元素向右浮动
none 元素不浮动(默认值)

浮动的作用在于让块元素在同一行显示,方便我们布局,但是浮动也会产生副作用

1. 浮动元素的父元素的高度无法撑开

2. 若与浮动元素同级的后面的盒子不浮动,后面的盒子会占据浮动元素原来的位置,浮动元素会浮在后面盒子的上面

3. 若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构。

清除浮动的方法

1. 将浮动元素添加一个与元素容器包裹起来,并且给父元素设置固定高度

计算浮动元素的高度,根据浮动元素的高度来计算父元素的高度,缺点是每次设计都要人为计算,不灵活。

<style>
/* css 给父元素设置高度来清除浮动 */
.div1 {
        width: 200px;
        background-color: pink;
        height: 200px;
        overflow: hidden;
        float: left;
    }
.div2 {
        width: 200px;
        height: 200px;
        background: purple;
        float: left;
    }
.div3 {
        width: 420px;
        height: 200px;
        background: blue;
    }
.parent {
        height: 200px;
    }
</style>
<!-- html -->
<div class="parent">
    <div class="div1">
    </div>
    <div class="div2">
    </div>
</div>
<div class="div3"></div>

2. 在最后一个浮动元素的后面添加一个空元素,设置属性clear:both清除浮动,这样父元素会自动检测子元素的高度(以最高的为准),缺点是要额外添加空元素


<style>
/*css 清除浮动*/
.clear {
     clear: both;
       }
</style>

<!-- html -->
    <div class="div1">
    </div>
    <div class="div2">
    </div>
    <div class="clear"></div>
<div class="div3"></div>

3. 给浮动元素的父元素(与第一种方法一样,也是添加了元素,但灵活性比较高)设置overflow:hidden,将第一种方法中的parent高度值的设置改为overflow:hidden这一句就好了,很容易写,就不写代码了

为什么overflow:hidden会起作用呢,这是因为overflow:hidden相当于是让父级元素紧贴内容,这样即可紧贴其对象内的内容(包括使用float的盒子),从而实现了清除浮动

这样虽然灵活性高,但是也有缺点,内容增多的时候容易造成不自动换行导致内容被隐藏掉,无法显示需要溢出的元素。

4. 使用伪元素after,给浮动元素的父容器添加设置after伪元素,具体设置样式为

.parent:after {
        /* 缺一不可 */
        clear: both;
        content: "";  /*以前不能设置为空,因为有些浏览器会自动为它添加空格,但是现在可以了*/
        display: block;
        height: 0;     /*如果缺少,将会占据一定的高度*/
        visibility:hidden;
    }

/*为了兼容IE6,设置zoom属性的属性值为1*/
.parent {
        zoom: 1;
        /*如果要兼容IE7以下的版本,请使用下面这种样式(去掉zoom: 1;)*/
        
        *zoom: 1; /* *表示IE7以下识别 */
}

 还有一种写法,也是利用伪元素,只需要给要父元素添加clearfix类名就可以了

.clearfix:before,
.clearfix:after {
        display: table;
        content: "";
    }
.clearfix:after {
        clear: both;
    }
.clearfix {
        *zoom: 1;
    }
浮动与清除浮动
设置前

 

浮动与清除浮动
设置后

 

注释:元素添加浮动之后,会具有行内块元素的特性(隐藏模式转换)。元素的大小完全取决于定义的大小或者内容的多少,浮动根据元素书写的位置显示相应的浮动。