理解clear: left/clear: right

我们都习惯使用“clear:both清除浮动”这样的陈述。因此,当想到clear: left的时候,自然会认为是“清除左浮动”,clear: right是清除右浮动。

其实现在想想,这样的理解与表示是不严谨的欠考虑的。

一般,现在中文圈流传的表述是:

clear语法:
clear : none | left | right | both

取值:
none : 默认值。允许两边都可以有浮动对象
left : 不允许左边有浮动对象
right : 不允许右边有浮动对象
both : 不允许有浮动对象

w3.org官方的解释是:「元素盒子的边不能和前面的浮动元素相邻」。

我个人觉得官方解释更好一点。

无论是我“清除左/右浮动”,还是业界流传的“不允许左/右边有浮动对象”,其意思都是,设置的clear的元素让浮动元素如何如何。也就是我让别人如何如何~~大家可以仔细体会,细细感受下……

而官方的说法则是“设置了clear的元素不能怎样怎样”。也就是我自己如何如何~~大家可以再次感受下……

为何官方解释更好呢?难道是“己所不欲勿施于人”的缘故?哈,这个解释赞的,方便记忆。更通俗的原因是:

务必记住这句话:“float是魔鬼,会影响其他相邻元素;但是clear是小白,其只会影响自身,不会对其他相邻元素造成影响!

但是,官方的解释似乎拗口,缺少点灵性。于是,我根据自己的感性认知,做了如下理解:

clear语法:
clear : none | left | right | both

取值:
none : 默认值。
left : 左侧抗浮动
right : 右侧抗浮动
both : 两侧抗浮动

“抗”这个拟人化的动词的发起者是设置了clear属性的元素,既形象又释义准确。

实例出真知
    您可以狠狠地点击这里:clear:left/right的作用效果demo

例如上图所示的clear:left作用示意:图片左浮动,化身魔鬼,要影响后面相邻的元素。一般的元素都逃不了被影响被束缚的命运。除非拥有clear技能。例如,这里clear:left左侧抗浮动,也就是,左侧的浮动根本就奈何不了我——我还是原原本本在下面显示。

但是,如果图片是右浮动,则clear:left仍逃不过沦陷的命运,可以看到父级容器的高度塌陷了!

单纯的clear:left就像是招潮蟹,一侧雄起,一侧不举。

因此,考虑到通用性,在抗浮动的处理中,我们都是使用clear:both. 用意很明显:我不必关心你是左浮动还是右浮动,我都通通免疫。

因此,我们才会有下面这段雕琢后的清除浮动通用CSS:

.fix { *zoom: 1; }
.fix:after { content: ‘‘; display: table; clear: both; }

下面又有问题了,貌似我们接触的clear基本上都是both值,似乎leftright值的出现就是鸡肋,没什么用。真的是这样吗?

二、clear:left/right的实际用途

clear:left/right最实际也是最常见的用途就是实现垂直环绕布局

出个简单的题目,下图所示的布局实现,你的HTML结构会是?

哈,我猜想下,估计你会把“头像img”和“姓名”放在同一个父级容器中,而这个父级容器左浮动;然后右侧的信息元素浮动跟随(自适应布局),对不对?

这是业界主流做法,其实是没什么问题的?

不过,你有没有细细思考过这样一个问题:“为何大家几乎都是这种HTML结构设计?”

实际上,按照我不专业的理解,头像、姓名、自我描述应该是平级的兄弟关系。从语义来看,貌似“头像、姓名”硬生生变成儿子和女儿是不妥的吧~~

当我们只知道票子放银行钱会变多,我们就只会存钱理财。同样的,并不是我们不想尝试其他的结构实现布局,而是,我们不知道方法。说穿了,就是对clear:left/right理解不透,不够重视!

如何“头像”、“姓名”、“自我描述”三兄弟平起平坐,同时达到我们想要的布局效果呢?就是借助clear:left, 半壁clear属性配合float属性可以实现“垂直环绕布局”。

何为“垂直环绕布局”?上面提供的demo中有示意:

两个图片实际上都是右浮动(float: right)的,这种情况下,显然,图片会是一行排排站。但是,如果后面一张图片设置了右侧抗浮动声明:clear: right. 则,后面一张图片就会落下来,形成垂直布局;加上自身的浮动特性依旧存在,于是,两张图片犹如一个浮动整体。这就是典型的“垂直环绕布局”。

于是,我们如下HTML以及CSS,就有符合题目要求的新型布局方式啦!

<div style="width:500px;font-size:12px;overflow:hidden;_zoom:1;">
    <span style="float:left;width:96px;...">头像</span>
    <strong style="float:left;clear:left;...">姓名</strong>
    <p style="margin-left:106px;...">我是一个帅哥……</p>
 </div>

更新于2017年1月1日
后来经过我的实践与研究,得到了一个惊人的结论,凡是clear:left或者clear:right起作用的地方,一定可以使用clear:both替换!

