前几天发现了一段css

.clear:after {
     content: ".";
     display: block;
     height: 0;
     clear: both;
     visibility: hidden;
}

.clear{
    zoom:1;
}

大概了解到这是用来清楚浮动的,但是对于after,content,这些都不明白,自己也没百度到具体的(跟我百度的关键词有极大关系)。今天茜茜,发来一个连接讲的就是这段代码的意思。(在这里谢谢茜茜童鞋!)

其原理是,在「高级」浏览器中使用 :after 伪类在浮动块后面加上一个非 display:none 的不可见块状内容来,并给它设置 clear:both 来清理浮动。在 ie6 和 7 中给浮动块添加 haslayout 来让浮动块撑高并正常影响文档流。

===========================================================================================================

什么是haslayout?

想更好的理解 css, 尤其是 IE 下对 css 的渲染,haslayout 是一个非常有必要彻底弄清除的概念。大多IE下的显示错误,就是源于 haslayout。

什么是 haslayout ?

haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分。在Internet Explorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了 hasLayout 的属性,属性值可以为true或false。当一个元素的 hasLayout 属性值为true时,我们说这个元素有一个布局(layout)

当一个元素有一个布局时,它负责对自己和可能的子孙元素进行尺寸计算和定位。简单来说,这意味着这个元素需要花的代价来维护自身和里面的内容,而不是依赖于祖先元素来完成这些工作。因此,一些元素默认会有一个布局。当我们说一个元素拥有layout或得到layout,或者说一个元素has layout 的时候,我们的意思是指它的微软专有属性 hasLayout 被设为了 true 。一个layout元素可以是一个默认就拥有 layout 的元素或者是一个通过设置某些 CSS 属性得到 layout 的元素。如果某个HTML元素拥有 haslayout 属性,那么这个元素的 haslayout 的值一定只有 true,haslayout 为只读属性 一旦被触发,就不可逆转。通过 IE Developer Toolbar 可以查看 IE 下 HTML 元素是否拥有haslayout,在 IE Developer Toolbar 下,拥有 haslayout 的元素,通常显示为haslayout = -1。

负责组织自身内容的元素将默认有一个布局,主要包括以下元素(不完全列表):

* body and html

* table, tr, th, td

* img

* hr

* input, button, file, select, textarea, fieldset

* marquee

* frameset, frame, iframe

* objects, applets, embed

对于并非所有的元素都默认有布局,微软给出的主要原因是性能和简洁。如果所有的元素都默认有布局,会对性能和内存使用上产生有害的影响。

如何激发 haslayout?

大部分的 IE 显示错误,都可以通过激发元素的 haslayout 属性来修正。可以通过设置 css 尺寸属性(width/height)等来激发元素的 haslayout,使其拥有布局。如下所示,通过设置以下 css 属性即可。

* display: inline-block

* height: (任何值除了auto)

* float: (left 或 right)

* position: absolute

* width: (任何值除了auto)

* writing-mode: tb-rl

* zoom: (除 normal 外任意值)

Internet Explorer 7 还有一些额外的属性(不完全列表):

* min-height: (任意值)

* max-height: (除 none 外任意值)

* min-width: (任意值)

* max-width: (除 none 外任意值)

* overflow: (除 visible 外任意值)

* overflow-x: (除 visible 外任意值)

* overflow-y: (除 visible 外任意值)

* position: fixed

其中 overflow-x 和 overflow-y 是 css3 盒模型中的属性,目前还未被浏览器广泛支持。

对于内联元素(默认即为内联的元素,如 span,或 display:inline; 的元素),

width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout 。而对于 IE6,如果浏览器运行于标准兼容模式下,内联元素会忽略 width 或 height 属性,所以设置 width 或 height 不能在此种情况下令该元素具有 layout。

zoom 总是可以触发 hasLayout,但是在 IE5.0 中不支持。

具有layout 的元素如果同时 display: inline ,那么它的行为就和标准中所说的 inline-block 很类似了:在段落中和普通文字一样在水平方向和连续排列,受 vertical-align 影响,并且大小可以根据内容自适应调整。这也可以解释为什么单单在 IE/Win 中内联元素可以包含块级元素而少出问题,因为在别的浏览器中 display: inline 就是内联,不像 IE/Win 一旦内联元素拥有 layout 还会变成 inline-block。

haslayout 问题的调试与解决

当网页在 IE 中有异常表现时,可以尝试激发 haslayout 来看看是不是问题所在。常用的方法是给某元素 css 设定 zoom:1 。使用 zoom:1 是因为大多数情况下,它能在不影响现有环境的条件下激发元素的 haslayout。而一旦问题消失,那基本上就可以判断是 haslayout 的原因。然后就可以通过设定相应的 css 属性来对这个问题进行修正了。建议首先要考虑的是设定元素的 width/height 属性,其次再考虑其他属性。

