haslayout是Windows Internet Explorer渲染引擎的一個(gè)內部組成部分。在IE中,一個(gè)元素要么自己對自身的內容進(jìn)行計算大小和組織,要么依賴(lài)于父元素來(lái)計算尺寸和組織內容。為了調節這兩個(gè)不同的概念,渲染引擎采用了hasLayout的屬性,屬性值可以為true或false。
在html元素中,負責組織自身內容的元素將默認有一個(gè)布局,主要包含以下元素: body, html, table, tr, th, td, img, hr, input, button, file, select, textarea, fieldset, marquee, frameset, frame, iframe, objects, applets, embed。而div, ul, li, h1~h6之流,在默認情況下,是沒(méi)能獲得layout的,按照微軟給出的解釋?zhuān)@是出于對“性能和簡(jiǎn)潔”和間接的考慮,如果所有元素都默認有布局,會(huì )對性能和內存使用上產(chǎn)生有害的影響。
乍一看這段話(huà),似乎不知所云,但是如果說(shuō)在IE中稀奇古怪的bug和這個(gè)所謂的haslayout有關(guān),或許可以吸引你的些許注意力,相信每個(gè)有過(guò)前端開(kāi)發(fā)經(jīng)歷的人,都會(huì )對IE系列瀏覽器中形形色色的諸多bug搞的焦頭爛額。針對這些bug,我們知道一種或者幾種不同的解決辦法(方法當然是有巧拙之分的),但是對于問(wèn)題的根源,我們卻經(jīng)常不去深究,也不知道如何去更深一層的認識它!
當網(wǎng)頁(yè)在IE中有異常表現時(shí),可以嘗試激發(fā)haslayout來(lái)看看是不是問(wèn)題所在,最常用的方法是給某元素css設定zoom:1或者width/height屬性,其次再考慮其他屬性,因為使用這兩種方法能在不改變現有環(huán)境的條件下激發(fā)元素的haslayout。
事實(shí)上大部分的IE顯示錯誤,都可以通過(guò)激發(fā)元素的haslayout屬性來(lái)修正,能激發(fā)元素haslayout的屬性值除zoom和width/height之外還包括:
display: inline-block
float: (left 或 right)
position: absolute
writing-mode: tb-rl
另外本文中提到的IE,只包括IE6和IE7,至于新版本的IE8,不在范圍之內,貌似IE8已經(jīng)解決了haslayout帶來(lái)的諸多麻煩,具體情況不詳!
聯(lián)系客服