清除浮动——让包围元素包含浮动元素的四种方法

什么是CSS清除浮动?

在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象。这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动。

有一段代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>让包围元素在视觉上包含浮动元素</title>
    <style>
      .news{
          background: gray;
          border:1px solid black;
      }

      .new img{
          float: left;
      }

      .news p{
          float: right;
      }
    </style>
</head>
<body>
    <p>通过css增加内容,然后清理,display设置为block,height为0,visibility设置为hidden</p>
    <div class="news">
        <img src="logo.bmp" alt="my image">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorem voluptatum quisquam incidunt eligendi commodi, provident sit reiciendis maxime corporis sunt doloremque mollitia magnam eum totam? Nihil totam, voluptas cum nesciunt.</p>
    </div>
</body>
</html>

在上面这段代码中。因为图片和文本都被浮动,脱离了文档流,所以包围图片和文本的div不占据空间,如果我们不做什么改变的话,包围元素div是无法包含浮动元素的。所以下面介绍四种方法来清除浮动,实现包围元素包含浮动元素的效果。

1 添加一个空元素然后清理它

在这里,我们通过在div中添加一个空元素,即br,然后清理它,当然也可以使用div、hr等元素。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>让包围元素在视觉上包含浮动元素</title>
    <style>
         .news{
             border:1px solid black;
             background-color: gray;

         }

        .news p{
            float: right;
                 width: 500px;
                padding:20px;

        }

        .news img{
            float: left;
        }

        .both{
            clear: both;
        }
    </style>
</head>
<body>
<p>增加额外元素,进行清理</p>
    <div class="news">
        <img src="logo.bmp" alt="my image">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit sunt
        officia exercitationem ullam dolores possimus vitae laborum dolor amet
harum, dicta expedita nam rerum vel quas, voluptatem deserunt labore dignissimo
</p>
        <br class="both"/>
    </div>
</body>
</html>

2 浮动容器

此处原本div是不浮动的,我们给div加入float:left,让其浮动起来。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>让包围元素在视觉上包含浮动元素</title>
    <style>
         .news{
             border:1px solid black;
             background-color: gray;
                float: left;

         }

        .news p{
            float: right;
                width: 500px;
                padding:20px;

        }

        .news img{
            float: left;
        }

    </style>
</head>
<body>
<p>将容器进行浮动</p>
    <div class="news">
        <img src="logo.bmp" alt="my image">
        <p>

                Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eum aliquid sequi eius. Cum nesciunt quae velit placeat, autem nulla doloremque. Ipsa nostrum voluptatibus libero fugiat vero! Sequi officiis, molestias minus!
</p>

    </div>
</body>
</html>

3.设置容器的overflow属性值为auto或hidden

当一个容器的overflow属性值为auto或hidden时,会有一个副作用——清理包含的所有浮动元素。

在这里,我们将div的overflow属性值设置为auto。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>让包围元素在视觉上包含浮动元素</title>
    <style>
         .news{
             border:1px solid black;
             background-color: gray;
                overflow: auto;

         }

        .news p{
            float: right;
                width: 500px;
                padding:20px;

        }

        .news img{
            float: left;
        }

    </style>
</head>
<body>
<p>容器设置overflow的属性值为auto或者为hidden</p>
    <div class="news">
        <img src="logo.bmp" alt="my image">
        <p>

                Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eum aliquid sequi eius. Cum nesciunt quae velit placeat, autem nulla doloremque. Ipsa nostrum voluptatibus libero fugiat vero! Sequi officiis, molestias minus!
</p>

    </div>
</body>
</html>

4 利用伪类after添加内容并清理

添加一个”.“,并将清理,设置display为block,visibility为hidden,height为0才不会影响布局,显示出来。

需要注意的是为了IE6和IE7浏览器,要给clear这个class添加一条zoom:1;触发haslayout。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>让包围元素在视觉上包含浮动元素</title>
    <style>
      .news{
          background: gray;
          border:1px solid black;
      }

      .new img{
          float: left;
      }

      .news p{
          float: right;
      }

      .clear:after{
          content: ".";
          display: block;
          visibility: hidden;
          height: 0;
          clear: both;
      }
.clear {
  /* 触发 hasLayout */
  zoom: 1;
 }
    </style>
</head>
<body>
    <p>通过css增加内容,然后清理,display设置为block,height为0,visibility设置为hidden</p>
    <div class="news clear">
        <img src="logo.bmp" alt="my image">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorem voluptatum quisquam incidunt eligendi commodi, provident sit reiciendis maxime corporis sunt doloremque mollitia magnam eum totam? Nihil totam, voluptas cum nesciunt.</p>
    </div>
</body>
</html>

