|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
可以增加更多的用户而不需要建立独立的版本。可以一次设计,随处发布。
网页制造poluoluo文章简介:要想更好的了解CSS,特别是IE下对css的衬着,haslayout是一个十分有需要完全弄扫除的观点。年夜多IE下的显现毛病,就是源于haslayout。
要想更好的了解css,特别是IE下对css的衬着,haslayout是一个十分有需要完全弄扫除的观点。年夜多IE下的显现毛病,就是源于haslayout。
甚么是haslayout?
haslayout是WindowsInternetExplorer衬着引擎的一个外部构成部分。在InternetExplorer中,一个元素要末本人对本身的内容举行盘算巨细和构造,要末依附于父元从来盘算尺寸和构造内容。为了调治这两个分歧的观点,衬着引擎接纳了hasLayout的属性,属性值能够为true或false。当一个元素的hasLayout属性值为true时,我们说这个元素有一个结构(layout)
当一个元素有一个结构时,它卖力对本人和大概的子孙元素举行尺寸盘算和定位。复杂来讲,这意味着这个元素必要花更多的价值来保护本身和内里的内容,而不是依附于先人元从来完成这些事情。因而,一些元素默许会有一个结构。当我们说一个元素“具有layout”或“失掉layout”,大概说一个元素“haslayout”的时分,我们的意义是指它的微软专有属性hasLayout被设为了true。一个“layout元素”能够是一个默许就具有layout的元素大概是一个经由过程设置某些CSS属性失掉layout的元素。假如某个HTML元素具有haslayout属性,那末这个元素的haslayout的值必定只要true,haslayout为只读属性一旦被触发,就不成逆转。经由过程IEDeveloperToolbar能够检察IE下HTML元素是不是具有haslayout,在IEDeveloperToolbar下,具有haslayout的元素,一般显现为“haslayout=-1”。
卖力构造本身内容的元素将默许有一个结构,次要包含以下元素(不完整列表):
*bodyandhtml
*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外恣意值)
InternetExplorer7另有一些分外的属性(不完整列表):
*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及更早版原本说,经常使用的办法被称为霍莉破解(Hollyhack),即设定这个元素的高度为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%;
</p>
你用什么用的熟练就用什么,讲究的是效率,客户永远不管你用什么,页面就要好看,功能就要好用,还有时间和成本的问题。 |
|