对 IE6 及更早版本来说,常用的方法被称为霍莉破解(Holly hack),即设定这个元素的高度为 1% (height:1%;)。需要注意的是,当这个元素的 overflow 属性被设置为 visible 时,这个方法就失效了。或者使用 IE 的条件注释。

对 IE7 来说,最好的方法时设置元素的最小高度为 0 (min-height:0;)。

haslayout 问题引起的常见 bug

IE6 及更低版本的双空白边浮动 bug

bug 修复: display:inline;

IE5-6/win 的 3 像素偏移 bug

bug 修复: _height:1%;

E6 的躲躲猫(peek-a-boo) bug

bug 修复: _height:1%;

========================================================================================================================

css中“zoom:1”是什么意思

(1)继承性: 无 兼容性: IE 基本语法zoom : normal | number 语法取值normal : 默认值。使用对象的实际尺寸 number : 百分数 | 无符号浮点实数。浮点实数值为1.0或百分数为100%时相当于此属性的 normal 值 使用说明设置或检索对象的缩放比例。设置或更改一个已被呈递的对象的此属性值将导致环绕对象的内容重新流动。虽然此属性不可继承,但是它会影响对象的所有子对象( children )。这种影响很像 background 和 filter 属性导致的变化。此属性对于 currentStyle 对象而言是只读的。对于其他对象而言是可读写的。

用css中的zoom属性可以让网页实现IE7中的放大缩小功能。

zoom:1就是和原来一样大小

**************************************************************

(2)IE私有属性,一般用来触发HasLayout。

也可用来清除浮动。
当IE6的border出现断节现象时,也可以试试zoom:1;

IE私有属性,一般用来触发HasLayout。

********************************************************

(3)也可用来清除浮动。
当IE6的border出现断节现象时,也可以试试zoom:1;

************************************************************

(4)CSS中zoom:1的作用 ,小标签大作用

CSS中zoom:1的作用

兼容IE6、IE7、IE8浏览器,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:

触发IE浏览器的haslayout
解决ie下的浮动,margin重叠等一些问题。

比如,本站使用DIV做一行两列显示,HTML代码:

<div class="h_mainbox">
<h2>推荐文章</h2>
<ul class="mainlist">
<li><a href="/html/2009-12-18/21-1907360304171.html" style="color:#0000FF" target="_blank">原创:ASP.NET使用log4Net日志组件教程(每天产生一个日志及日志按大小切割)</a&gt;</li>
<li><a href="/html/2009-11-12/21-932220455859.html" style="color:#0000FF" target="_blank">原创:.NET版分布式缓存Memcached测试实例(Memcached缓存读取添加与清空等)</a></li>
</ul>
</div>

CSS代码:

