先来看一段代码

<!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,使这个盒子和其他的盒子隔离开,使其父元素的高能够自适应子盒子的高。

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

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

    最近在看<CSS Mastery>这本书,里面有用overflow:hidden来清理浮动的方法.但是一直想不明白为什么能够实现清除浮动,查阅了网络上的解释,下面来总结一下. 一.首先来想 ...

  2. overflow:hidden清除浮动原理

    overflow:hidden的意思是超出部分去掉,如果父元素height为auto,内部元素浮动,势必会将内部元素全部隐藏,故计算出内部浮动高度顺便清除浮动.

  3. CSS中清除浮动的两种方式

    在CSS中,父元素中的子元素如果使用了float,会导致父元素塌陷,高度为0. 对于这种情况,常见的解决方式有两种. 一.增加新的div,应用clear:both属性 html: <div cl ...

  4. 为什么设置overflow为hidden可以清除浮动带来的影响

    1.问题起源 在平时的业务开发写CSS中,为了满足页面布局,元素的浮动特性我们用的不能再多了.使用浮动的确能够解决一些布局问题,但是也带了一些副作用影响,比如,父元素高度塌陷,我们有好几种可以清除浮动 ...

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

    clearfix的定义: .clearfix:after {}{ content: "."; /**//*内容为“.”就是一个英文的句号而已.也可以不写.*/ display: b ...

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

    css浮动 1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的原理:使当前元素脱离普通流,相 ...

  7. CSS之浮动布局(float,浮动原理,清除/闭合浮动方法)

    css之浮动布局 本人博客:查看文章   1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的 ...

  8. css清除浮动的原理

    最近学习css发现了高度塌陷时候要清除浮动,为了理解清楚浮动原理,网上找了不少资料,发现都写的不是很清楚,而且都是一模一样的内容,我在里分享一下我对清楚浮动原理的理解, 如果你已经很了解什么是浮动和浮 ...

  9. css清除浮动各方法与原理

    说到清除浮动的方法,我想网络上应该有不下7,8的方法,介绍这些方法之前,想下为什么清除浮动? 再次回到float这个属性,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联 ...

随机推荐

  1. JavaSE自学笔记

    ch03 [Thu Aug 18 2016 11:22:26 GMT+0800] 对象变量与对象之间是指代关系,对象变量并不能完全说明有无对象可用.这种指代关系是通过赋值运算建立起来的.对象变量保存的 ...

  2. vc6编译apache遇到的问题

    在apache的官网上下载了httpd-2.0.65-win32-src,打算了解一下其中的细节,以给目前做的一个项目提供抄袭性的参考.那是一个vc6的工程.用vc6一编译,apr那个工程报错,说什么 ...

  3. cs程序添加初始化加载

    this.Name = "mysirst"; this.Text = "车辆窗体程序"; this.Load += new System.EventHandle ...

  4. Eclipse中设置jsp文字大小

  5. WideCharToMultiByte和MultiByteToWideChar函数的用法

    为了支持Unicode编码,需要多字节与宽字节之间的相互转换.这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读<Windows核心编程>,总结出正确的用法. ...

  6. 在chrome下的文本框sendkeys,提示element can't focus--解决方法

    在chrome下的文本框sendkeys,提示element can't focus--解决方法(成都-半步流雲,群友解决) 成都-半步流雲1.升级你的chromedriver,2.降chrome版本 ...

  7. CSS中强大的EM

    (转)作者:dearjohn ,发布于2012-7-31 http://www.uml.org.cn/html/201207311.asp 使用CSS也好久了,但一直都是在使用“px”来设置Web元素 ...

  8. java多线程(精华版)

    在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应 ...

  9. blender 2.6 快捷键

    右键单击 选中 A 取消选择/全选 中键拖动 旋转 中键滚动放大/缩小 Shift+中键拖动 平移 右上斜线三角区域拖动 产生新视窗 Shift+c准星复位 Num1前视图 Ctrl+Num1后视图 ...

  10. maven配置发布仓库

    首先,在工程的pom.xml中添加仓库信息 <distributionManagement> <repository> <id>releases</id> ...