网站首页 网站建设 公司动态 行业新闻 案例展示 关于我们

文章内容

【转载】haslayout综合

日期:2013-11-29  来源:攀枝花惠康网络公司

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

原文地址:http://www.qianduan.net/comprehensive-haslayout.html

要想更好的理解 css, 尤其是 IE 下对 css 的衬着,haslayout 是一个很是有需要彻底弄断根的概念。年夜多 IE
下的显示错误,就是阅暌冠 haslayout。

什么是 haslayout ?

当一个元素有一个结构时,它负责对自己和可能的子孙元素进行尺寸计较和定位。简单来说,这意味着这个元素需要花更多的价钱来维护自身和琅缦沔的内容,而不是依靠于祖先元素来完成这些工作。是以,一些元素默认会有一个结构。当我们说一个元素“拥有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”。

bug 修复: _height:1%;

负责组织自身内容的元素将默认有一个结构,首要搜罗以下元素(不完全列表):

糖伴西红柿说,这篇文章不是原创,是网上资本的汇总,加上自己理解的综合。可能还不是很周全,还需要再进一步细化。

* body and html
* table, tr, th, td
* objects, applets, embed


* img
* input, button, file, select, textarea, fieldset
* marquee
* frameset, frame, iframe

年夜部门的 IE 显示错误,都可以经由过程激发元素的 haslayout 属性来批改。可以经由过程设置 css 尺寸属性(width/height)等来激发元素的 haslayout,使其“拥有结构”。如下所示,经由过程设置以下 css 属性即可。

* display: inline-block
* height: (任何值除了auto)
* position: absolute

对于并非所有的元素都默认有结构,微软给出的首要原因是“机能和精练”。如不美观所有的元素都默认有结构,会对机能和内存使用上发生有害的影响。

若何激发 haslayout?


* float: (left 或 right)
* hr
* width: (任何值除了auto)
* writing-mode: tb-rl
* zoom: (除 normal 外肆意值)

* 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 问题的调试与解决

haslayout 是Windows Internet Explorer衬着引擎的一个内部组成部门。在Internet Explorer中,一个元素要么自己对自身的内容进行计较巨细和组织,要么依靠于父元素来计较尺寸和组织内容。为了调节这两个分歧的概念,衬着引擎采用了 hasLayout 的属性,属性值可觉得true或false。当一个元素的 hasLayout 属性值为true时,我们嗣魅这个元素有一个结构(layout)

当网页在 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

文章来源:攀枝花惠康网络公司

惠康网络,是一家专业从事攀枝花网站建设,攀枝花网站制作,攀枝花网站设计公司,提供网站建设一条龙服务(网站域名注册+网站服务器租用+网站开发+网站维护+网站营销推广),惠康网络立足攀枝花,辐射全中国,攀枝花惠康网络的客户已经遍布国内各地大中小城市,我们高效优质的网站建设服务深受用户好评。

客服热线:tel(谢先生)  客服QQ:1323605005  
服务邮箱:yewubu@huikon.com(售前咨询)  jishubu@huikon.com(技术部)  shouhou@huikon.com(售后服务)
公司地址:四川省攀枝花市
邮编:617200