淺析CSS中的haslayout

來源:互聯網
上載者:User

標籤:io   os   使用   sp   div   on   問題   bs   ef   

      作為一名web開發人員,最大的希望不是自己的水平有多高,而是希望瀏覽器廠家能夠統一標準,相信任何一個只要是接觸過web程式開發的人員都有那樣的感受,就是瀏覽器之間的相容性問題總是讓我們的工作平添諸多的麻煩,就拿一個簡單的ajax來說,IE和DOM之間的獲得ajax對象的方式就有很多的差別,還有就是有一些的效果在某些瀏覽器上面根本就得不到很好的支援,從而造成了混亂以及重複累贅的工作。下面我們要講述的haslayout就是IE的特殊產物。

      首先明確一個概念,haslayout 是Windows Internet Explorer渲染引擎的一個內部組成部分。在InternetExplorer中,一個元素要麼自己對自身的內容進行計算大小和組織,要麼依賴於父元素來計算尺寸和組織內容。為了調節這兩個不同的概念,渲染引擎採用了 hasLayout 的屬性,屬性值可以為true或false。當一個元素的 hasLayout屬性值為true時,我們說這個元素有一個布局(layout),但是現在哦haslayout在IE8以及後面更高的版本中取消了,其只針對IE8一下的版本有效。

     為什我們要提到haslayout呢?它究竟有什麼作用呢?我們知道只有當一個元素有了haslayout屬性之後,他才可以對自身以及對其子項目的尺寸和定位進行計算的能力,就是說如果它的其中一個子項目有自己的定位的話,這個子項目就將負責計算自己以及自己子項目的尺寸,但是這個子項目的定位將受到其父元素的影響。

    還有一些元素他們擁有自己特有的長和高,即使沒有定義他們的長和高,比如說button,inputs等等,這就說明他們與生俱來的haslayout屬性,既然有元素是與生俱來的,那肯定與之對應的就是我們的後天形成了,這裡就要提到通過我們後天設定一些特別的css樣式來觸發layout,當然這個就像我們的炸彈一樣,一旦觸發就不可能修改。這些元素包括div span等。

   這裡如果擁有了layout之後,這些元素就被限制在了一個獨立的盒子中了,這一點和我們的bfc很像,通過這樣,我們的元素就不會影響到外部的元素,而自身也不會受到外部元素的影響。這就是所謂的一旦有了layout就觸發了bfc,將自己鎖起來了。這樣也有一個弊端,就是被鎖起來之後,該元素就無法自適應了,也不會適應別的元素,於是乎就可能產生一些怪異現象,甚至影響整個的布局。

     下面將介紹一些重設haslayout的方法,

  * width , height ( 設為 auto )

  * max-width , max-height ( 設為 none ) [ IE7 ]

  * position ( 設為 static )

  * float ( 設為 none )

  * overflow ( 設為 visible )

  * zoom ( 設為 normal )

通過這些的話,可以重設我們的haslayout屬性。還有一些就是怎麼啟用這個屬性,下面將羅列一些常見的:

只需要將position: absolute設定絕對位置可能會引發新的問題。float: left|rightIE下的浮動也會產生一些莫名其妙的問題。display: inline-block當一個內嵌元素需要haslayout屬性時就需要用它,但是IE本身不支援inline-block的,只是表現得像標準裡說的inline-block。width: 除‘auto‘外的任意值優先考慮使用該屬性。height: 除‘auto‘外的任意值對 IE6 及更早版本來說很常用,該方法被稱為霍莉破解(Holly hack),即設定這個元素的高度為 1% (height:1%;)。但是要注意,當這個元素的 overflow 屬性被設定為 visible 時,這個方法就失效了。zoom: 除‘normal‘外的任意值又一個ie私人屬性,不相容標準。zoom:1可以在測試或者不追求標準的情況下使用,效果不錯。writing-mode: tb-rlie私人屬性,不推薦用。

 

淺析CSS中的haslayout

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.