block與inline的區別

block與inline的區別  


 block-level elements (塊級元素) 和 inline elements (內聯元素):


所有允許被 BODY 元素包含的元素,要麼是塊級的;要麼是內聯的;要麼既可以算作塊級的,也可以算作內聯的。但是絕對不存在一個能被BODY包含,但即非塊級,又非內聯的元素。


常見的塊級元素有 DIV, FORM, TABLE, P, PRE, H1~H6, DL, OL, UL 等等。


常見的內聯元素有 SPAN, A, STRONG, EM, LABEL, INPUT, SELECT, TEXTAREA, IMG, BR 等等。


另外,SCRIPT, OBJECT, MAP, BUTTON, DEL, INS 這些元素,既可以作爲塊級元素,也可以作爲內聯元素。


一般來說塊級元素可以包含塊級元素和內聯元素;但內聯元素只能包含內聯元素。要注意的是,每個特定的元素,能包含的元素也是特定的,所以具體到個別元素上,這條規律是不適用的。


比如 P 元素,只能包含內聯元素,而不能包含塊級元素。




   1: <!-- 這樣做是錯誤的 -->
   2: <p><div>一段文字</div></p>
   3:<!-- 這樣纔是王道 b=v= -->
   4: <p><span>一段文字</span></p>


另一個區別是在顯示上。塊級元素通常被現實爲獨立的一塊,前後都會和換一行;內聯元素則前後不會產生換行,一系列內聯元素都在一行內顯示。但是,最終決定頁面顯示的是樣式表,而非元素本身。這條規則的制定,估計多半是爲了讓那些先於規範出現的瀏覽器能自圓其說而已,比如我們知道,TABLE 元素的默認顯示佈局其實是用一套獨特的 display: table 規則;而 BR 元素,根本本身就是個換行;哪怕一個DIV,都能用樣式表直接指定它 display: inline,所以這條規則也根本等於沒用。


其實最本質的區別在於——在 Strict 的DTD下,BODY 元素只能包含塊級元素,而不能包含內聯元素。或許你要問,不是說BODY包含的元素不是塊級就是內聯麼?怎麼沒有內聯了?很簡單——因爲在Transitional 的DTD裏,BODY也是可以包含內聯元素的。例如:




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Block-Level vs Inline Demo</title>
</head> 
<body>
 <!-- 這樣做是錯的 -->
<img src="/SomeImage.png" title="an image" alt="an image" />
<!-- 一定要這樣做纔可以的 -->
<p><img src="/SomeImage.png" title="an image" alt="an image" /></p>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Block-Level vs Inline Demo</title>
</head>
<body> 
<!-- 換了個DTD就都OK了 -->
<img src="/SomeImage.png" title="an image" alt="an image" />
<p><img src="/SomeImage.png" title="an image" alt="an image" /></p>
</body>
</html>


Block Box VS Inline Box
網頁上內容的佈局,都是靠controlling box來實現的。


在CSS2.1的規範裏,Controlling box 分三類——block box, inline box, 和至今都沒怎麼被廣泛支持的run-in box。這就是規範中第二處提到block 和inline 的地方。網頁上的內容,不論是不是有標籤包圍,或者設定了何種顯示方式,最終都會被計算成一個 controlling box,並應用佈局規則。


好在這個過程對於前端開發來說是透明的,大家可以不用去考慮,而只要考慮這兩種盒的區別就行了  
在普通佈局中,block box 是從上至下,一個隔一個的佈局的;inline box 則是從左至右(也可能因爲設置了direction而從右到左,或者從上到下)首尾相接,不間斷的佈局的。 
inline box 不響應垂直margin, width, height, max/min width/height 等屬性聲明;block box 則可以響應這些屬性。 


display: block VS display: inline
最後一個有提到block 和inline 的地方就是這裏了。和其他兩個地方不同,block 和inline 並不是display 這個屬性的唯一取值。CSS2.1規範中,display 屬性的取值可以爲以下的任何一個:inline, block, list-item, run-in, inline-block, table, inline-table, table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, table-caption, none, inherit。


在通常情況下,display: block 能讓元素生成一個block box, 而display: inline 會生成inline box。


本文轉載自:http://www.cnblogs.com/ruxpinsp1/archive/2008/07/03/quicky-block-vs-inline.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章