推荐:

使用伪类after来清理浮动,达到包围元素包含浮动元素的效果。添加空元素虽然简单,但是需要添加没必要的元素,overflow可能会带来无法预料的后果,例如出现滚动条或者截断内容,float父容器也是如此。而伪类after,通过CSS代码添加内容,通过属性设置不会影响布局,并兼容各大浏览器,所以建议采用。

时间: 2024-08-10 00:06:16

清除浮动——让包围元素包含浮动元素的四种方法的相关文章

CSS 清除浮动的四种方法

在实际项目中,我们经常会用到float属性来对页面进行布局.当使用float时,意味着该元素已经脱离了文档流,相当于浮于文档之上,不占据空间.但是针对兄弟元素为文字内容时,会占据一定空间,从而产生文字环绕的效果.如果不清除浮动,会导致父元素的高度撑不开等一系列问题. 那如何清除浮动呢?给出以下几种方法,一些不常用的就不说明了. 1.对浮动元素的父容器添加after伪类,并给伪类设置clear属性(给浮动元素的周围元素添加clear属性,清除该浮动元素)在浮动元素的后面增加一个块元素,对块元素设置

[Web 前端] 018 css 清除浮动的四种方法

清除浮动的四种方法 加 clear: ...(见例1) 父级上增加属性 overflow:hidden(见例2.1) 在最后一个子元素的后面加一个空的 div,给它一个样式属性 clear: both(不推荐)(见例2.2) 使用成熟的清浮动样式类 clearfix(见例3) 少废话,上例子 例 1 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>test

两列左列浮动,右列自适应宽度的四种方法

第一种方法,网上流传比较广的方法.采用左列 left 浮动,右列不浮动,采用 margin-left 定位的方式.此方法会有一个 ie6 3px bug . 另外,当浏览器框缩小到一定程度时,右侧会掉下来. <!DOCTYPE html> <html> <head> <title>方法一</title> <style type="text/css"> #left {width:100px;height:100px;

【找数组元素最大值的十四种方法】for【练习知识点和总结】

以下是心血成果,版权所有,未经允许,不得转载.作者:李金涛:FROM:光环国际 AT:201712172024.(方便以后,再次修改) <script> // 比较数组中数值的大小是比较常见的操作,比较大小的方法有多种,下面来介绍如下十四种方法,原理代码如下: // 1,排序取值:sort比较器排序(常用),以及冒泡排序(不常用,但方法思想很重要);// 2,假设比较取大值:假设max=arr[0];index=0; 在循环往后比较,如果有比max大的数就让max记录下大的数,索引赋给inde

PHP从数组中删除元素的四种方法实例

本篇文章主要介绍了PHP从数组中删除元素的四种方法实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 茴香豆的"茴"字有四种写法,PHP从数组中删除元素也有四种方法 ^_^. 删除一个元素,且保持原有索引不变 使用 unset 函数,示例如下: <?php $array = array(0 => "a", 1 => "b", 2 => "c"); unset($array[

CSS子元素在父元素中水平垂直居中的几种方法

1. 水平居中(margin: auto;)子父元素宽度固定,子元素上设置 margin: auto; 子元素不能设置浮动,否则居中失效. #div1{ width: 300px; height: 300px; border: 1px solid red; } #div1 p { width: 100px; height: 100px; background-color: green; /*float: left; !*如果设置了浮动,则自动居中就会失效.*!*/ margin: 0 auto;

jquery 将disabled的元素置为enabled的三种方法

转--http://www.jb51.net/article/19342.htm 在jquery中可以通过jqueryObj.attr("disabled","disabled")将页面中某个元素置为不可编辑或触发状态,但是在jquery的API reference中并没说明怎么将页面置为disable的元素重新置为可触发或可编辑的. 这里发现可以采用三种的变通方法将置为disabled的元素状态改为enabled. 第一种:改变disabled的boolean状态

关于数组增加和删除元素的四种方法

一.向数组最后面添加一个或多个元素 语法:arr.push(ele1,ele2,....); 该方法会返回一个新的数组长度,并且改变原来数组里面的元素 1 var arr=[1,2,3,4,5]; 2 console.log(arr.push(6)); //返回一个新的长度length=6; 3 console.log(arr);//[1,2,3,4,5,6] //会改变原来数组里面的元素 二.向数组最前面添加一个或多个元素 语法:arr.unshift(ele1,ele2,.....); 该方

多个块元素一行显示有哪几种方法

1.浮动法 <style> *{margin:0;padding:0;} .box{width:600px;height:400px;border:1px solid red;} .one{width:100px;height:100px;border:1px solid #000;float:left;}</style> <div class="box"> <div class="one">第一个</div&g