详解利用clear清除浮动的一些问题解决
下面这段代码是用来清除浮动带来的高度塌陷问题
.clearfix:before { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
Question 1: 上面的代码的能够实现清除浮动的问题吗?
Answer: Can't. 因为clear属性只能控制元素本身与前面的浮动元素的关系。在本例中,使用:before伪元素明显位于所有子元素之前,故而clear属性不会因后面的浮动元素产生任何作用效果。 clear属性的官方定义可以查看CSS文档 。那么应该如何修改呢?将:before换成:after即可。最终代码如下:
.clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
Question 2: content属性的内容能改成空吗content: '';?
Answer: Yes. 因为设置了 height:0; 和 visibility: hidden。 如果设置了content:'';,那么 height:0; 和 visibility: hidden和 可以去掉吗? 当然可以,因为块元素没有内容就不会有高度咯。
更改后的代码如下:
.clearfix:after { content: ""; display: block; clear: both; }
Question 3: display属性的内容能改成 inline 或 inline-block 吗?
Answer: 不能。 我们要明白float属性的初衷————让文字环绕图片展示。翻译成另外一句话:内联级别的元素会环绕浮动元素展示。那么为什么 display: block;可以解决高度塌陷的问题呢。 因为 clear属性的含义是不让元素本身与浮动元素的边界相邻。如果块级元素要不与块级元素边界相邻,只有换到下一行展示。也正为换行,才将父元素到高度撑开了,正式上面的代码解决高度塌陷的原理。
Question 4: 下面到div元素会存在高度塌陷问题吗?
<style> .clearfix::after { content: ""; display: block; clear:left; } img { float: right; } </style> <div class="clearfix"> <span>历史的天空</span> <img src="images/naruto.gif"> </div>
Answer: 存在。为什么呢?要知道 clear属性中, clear:left; 和 clear:right; 的区别。
left : 不与左浮动的元素产生边界接触;
right : 不与右浮动的元素产生边界接触;
both : 不与左浮动和右浮动的元素产生边界接触;
所以上面的代码不会解决高度塌陷到问题。
如果有如下代码:
<style> .clear-left { clear:left; } .clear-right { clear:right; } .fl { float: left;} .fr { float: right;} .box { height: 30px; width: 30px; background: yellowgreen; margin: 5px; } </style> <div> <div class="box fl">1</div> <div class="box fr">2</div> <div class="box clear-left">3</div> </div> <div> <div class="box fl">1</div> <div class="box fr">2</div> <div class="box clear-right">3</div> </div>
你会发现,两个div的展示效果是相同的。也就是说,如果前面同时存在左浮动和右浮动到元素,那么clear属性值无论设成left 还是right都无关紧要。 反过来想,如果clear属性设成 both,那么无论前面的元素是左浮动还是右浮动,都无关紧要。这也是clearfix通常设置 clear:both;的原因。
注意一点,我们一直在说 解决 高度塌陷都问题,从来没有说清除浮动。 是因为本质上,浮动并没被清除,我们只是利用clear属性解决了浮动元素带来的父级元素高度塌陷问题。而且clear属性影响也只是设置clear属性的元素本身,而不是浮动元素。
为了学习工作与休闲娱乐互不冲突,现新建圈【码农茶水铺】用于程序员生活,爱好,交友,求职招聘,吐槽等话题交流,希望各位大神工作之余到茶水铺来喝茶聊天。
了解更多
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Git代码防丢指南
我们在日常使用Git的过程中经常会发生一些意外情况,如果处理不当,则可能会出现代码丢失的假象。本文将针对IDEA&Git日常开发中的一些场景,为你层层拨开迷雾,解析常见的错误及其发生原因,让你从此不再惧怕代码冲突或丢失问题。 为简化问题,本文假设所有团队成员均在同一分支上开发。 文中更新操作是指在IDEA中单击菜单VCS-Update Project...。 1. 常见工作流程 通常当你早上到公司打开电脑,首先执行更新操作(单击IDEA菜单VCS-Update Project...),然后开始愉快地编码。编码完成后通常要执行以下几个操作: 更新操作 创建本次提交 推送远程分支 1.1 更新操作 为了保证Git拥有一个简洁的提交历史,在提交之前需要先执行更新操作,即在IDEA中依次单击菜单VCS-Update Project...,或者按下Ctrl+T,弹出如下窗口: 窗口左侧选择更新类型(Update Type): Merge:更新时执行合并操作。等价于执行git fetch && git merge或者git pull --no-rebase。 Rebase:...
- 下一篇
解密阿里线上问题诊断工具Arthas和jvm-sandbox
大纲目录 这篇文章是之前学习Arthas和jvm-sandbox的一些心得和总结,希望能帮助到大家。本文字较多,可以根据目录进行对应的阅读。 背景:现在的问题所在? Arthas: Arthas能帮助你干什么?各种命令原理是什么? jvm-sandbox: jvm-sandbox能帮助你干什么? 实现原理?自己如何实现一个? 常见的一些问题? 1.背景 2018年已过,但是在过去的一年里面开源了很多优秀的项目,这里我要介绍两个比较相似的阿里开源项目一个是Arthas,另一个是jvm-sandbox。这两个项目都是在今年开源的,为什么要介绍这两个项目呢?这里先卖个关子,先问下大家不知道是否遇到过下面的场景呢? 当你线上项目出了问题,但是一打开日志发现,有些地方忘记打了日志,于是你马上补上日志,然后重新上线。这个在一些上线流程不规范的公司还比较轻松,在一些流程比较严格,比如美团上线的时候就有封禁期,一般就只能9点之后才能上线。有可能这样一拖就耽误了解决问题的黄金时刻。 当你的项目某个接口执行速度较慢,为了排查问题,于是你四处加上每个方法运行时间。 当你发现某个类有冲突,好像在线上运行的结果...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程