display:inline,display:inline-block,display:block 區別

以前一直迷惑於display:inline/inline-block/block的異同,在度娘谷哥的幫助下,忽然有了一點思路。css

按照網上的介紹,inline將對象轉化爲內聯元素,block將對象轉化爲塊元素,而inline-block則將對象轉化爲具備塊屬性的內聯元素。html

多是由於本人理解能力有限,一直很糾結着難以理解這個說法。後來看到這麼一個解釋[1]:瀏覽器

內聯元素即全部元素都在一行上,無先後換行符,且沒法限定高寬,即高寬爲其內容的高寬。例如<input>,<img>,<span>,<em>都是內聯元素的例子。ide

塊元素即總在新行上開始,可控制高寬。<div>,<p>,<form>,<h1>爲塊元素的例子。測試

從例子上說,對span進行背景色限定時,會發現span的背景色老是和文字大小相符,即說明了內聯元素的特性。而對div增長背景色限定,則可無視其內容,根據div的高寬進行渲染。ui

可是,若是須要對span進行背景色限定,但又要對span的大小作規定,那就用到了inline-block。idea

<html>
<head>
<style>
#content{width:auto;height:200px;}
.blockdiv{background:#ccc;width:50%;height:50px;}
.inlinespan{background:#f60;width:50%;height:50px;}
</style>
</head>
<body>
<div id="content">
<div class="blockdiv">這段文字用於測試div的大小</div><span class="inlinespan">這段文字用於測試span的大小
</span>spa

</div>
</body>
</html>.net

例如上面這個例子,假如想使div.blockdiv和span.inlinespan在一行,但又但願控制div.blockdiv的高度,便可使用div.blockdiv{display:inline-block;}code

inline-block即將對象對外轉換爲內聯元素,但對內其內容又可限定高寬,具備塊元素的特徵屬性。這樣一來,規定了inline-block的元素會和周圍inline的元素在一行,但它又能夠指定高寬。

仍舊是萬惡的IE,IE6/7對inline-block的支持不夠完善。所以須要採用hack的方式,但首先須要明瞭這種hack的原理:

    這是IE的一個經典bug,若是先定義了display:inline-block,而後再設置display回inline或block,layout不會消失。但須要在兩個css中[2]。

IE6/7可識別的hack爲*,IE6爲_。參考[3,4]後,認定在如今IE6/7下的inline-block可經過如下原理實現。在IE中的方式有如下幾種,例如object

一、#object{

  display:inline-block;//激活inline-block,使之在除IE8/7/6下的瀏覽器均實現,同時使IE下元素觸發block

  zoom:1;//激活IE下的對象haslayout屬性

}

  #object{

  *display:inline;//IE6/7下的對象在保持有haslayout屬性前提下,表現爲inline

}

二、#object{

   float:left;//觸發layout,表現爲塊元素

   display:inline;//使之產生inline效果

}

三、#object{

  display:inline; //先使對象呈內聯狀態

  zoom:1; //激活layout

}

所以,display:inline-block在IE中的hack可表現爲:

一、爲對象增長haslayout屬性,使之表現爲塊元素

二、將對象轉換爲inline.(haslayout不消失)

三、順序可顛倒。

參考:

1.http://www.cnblogs.com/jdonson/archive/2011/06/10/2077932.html

2.http://ideal.ncepu.me/2012/03/25/1-182/

3.http://www.68design.net/Web-Guide/HTMLCSS/41207-4.html

4.http://www.codesky.net/article/201107/169482.html

相關文章
相關標籤/搜索