.h_mainbox { border:1px solid #dadada; padding:4px 15px; background:url(../mainbox_bg.gif) 0 1px repeat-x; margin-bottom:6px; overflow:hidden}
.h_mainbox h2 { font-size:12px; height:30px; line-height:30px; border-bottom:1px solid #ccc; color:#555;}
.h_mainbox h2 span { float:right; font-weight:normal;}
.h_mainbox ul { padding:6px 0px; background:#fff;}
.mainlist { overflow:auto; zoom:1;}
.h_mainbox li { width:268px; float:left; height:24px; overflow:hidden; background:url(../icon3.gif) 0 6px no-repeat; padding:0px 5px 0px 18px; line-height:200%;}

加红色的那里就可以在IE6、IE7、IE8正常显示效果了。

css中的zoom的作用

1、检查页面的标签是否闭合

不要小看这条,也许折腾了你两天都没有解决的 CSS BUG 问题,却仅仅源于这里。毕竟页面的模板一般都是由开发来嵌套的,而他们很容易犯此类问题。

快捷提示:可以用 Dreamweaver 打开文件检查,一般没有闭合的标签,会黄色背景高亮。

2、样式排除法

有些复杂的页面也许加载了 N 个外链 CSS 文件,那么逐个删除 CSS 文件,找到 BUG 触发的具体 CSS 文件,缩小锁定的范围。

对于刚才锁定的问题 CSS 样式文件,逐行删除具体的样式定义,定位到具体的触发样式定义,甚至是具体的触发样式属性。

3、模块确认法

有时候我们也可以从页面的 HTML 元素出发。删除页面中不同的 HTML 模块,寻找到触发问题的 HTML 模块。

4、检查是否清除浮动

其实有不少的 CSS BUG 问题是因为没有清除浮动造成的。养成良好的清除浮动的习惯是必要的,推荐使用 无额外 HTML 标签的清除浮动的方法(尽量避免使用 overflow:hidden;zoom:1 的类似方法来清除浮动,会有太多的限制性)。

5、检查 IE 下是否触发 haslayout

很多的 IE 下复杂 CSS BUG 都与 IE 特有的 haslayout 息息相关。熟悉和理解 haslayout 对于处理复杂的 CSS BUG 会事半功倍。推荐阅读 old9 翻译的 《On having layout》(如果无法翻越穿越伟大的 GFW,可阅读 蓝色上的转帖 )

快捷提示:如果触发了 haslayout,IE 的调试工具 IE Developer Toolbar 中的属性中将会显示 haslayout 值为 -1。

6、边框背景调试法

  故名思议就是给元素设置显眼的边框或者背景(一般黑色或红色),进行调试。此方法是最常用的调试 CSS BUG 的方法之一,对于复杂 BUG 依旧适用。经济实惠还环保^^

===========================================================================================================================

希望大家看了之后,可以有点明白

更简洁的 CSS 清理浮动方式(使用 :after 伪类来提供浮动块后的 clear:both)相关推荐

  1. div css入门教程,更简洁CSS清理浮动方式:clearfix

    - 清理浮动有很多种方式,像使用 br 标签自带的 clear 属,使用元素的 overflow,使用空标签来设置 clear:both 等等.但考虑到兼容问题和语义化的问题,一般我们都会使用如下代码 ...

  2. 前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器...

    前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器 一丶CSS简介 叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTM ...

  3. css层叠引入方式有,前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器...

    前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器 一丶CSS简介 叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTM ...

  4. [css] 你知道什么是动态伪类吗?

    [css] 你知道什么是动态伪类吗? 锚点伪类(a标签) 1.:link 未操作的链接 2.:visited 该链接已被访问,一旦:visited,:link/:active不再起作用.用户行为伪类 ...

  5. CSS 清理浮动 clear属性

    虽然浮动可以便于页面布局,但同时会产生一些问题,也就是常说的副作用.浮动元素最常见的缺陷是:父元素的高度塌陷和影响兄弟元素的位置. 首先,看看父元素的高度塌陷.假设有一个容器,其中两个子元素,一个子元 ...

  6. 谈谈一些有趣的CSS题目(十)-- 结构性伪类选择器

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  7. HTML/CSS: 浅谈a标签及伪类选择器

    1.基础知识 "超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分." -HTML链接 而对于超文本,简单的说便是 ...

  8. CSS基础知识(颜色、伪类、盒子模型)

    6.设置颜色单位 L    普通英文单词 {color : 属性值red;} 此方法简单,便捷.但设置的颜色在不同浏览器中,可能显示的颜色出现差异 * 三原色 - 红.绿.蓝 L   颜色的八进制方式 ...

  9. HTML与CSS基础之子元素的伪类(七)

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>子元素 ...

最新文章

  1. 让AI训练AI,阿里和浙大的“AI训练师助手”是这样炼成的
  2. 棉花糖实验+延迟满足+还是背后的家庭
  3. linux块设备的IO调度算法和回写机制
  4. C#面向对象(四)虚方法实现多态
  5. mysql更新一个表里的字段等于另一个表某字段的值
  6. linux下安装mysql57_Linux——CentOS7之mysql5.7安装与配置
  7. Elasticsearch之核心元数据:_index,_type,_id [学习笔记]
  8. java两个和三个_Java语言基础(day_03)
  9. Kali-linux使用Nessus
  10. ffmpeg打开音频设备
  11. gitlab服务器代码存储位置,gitlab 数据目录迁移
  12. Mysql - 巧用join来优化sql
  13. 2.4g低功耗SI24R1校园答题器
  14. Jenkins 自动构建之日程表配置
  15. 生鲜配送APP软件开发快速制作
  16. asp.net 后台生成二维码及生成带logo的二维码
  17. 如何找课题的综述文献
  18. And and Pair
  19. 关于支付(支付宝和微信)
  20. amr转wav java,Android系统wav和amr的互转

热门文章

  1. 在windows上开发linux程序
  2. bert单机多GPU训练
  3. FineReport(帆软)根据条件显示和隐藏列数据
  4. 福利:生化危机6终章(1.2G)超清分享
  5. Spring 核心loC
  6. 2-6 ance desc选择器
  7. python实现lfm_【知识发现】隐语义模型(LFM,Latent Factor Model)推荐算法python实现
  8. 公平锁和非公平锁的区别
  9. iqoo8如何添加桌面原子组件
  10. aspx文件编译成DLL文件的原理