::after::before清除浮动原理

先来看一段代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        h1{
            float:left;
            width:200px;
            height:200px;
            background-color:#ccc;
        }
        span{
            display:block;
            clear:both;
        }
        p{
            width:300px;
            height:300px;
            background-color:#f1f1f1;
        }
    </style>
</head>
<body>
    <div>
        <h1>我是h1</h1>
        <span></span>
    </div>
    <p>我是p</p>
</body>
</html>

  在早期我们通过在div标签中添加了一个空的span标签,并且给这个空的span清除浮动。但是这样的话就需要每次都添加一个空的标签,所以一些前辈就想出来用::after::before来清除浮动,从效果上来看,after和before也是一个标签,所以我们就可以利用这个伪元素来清除浮动,从根本上来说它和加一个span标签来清除浮动是一样的。

  这个例子的问题就是,如果父盒子没有给高度,但是里面的子元素浮动了,或者绝对定位,固定地位,都会使这个子元素脱离文档流,使父元素不能够获取到子元素的高,也就是不能自适应子元素的高了,既然不能自适应子元素的高了,那么父元素的高就是0,既然是0那么后面的元素自然就跑上来了。

  其实最重要的不是after和before,而是浮动的元素找浮动的元素,你通过一个没有浮动的元素将它们隔离开了。 

  我以前一直不太明白为什么可以直接用clear来清除浮动,还要给这个元素加个空标签,其实是因为虽然你可以清除它上面的浮动,但是它上面的那个盒子的高度还是0。通过给大盒子里面添加元素清除浮动的话,就会触动BFC,使这个盒子和其他的盒子隔离开,使其父元素的高能够自适应子盒子的高。

时间: 2024-08-05 11:37:19

::after::before清除浮动原理的相关文章

overflow:hidden清除浮动原理解析及清除浮动常用方法总结

最近在看<CSS Mastery>这本书,里面有用overflow:hidden来清理浮动的方法.但是一直想不明白为什么能够实现清除浮动,查阅了网络上的解释,下面来总结一下. 一.首先来想想 我们大家理解的overflow:hidden是超出该元素的部分进行隐藏.这个时候就需要明确一点,该元素的高度是怎么定义的.当一个div中的两个元素浮动之后,此时div的高度就会塌陷,此时div的高度为0.那是不是意味着就要将浮动元素隐藏起来,如果是真的隐藏就是反布局常识的.所以这中间肯定有我们现在还不知道

CSS中清除浮动的两种方式

在CSS中,父元素中的子元素如果使用了float,会导致父元素塌陷,高度为0. 对于这种情况,常见的解决方式有两种. 一.增加新的div,应用clear:both属性 html: 1 <div class="father"> 2 <div class="div1">1</div> 3 <div class="div2">2</div> 4 <div class="div3

清除浮动的原理剖析

常用的清除浮动的几种方法总结下: 1,手动设置一个标签(在浮动元素下方),然后对其设置clear属性 2,给浮动元素设置 :after伪类,创建块元素,设置clear属性 3,给父元素设置浮动 4,给父元素设置overflow设置非visible值(auto,hidden) 5,给父元素的display设置为table-cell 7,在ie6,7中,设置zoom或者width,height来触发haslayout,使父元素包含浮动元素 原理剖析: 1,2方法之所以可以成功,是因为了clear属性

css清除浮动各方法与原理

说到清除浮动的方法,我想网络上应该有不下7,8的方法,介绍这些方法之前,想下为什么清除浮动? 再次回到float这个属性,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联盒子(通常是文本)的排列. 这就产生了一个问题:浮动元素所在父元素不会自动伸长以便闭合浮动元素,任其“红杏出墙”,这显然不符合我们的“伦理观”,所以要“抓回来”施以家法:那么如何抓呢? 提起css,提起(x)html,首先进入脑海的是楚楚动人的页面吗?不,首先应该是这楚楚动人的页面的背后的“楚楚冻人

CSS布局模型 之 浮动模型(浮动的工作原理和清除浮动技巧?)

浮动的工作原理 浮动是让某元素脱离文档流,在浮动框之前和之后的非定位元素会当它不存在一样,可能沿着它的另一侧垂直流动,但都为其腾出空间,块级元素也不例外(被浮动元素占据了部分行空间的块级元素,仍然被看作是占据了一整行,只不过是被浮动元素占据的那部分空间无法利用罢了). 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止:如果当前线上的水平空间不足,它将逐行向下移动,直到有空间为止(所以浮动元素不会影响页面上方布局).任何元素都可以浮动,浮动元素会生成一个块级框(拥有块级

Web前端入门学习(5)——浮动原理及清除浮动

浮动原理及清除浮动 上节回顾 在上节的<Web前端入门学习(4)-- 块级元素和行内元素之特征与转换>中(http://cherry360.blog.51cto.com/12176744/1863945),介绍了块级元素和行内元素的特征,及粗略介绍了如何进行转换.加上display属性,可以指定元素的类型,如display:block.display:inline,以及display:inline-block.当然用得最多的是最后一个display:inline-block.结合例子来看: 例

学习笔记:清除浮动的原理(BFC与hasLayout)

利用元素浮动来布局相信大家已经不再陌生了,但浮动会带来高度塌陷的问题(这里就不详诉了,有兴趣的朋友可以自行搜索).既然浮动会带来不好的影响,那我们就需要去解决这个问题.其实清除浮动带来的影响也就是我们常说的”清除浮动”的方法非常简单,网上随便一搜就知道了,但大部分像我这样的菜鸟都不知道背后的原理是什么.所以今天我主要是谈谈清除浮动背后的原理. 要了解清除浮动的原理,首先我们要了解BFC这个名词. BFC(Block Fomatting Context) BFC,翻译过来就是”块级格式化上下文”.

css浮动布局,浮动原理,清除(闭合)浮动方法

css浮动 1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的原理:使当前元素脱离普通流,相当于浮动起来一样,浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘 3.浮动的生成:使用css属性float:left/right/none 左浮动/右浮动/不浮动(默认) 4.浮动的影响: 不会影响未浮动的块级元素布局,但是会影响内联元素的布局 浮动后的元素可以设置宽度和高度,

css中clearfix清除浮动的用法及其原理示例介绍

clearfix的定义: .clearfix:after {}{ content: "."; /**//*内容为“.”就是一个英文的句号而已.也可以不写.*/ display: block; /**//*加入的这个元素转换为块级元素.*/ clear: both; /**//*清除左右两边浮动.*/ visibility: hidden; /**//*可见度设为隐藏.注意它和display:none;是有区别的.visibility:hidden;仍然占据空间,只是看不到而已:*/ l