如何触发 bfc 规则

  • 浮动元素:float 除 none 以外的值
  • 绝对定位元素:position (absolute、fixed)
  • display 为 inline-block、table-cells、flex
  • overflow 除了 visible 以外的值 (hidden、auto、scroll)

    十分钟理解 BFC 原理

注意:如果设置了float: left/right或者position: absolute,浏览器会将其转为inline-block

<!-- log -->
<style>
.span {
/* 加入float之后,即便是inline也可以设置宽高了 */
float: left;
width: 300px;
height: 100px;
background-color: green;
}
</style>
<span class="span">我是一个span</span>
<div class="clear"></div>

float 的遮挡问题

<!-- log -->
<style>
#test-float .span {
float: left;
height: 30px;
width: 100px;
background-color: rgba(255, 0, 0, 0.2);
}
#test-float .div {
background-color: aqua;
}
</style>
<div id="test-float">
<span class="span">1</span>
<span class="span">2</span> <div class="div">div</div>
</div>

margin 塌陷

如果一个元素的所有子元素都是浮动的,那么这个元素高度就是 0(若没有指的宽度,就是父元素宽度),发生在父子元素之间

解决方法:

  • 使父元素触发 bfc 规则
  • margin-top:1px solid black;(不好)

margin 合并

发生在兄弟元素之间

解决方法:

  • 不解决
  • 使父元素触发 bfc 规则(不好,徒增了 HTML 元素)

float 浮动流问题

浮动元素产生了浮动流,对于浮动流,块级元素看不到,只有 bfc 元素和文本类属性的元素(比如图片)才能看到。

问题:父元素包不住浮动的子元素。如(红色为父元素的边框):

<!-- log -->
<div class="float-container">
<div class="float">1</div>
<div class="float">2</div>
<div class="float">3</div>
<div class="float">4</div>
<div class="float">5</div>
<div class="float">6</div>
<div class="float">7</div>
<div class="float">8</div>
<div class="float">9</div>
</div>
<div class="clear"></div>
<style>
.my-container {
height: 300px;
}
.float-container {
max-width: 300px;
border: 5px solid red;
} .float-container .float {
float: left;
width: 100px;
height: 100px;
color: white;
background-color: #000000;
}
</style>

为什么会出现这种现象呢?那就是加了浮动之后的元素脱离了标准流,所以父容器出现了高度塌陷。

解决方法

  • clear + 引入一个无用的 html 元素
  • clear + 伪元素选择器
  • 给父元素加一个高(不推荐,不够灵活)
  • 让父级元素触发 bfc 规则,使其能看到 float

方法一:

<!-- log-after -->
<div class="float-container-1">
<div class="float">1</div>
<div class="float">2</div>
<div class="float">3</div>
<div class="float">4</div>
<div class="float">5</div>
<div class="float">6</div>
<div class="float">7</div>
<div class="float">8</div>
<div class="float">9</div>
<div class="my-clear"></div>
</div>
<style>
.float-container-1 {
max-width: 300px;
border: 5px solid red;
} .float-container-1 .float {
float: left;
width: 100px;
height: 100px;
color: white;
background-color: #000000;
}
.float-container-1 .my-clear {
clear: both;
}
</style>

博客园就是用到方法一,这种方法的缺点在于增加了多余的 HTML 元素。

方法二:

<!-- log-after -->
<div class="float-container-2 clearfix">
<div class="float">1</div>
<div class="float">2</div>
<div class="float">3</div>
<div class="float">4</div>
<div class="float">5</div>
<div class="float">6</div>
<div class="float">7</div>
<div class="float">8</div>
<div class="float">9</div>
</div>
<style>
.float-container-2 {
max-width: 300px;
border: 5px solid red;
} .float-container-2 .float {
float: left;
width: 100px;
height: 100px;
color: white;
background-color: #000000;
} .clearfix::after {
content: '';
clear: both;
/* clear只对block生效 */
display: block;
}
</style>

