CSS的坑
如何触发 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的坑的更多相关文章
- css 填坑常用代码分享
以下是常用的代码收集,没有任何技术含量,只是填坑的积累.转载请注明出处,谢谢. 因为提交比较麻烦,后来转置github:https://github.com/jsfront/src/blob/mast ...
- css 填坑常用代码分享[居家实用型]
原文地址 http://www.cnblogs.com/jikey/p/4233003.html 以下是常用的代码收集,没有任何技术含量,只是填坑的积累.转载请注明出处,谢谢. 一. css 2.x ...
- css 小坑
1.display:inline-block 内容上下移动 原因:inline-block 默认对齐方式是底部对齐 方法:加一个 vertical-align:top; 属性 把垂直对齐方式改为顶部
- css之坑
1.background-size要放在background后边才会生效. 2.隐藏滚动条,内容可以滑动 body::-webkit-scrollbar { display: none /* 隐藏滚动 ...
- 莫名其妙的float:left; 不能使元素紧贴父级的坑
这是项目中遇到的一个CSS的坑,做个记录,主要的原因还是浮动后脱离文档流,两个浮动的元素处于同一文档流中会相互影响位置的问题: 先上代码吧: 效果预览地址:浮动不能靠左的情况; 原本红色模块应该处于蓝 ...
- 非常好用的CSS样式重置表
非常好用的CSS样式重置表 我们在项目前期准备时都会准备好一个reset.css,因为不同浏览器对标签的解析各不相同,重置css样式可以让标签在不同浏览器下产生相同的效果.所以一个 ...
- 不要再纠结css/js/html有没有必要放在WEB-INF下了
原因 首先,css/js/html没有必要放在WEB-INF下. 最终这些会被原封不动的展现在客户端,所以访问安全根本就不会成为问题. jsp放在web-inf下,原因主要有两个 1. 远古时代的模式 ...
- 内层div的margin-top影响外层div——引出外边距合并Collapsing margins
内层div的margin-top影响外层div——引出外边距合并Collapsing margins 作者:zccst 今天才算是了解边距合并.正如一位前辈所言,每一个CSS的坑,都让你学到不少知识. ...
- python的Web框架,Django模板标签及模板的继承
模板标签 在传递数据的时候,会有大量的数据展示在浏览器上,而数据会是动态变化的,在html的编写中,数据也是需要动态的,而不能是写死的,如果动态展示呢. 给定的例子数据 views传递数据给html ...
随机推荐
- Vue 给子组件绑定v-model
父组件使用子组件时,使用v-model指令,在子组件中使用value获取props的值 父组件 <template> <div style="margin:20px;dis ...
- windows10永久激活工具 新版win10激活工具(绝对有效的永久激活工具)
来看这篇文章的,都用过KMS了吧?对!KMS是批量激活的,激活时间是一年,如果给女神激活,此法首选呀!!!但是帮基友激活,过了一年又来找自己,作为程序员的你,脸上是不是有点挂不住然后又不想花钱去买某宝 ...
- 微信小程序之蓝牙广播信息
期初第一次做蓝牙开锁的时候遇到的最尖锐的问题就是ios设备如何对获取的广播信息进行读取,大概用了4中方式,都无法解决,最后不得不求助官方人员.给了一个方法,大家可以参考.在此附图: 由于mac地址是6 ...
- python 10 else EasyGui(转载)
else语句 if else 要么怎么样,要么不怎么样 while else 干完了能怎样,干不完就不怎样 (异常处理) else 没有问题,就干吧 try: int('a') except Valu ...
- 使用 codeblocks 编写C++ udp组播程序遇到的问题
编译错误 会出现好多undefined reference to'WSAStartup to@8之类的错误,都是undefind开头的 解决方法: Settings -> Compiler se ...
- neutron plugin 笔记
neutron-plugin 分为 core-plugin 和 service-plugin 两类 L2-L3称为core plugin,包含network.subnet.portL4-L7称为ser ...
- 你所不知道的Spring的@Autowired实现细节
前言 相信很多Java开发都遇到过一个面试题:Resource和Autowired的区别是什么?这个问题的答案相信基本都清楚,但是这两者在Spring中是如何实现的呢?这就要分析Spring源码才能知 ...
- JDK14-ZGC调研初探
原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 背景 公司ElasticSearch准备进行升级,而ElasticSearch7以上则是已 ...
- 第7篇scrum冲刺(5.27)
一.站立会议 1.照片 2.工作安排 成员 昨天已完成的工作 今天的工作安排 困难 陈芝敏 学习云开发,云函数调用以及数据的前后端传递 今天实现云词库搭建,随机获取并显示,对云开发有更深的认识 ...
- 第4篇 Scrum 冲刺博客(专✌️团队)
一.站立式会议 1.1会议图片 1.2成员完成情况 成员 昨天完成的任务 今天计划完成的任务 工作中的困难 陈忠明 按下载热度返回歌曲信息,与前端尝试交互 歌曲信息的上传/下载包 前后端交互问题 吴茂 ...