美文网首页
浮动和包含框的关系,伪元素after解决高度塌陷

浮动和包含框的关系,伪元素after解决高度塌陷

作者: 手指乐 | 来源:发表于2019-10-02 16:10 被阅读0次
  • 浮动会使元素尽量向左或向右移动,直到碰到包含框或另外一个浮动元素的盒子模型的边缘,包含框并不会改变里面浮动元素的宽高,浮动元素宽高不会限制在包含块以内
<!DOCTYPE html>
 <html>
 <head>
    <style type="text/css">
    * {
            margin:0;
            padding:0;
    }
        .container {
            width:110px;
            height:100px;
            border:1px solid blue;
        }
        .block1 {
            width:500px;
            height:50px;
            border:1px solid red;
            float:right;
        }
        
    </style>
 </head>
 <body>
     <div class="container">
         <div class="block1"><span>块1</span></div>
     
     </div>
 </body>
 </html>

上例中,block1会保持500px的宽度,但container并不会移动位置让block1显示完全,container位置不会变,block1超出container部分会绘制到浏览器左侧以外看不到

把float改为left,就可以清晰看到block1超出container边框

但是,浮动元素会尽量使自己绘制在包含框内

以下block2会另起一行,而不是接着block1,因为另起一行会使block2超出包含框少一点

<!DOCTYPE html>
 <html>
 <head>
    <style type="text/css">
    * {
            margin:0;
            padding:0;
    }
        .container {
            width:110px;
            height:100px;
            border:1px solid blue;
        }
        .block1 {
            width:50px;
            height:50px;
            border:1px solid red;
            float:left;
        }
        .block2 {
            width:100px;
            height:50px;
            border:1px solid red;
            float:left;
        }
        
        
    </style>
 </head>
 <body>
     <div class="container">
         <div class="block1"><span>块1</span></div>
         <div class="block2"><span>块2</span></div>
     
     </div>
 </body>
 </html>
  • 块级浮动元素的宽高如果不设置,他们的宽高就由内容决定(类似内联元素),这个跟普通块级元素不一样(普通块级元素宽会充满父元素,高由内容决定)

包含块的高度如果不设置,里面全部是浮动元素的话,因为浮动元素时脱离文档流的,就会出现高度为0的情况,即高度塌陷

比如:

<!DOCTYPE html>
 <html>
 <head>
    <style type="text/css">
    * {
            margin:0;
            padding:0;
    }
        .container {
            border:1px solid blue;
        }
        .block1 {
            width:100px;
            height:50px;
            border:1px solid red;
            float:left;
        }
        .block2 {
            width:100px;
            height:50px;
            border:1px solid red;
            float:left;
        }
        
        
    </style>
 </head>
 <body>
     <div class="container">
         <div class="block1"><span>块1</span></div>
         <div class="block2"><span>块2</span></div>
     
     </div>
 </body>
 </html>
  • 可以在后面加一个div,使用clear清除浮动,撑起包含块
<!DOCTYPE html>
 <html>
 <head>
    <style type="text/css">
    * {
            margin:0;
            padding:0;
    }
        .container {
            border:1px solid blue;
        }
        .block1 {
            width:100px;
            height:50px;
            border:1px solid red;
            float:left;
        }
        .block2 {
            width:100px;
            height:50px;
            border:1px solid red;
            float:left;
        }
        .block3{
            clear: both;
        }
        
        
    </style>
 </head>
 <body>
     <div class="container">
         <div class="block1"><span>块1</span></div>
         <div class="block2"><span>块2</span></div>
         <div class="block3"><span></span></div>
     </div>
 </body>
 </html>
  • 这种方式比较别扭,一般使用伪元素解决
    ::after 伪元素在元素最后添加内容(::begin在元素最前面添加内容)
<!DOCTYPE html>
 <html>
 <head>
    <style type="text/css">
    * {
            margin:0;
            padding:0;
    }
        .container {
            border:1px solid blue;
        }
        .block1 {
            width:100px;
            height:50px;
            border:1px solid red;
            float:left;
        }
        .block2 {
            width:100px;
            height:50px;
            border:1px solid red;
            float:left;
        }
  
 
        .clearfix::after{
            display: block;
            content: "";
            clear: both;
        }
        
        
    </style>
 </head>
 <body>
     <div class="container clearfix">
         <div class="block1"><span>块1</span></div>
         <div class="block2"><span>块2</span></div>
          
     </div>
 </body>
 </html>

after默认为inline元素,inline元素的clear不起作用,所以要改成block元素同时还要对after设置内容(content,此处只为清浮动,设置内容为空即可),否则无效

注意after是添加在div class="container clearfix"这个div的内部的最后面,而不是在这个div的外面

相关文章

  • 浮动和包含框的关系,伪元素after解决高度塌陷

    浮动会使元素尽量向左或向右移动,直到碰到包含框或另外一个浮动元素的盒子模型的边缘,包含框并不会改变里面浮动元素的宽...

  • 前端零碎知识集锦

    float元素 浮动会让元素塌陷。即被浮动元素的父元素不具有高度。例如一个父元素包含了浮动元素,它将塌陷具有零高度...

  • 前端07day

    高度塌陷: 块元素默认父亲宽,高度由内容撑开父元素高度由子元素撑开浮动后塌陷 解决高度塌陷: BFC 1.父元素的...

  • 塌陷,导航,定位

    高度塌陷 块元素默认父亲宽,高度由内容撑开父元素高度由子元素撑开浮动后塌陷解决高度塌陷:BFC 1.父元素的垂直...

  • 清除浮动

    clear both 可以清除对它影响最大的浮动 可以解决高度塌陷 .clearfix:after

  • 清除浮动

    clear both 可以清除对它影响最大的浮动 可以解决高度塌陷 .clearfix:after

  • 解决高度塌陷2

    为什么出现高度塌陷?当我们设置块级元素进行浮动的时候,会导致父元素塌陷,所以需要我们解决高度塌陷问题

  • CSS----表单、框架集

    解决父元素的高度塌陷 clearfix:after{ clearfix{ clear:both zoom:1 ...

  • 高度塌陷、清除浮动、元素垂直居中

    高度塌陷: 定义:父元素没有设置高度,子元素设置了浮动(float)属性解决办法:清除浮动(仅清除浮动的负面影响,...

  • CSS: clear 清除浮动 解决网页中的“塌陷”问题

    什么是塌陷如果父级元素只包含浮动元素,那么在未设置高度的情况下,父级元素的高度塌陷为0; 可以看到在父级元素的高度...

网友评论

      本文标题:浮动和包含框的关系,伪元素after解决高度塌陷

      本文链接:https://www.haomeiwen.com/subject/ajcrpctx.html