CSS的坑的更多相关文章

  1. css 填坑常用代码分享

    以下是常用的代码收集,没有任何技术含量,只是填坑的积累.转载请注明出处,谢谢. 因为提交比较麻烦,后来转置github:https://github.com/jsfront/src/blob/mast ...

  2. css 填坑常用代码分享[居家实用型]

    原文地址 http://www.cnblogs.com/jikey/p/4233003.html 以下是常用的代码收集,没有任何技术含量,只是填坑的积累.转载请注明出处,谢谢. 一. css 2.x ...

  3. css 小坑

    1.display:inline-block 内容上下移动 原因:inline-block 默认对齐方式是底部对齐 方法:加一个 vertical-align:top; 属性 把垂直对齐方式改为顶部

  4. css之坑

    1.background-size要放在background后边才会生效. 2.隐藏滚动条,内容可以滑动 body::-webkit-scrollbar { display: none /* 隐藏滚动 ...

  5. 莫名其妙的float:left; 不能使元素紧贴父级的坑

    这是项目中遇到的一个CSS的坑,做个记录,主要的原因还是浮动后脱离文档流,两个浮动的元素处于同一文档流中会相互影响位置的问题: 先上代码吧: 效果预览地址:浮动不能靠左的情况; 原本红色模块应该处于蓝 ...

  6. 非常好用的CSS样式重置表

    非常好用的CSS样式重置表           我们在项目前期准备时都会准备好一个reset.css,因为不同浏览器对标签的解析各不相同,重置css样式可以让标签在不同浏览器下产生相同的效果.所以一个 ...

  7. 不要再纠结css/js/html有没有必要放在WEB-INF下了

    原因 首先,css/js/html没有必要放在WEB-INF下. 最终这些会被原封不动的展现在客户端,所以访问安全根本就不会成为问题. jsp放在web-inf下,原因主要有两个 1. 远古时代的模式 ...

  8. 内层div的margin-top影响外层div——引出外边距合并Collapsing margins

    内层div的margin-top影响外层div——引出外边距合并Collapsing margins 作者:zccst 今天才算是了解边距合并.正如一位前辈所言,每一个CSS的坑,都让你学到不少知识. ...

  9. python的Web框架,Django模板标签及模板的继承

    模板标签 在传递数据的时候,会有大量的数据展示在浏览器上,而数据会是动态变化的,在html的编写中,数据也是需要动态的,而不能是写死的,如果动态展示呢. 给定的例子数据 views传递数据给html ...

随机推荐

  1. csapp第九章笔记-虚拟内存

    目录 物理与虚拟寻址 地址空间 虚拟内存作为缓存的工具 虚拟内存作为内存管理的工具 虚拟内存作为内存保护的工具 地址翻译 使用TLB(翻译后备缓冲器)加速地址翻译 多级页表 物理与虚拟寻址 计算机系统 ...

  2. ReentrantLock与synchronized 源码解析

    一.概念及执行原理   在 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的机制 ReentrantLock,该机制的诞生并 ...

  3. C#LeetCode刷题-链表

    链表篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 19 删除链表的倒数第N个节点   29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...

  4. JavaScript 回调函数的简单示例

    回调函数 回调函数也被称为高阶函数 所谓高阶函数,就是说值 函数作为参数被传递或者返回值输出 操作函数的函数称为 高阶函数 把一段可执行的代码(一个函数)作为参数传递给其他的代码(另一个函数),并在需 ...

  5. ECharts 常见的问题总结

    以前也用过ECharts(不得不说,这真的是百度的良心产品),但是都是一些简单的示例.这次因为工作的需要,做了很多表格,对ECharts有了更加深刻的理解,现在来总结一下. 第一个肯定是新手经常遇到的 ...

  6. 利用BeautifulSoup去除HTML指定标签和去除注释

    去除指定标签 from bs4 import BeautifulSoup #去除属性ul [s.extract() for s in soup("ul")] # 去除属性svg [ ...

  7. LeetCode 120. Triangle (三角形最小路径和)详解

    题目详情 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径 ...

  8. java中三大集合框架

    一.List集合 1.List实现的超级父类接口:Collection 存储一组不唯一(允许重复),有序的对象. 2.了解ArrayList类 A):定义的格式:ArrayList<具体类型&g ...

  9. Golang笔记整理--第二天

    一. 标识符 Go语言标识符构成规则:开头第一个字符必须是字母或者是下划线,后面可以跟任意多个字符,数子或者下划线,并且区分大小写. 例: _aa11 //合法标识符 aa11 //合法标识符 _aa ...

  10. 浏览器自动化的一些体会7 selenium webdriver的一些问题

    1. 下载图片 这个链接说得最好,差不多所有可能的方法都列举了,除了没有提到用URLDownloadToFile,不过这和用WebClient差不多. https://stackoverflow.co ...