原因在于,clear属性是让自身不能和前面的浮动元素相邻,注意这里“前面的”3个字,而float属性要么就left要么就right,不可能同时存在。由于clear属性对“后面的”浮动元素不闻不问,因此,当clear:left有效的时候,clear:right必定无效,也就是此时clear:left等同于设置clear:both,反之亦然。

所以,clear:leftclear:right这两个声明就没有任何使用的价值,至少在CSS世界中是如此,直接使用clear:both吧。

http://www.zhangxinxu.com/wordpress/2014/06/understand-css-clear-left-right-and-use/

时间: 2024-08-26 09:18:53

理解clear: left/clear: right的相关文章

【转】准确理解CSS clear:left/right的含义及实际用途

零.说点什么 好久没更新了.并不是在折腾什么大作,而是广度学习与实践中,加上婚礼等诸多大事,所以产出较少. 今天这篇也只是小作,博客是自己很好的学习工具,只要我学习不止,博客也会不断更新的. 我们平时一般都使用clear:both清除浮动,貌似就干这一件事件.用得很开心,但似乎理解上懵懵懂懂,我其实也是,早年的时候,测试过CSS clear:left/right,虽知其作用(80%确定而已),但不知其机理. 有必要再次整理下,温故知新.可能很多同行都没有注意left/right值,或者可能理解上

转: CSS中float和clear的理解

float:浮动,比如,默认的,我们知道,div是占满一行的,现在我们想把两个div显示在一行上,那怎么办呢<div style="width:100px;">11111</div><div style="width:150px">2222</div> 这样我们就设置了两个div,一个宽度100px,一个宽150px,可预览一下,我们的div仍在两行上,那么怎么把它改到一行上呢,这儿就需要float,设置第一个div的

Python 字典删除元素clear、pop、popitem

原文网站:http://www.iplaypython.com/jinjie/jj116.html 同其它python内建数据类型一样,字典dict也是有一些实用的操作方法.这里我们要说的是字典删除方法:clear().pop()和popitem(),这三种方法的作用不同,操作方法及返回值都不相同.接下来就来查看下这些字典特定方法的具体用法是什么. 字典clear()方法 clear()方法是用来清除字典中的所有数据,因为是原地操作,所以返回None(也可以理解为没有返回值) >>> x

css清除浮动clear:left-right-both示例效果

示例很简单,图片有简单.容易理解的说明文字了: 理解: clear有四个值: none:允许左右两边有浮动对象: both:不允许左右两边有浮动对象: left:不允许左边有浮动对象: right:不允许右边有浮动对象. 附上demo示例代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&

关于css清除元素浮动的方法总结(overflow clear floatfix)

作者:文刀日月: 来源:http://www.cnblogs.com/dtdxrk/p/3555438.html 关于css清除元素浮动的方法总结(overflow clear floatfix) 在前两天的一个面试中考官问我web中清除浮动的一些css常用方法,我很轻松的答出了: 1.overflow:hidden 2.clear:both 3.floatfix类 然后问题就来了,考官接着问'为什么overflow:hidden'可以清除浮动?这下就把我问住了.写了这么多年css只是单纯的解决

谈谈clear和overflow

今天来谈谈clear和overflow,大家都知道他们的中文意思,一个是清除,一个是溢出. 先来说说clear,clear的属性值一般都是用clear:both.当然也有clear:left和clear:right,不过还是用both的好,一般不会出现什么问题,那么什么时候会用到clear:both呢,经常会在做页面的时候会发现不该浮动的元素浮动了,有的时候很无语,这个时候一般这个元素上面的元素可能设置了float浮动属性,所以后面的元素也会跟着浮动,这就很苦逼了,以为只有人会跟风,没想到网页的

matlab:clear,close,clc

clear 删除工作空间中的项目,释放系统内存 语法: clear clear name clear name1 name2 name3... clear global name clear -regexp expr1 expr2... clear global -regexp expr1 expr2... clear keyword clear('name1','name2','name3',...) 描述: clear 删除工作空间内所有的变量,释放系统内存 clear name 仅仅删除工

date、cal和clear命令

一.date命令 date命令的功能:date命令是显示或设置系统时间与日期. 很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作.延时通常用于脚本执行过程中提供一段等待的时间.日期可以以多种格式去打印,也可以使用命令设置固定的格式.在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数. 语法 : date(选项)(参数) 选项 : -d<字符串>:显示字符串所指的日期与时间.字符串前后必须加上双引号

CLEAR、REFRESH、FREE

声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 1.8.  CLEAR.REFRESH.FREE 内表:如果使用有表头行的内表,CLEAR 仅清除表格工作区域.要重置整个内表而不清除表格工作区域,使用REFRESH语句或 CLEAR 语句CLEAR <itab>[].:REFRESH加不加中括号都是只清内表,另外REFRESH是专为清内表的,不能清基本类型变量,但CLEAR可以 以上都不会释放掉内表所占用的空间,如果想初始化内