天天看點

CSS:替換元素(Replaced)、不可替換元素(Nonreplaced)、塊元素(Block-level)和行内/内聯元素(Inline)

元素是文檔結構的基礎,在CSS中,每個元素生成了一個包含了元素内容的框(box,也譯為“盒子”)。但是不同的元素顯示的方式會有所不同,例如<div>和<span>就不同,而<strong>和<p>也不一樣。在文檔類型定義(DTD)中對不同的元素規定了不同的類型,這也是DTD對文檔之是以重要的原因之一。

1. 替換和不可替換元素

從元素本身的特點來講,可以分為替換和不可替換元素。

a) 替換元素

替換元素就是浏覽器根據元素的标簽和屬性,來決定元素的具體顯示内容。

例如浏覽器會根據<img>标簽的src屬性的值來讀取圖檔資訊并顯示出來,而如果檢視(X)HTML代碼,則看不到圖檔的實際内容;又例如根據<input>标簽的type屬性來決定是顯示輸入框,還是單選按鈕等。

(X)HTML中的<img>、<input>、<textarea>、<select>、<object>都是替換元素。這些元素往往沒有實際的内容,即是一個空元素,例如:

<img src=”cat.jpg”/>

<input type="submit" name="Submit" value="送出"/>

浏覽器會根據元素的标簽類型和屬性來顯示這些元素。可替換元素也在其顯示中生成了框。

b) 不可替換元素

(X)HTML的大多數元素是不可替換元素,即其内容直接表現給使用者端(例如浏覽器)。例如:

<p>段落的内容</p>

段落<p>是一個不可替換元素,文字“段落的内容”全被顯示。

2. 顯示元素

除了可替換元素和不可替換元素的分類方式外,CSS2.1中元素還有另外的分類方式:塊級元素(block-level)和行内元素(inline-level,也譯作“内聯”元素)。

a) 塊級元素

在視覺上被格式化為塊的元素,最明顯的特征就是它預設在橫向充滿其父元素的内容區域,而且在其左右兩邊沒有其他元素,即塊級元素預設是獨占一行的。

典型的塊級元素有:<div>、<p>、<h1>到<h6>,等等。

通過CSS設定了浮動(float屬性,可向左浮動或向右浮動)以及設定顯示(display)屬性為“block”或“list-item”的元素都是塊級元素。

但是浮動元素比較特殊,由于浮動,其旁邊可能會有其他元素的存在。而“list-item”(清單項<li>),會在其前面生成圓點符号,或者數字序号。

b) 行内元素

行内元素不形成新内容塊,即在其左右可以有其他元素,例如<a>、<span>、<strong>等,都是典型的行内級元素。

display屬性等于“inline”的元素都是行内元素。幾乎所有的可替換元素都是行内元素,例如<img>、<input>等等。

不過元素的類型也不是固定的,通過設定CSS的display屬性,可以使行内元素變為塊級元素,也可以讓塊級元素變為行内元素。

block元素的特點:ww.52css.com]

總是在新行上開始;

高度,行高以及頂和底邊距都可控制;

寬度預設是它的容器的100%,除非設定一個寬度。

inline元素的特點: 2css.com] 和其他元素都在一行上;

高,行高及頂和底邊距不可改變;

寬度就是它的文字或圖檔的寬度,不可改變。

我們來詳細了解它們的情況。

塊元素(blockelement)一般是其他元素的容器元素,塊元素一般都從新行開始,它可以容納内聯元素和其他塊元素,常見塊元素是段落标簽'P"。“form"這個塊元素比較特殊,它隻能用來容納其他塊元素。

如果沒有css的作用,塊元素會順序以每次另起一行的方式一直往下排。而有了css以後,我們可以改變這種html的預設布局模式, 把塊元素擺放到你想要的位置上去 。而不是每次都愚蠢的另起一行。需要指出的是,table标簽也是塊元素的一種,tablebased layout和 css basedlayout從一般使用者(不包括視力障礙者、盲人等)的角度來看這兩種布局,除了頁面載入速度的差别外,沒有其他的差别。但是如果普通使用者不經意點了檢視頁面源代碼按鈕後,兩者所表現出來的差異就非常大了。基于良好重構理念設計的css布局頁面源碼,至少也能讓沒有web開發經驗的普通使用者把内容快速的讀懂。從這個角度來說,css layout code應該有更好的美學體驗。

你能夠把塊容器元素div想象成一個個box,或者如果你玩過剪貼文載的話,那就更加容易了解了。我們先把需要的文章從各種報紙、雜志總剪下來。每塊剪下來的内容就是一個block。然後我們把這些紙塊按照自己的排版意圖,用膠水重新貼到一張空白的新紙上。這樣就形成了你自己獨特的文摘快報了。作為一種技術的延伸,網頁布局設計也遵循了同樣的模式。

内聯元素(inlineelement)一般都是基于語義級(semantic)的基本元素。内聯元素隻能容納文本或者其他内聯元素,常見内聯元素“a”。

需要說明的是:inlineelement的中文叫法,有多種内聯元素、内嵌元素、行内元素、直進式元素。基本上沒有統一的翻譯,愛怎麼叫怎麼叫吧。另外提到内聯元素,我們會想到有個display的屬性是display:inline;這個屬性能夠修複著名的IE雙倍浮動邊界問題。

用display: inline 或display:block指令 就可以改變一個元素的這一特性。什麼時候需要改變這一屬性呢?

讓一個inline元素從新行開始;

讓塊元素和其他元素保持在一行上;

控制inline元素的寬度(對導覽列特别有用);

控制inline元素的高度;

無須設定寬度即可為一個塊元素設定與文字同寬的背景色。

塊元素(block element)和内聯元素(inline element)都是html規範中的概念。 塊元素和内聯元素的基本差異是塊元素一般都從新行開始。 而當加入了 css 控制以後,塊元素和内聯元素的這種屬性差異就不成為差異了。比如,我們完全可以把内聯元素cite加上 display:block 這樣的屬性,讓他也有每次都從新行開始的屬性。

display:inline-block将對象呈遞為内聯對象,但是對象的内容作為塊對象呈遞。旁邊的内聯對象會被呈遞在同一行内,允許空格。

inline-block的元素特點:

将對象呈遞為内聯對象,但是對象的内容作為塊對象呈遞。旁邊的内聯對象會被呈遞在同一行内,允許空格。(準确地說,應用此特性的元素呈現為内聯對象,周圍元素保持在同一行,但可以設定寬度和高度地塊元素的屬性)

并不是所有浏覽器都支援此屬性,目前支援的浏覽器有:Opera、Safari在IE中對内聯元素使用display:inline-block,IE是不識别的,但使用display:inline-block在IE下會觸發layout,進而使内聯元素擁有了display:inline-block屬性的表症。從上面的這個分析,也不難了解為什麼IE下,對塊元素設定display:inline-block屬性無法實作inline-block的效果。這時塊元素僅僅是被display:inline-block觸發了layout,而它本就是行布局,是以觸發後,塊元素依然還是行布局,而不會如Opera中塊元素呈遞為内聯對象。

IE下塊元素如何實作display:inline-block的效果?

有兩種方法:

1、先使用display:inline-block屬性觸發塊元素,然後再定義display:inline,讓塊元素呈遞為内聯對象(兩個display要先後放在兩個CSS聲明中才有效果,這是IE的一個經典bug,如果先定義了display:inline-block,然後再将display設回inline或block,layout不會消失)。代碼如下(...為省略的其他屬性内容):

div{display:inline-block;...}

div {display:inline;}

2、直接讓塊元素設定為内聯對象呈遞(設定屬性display:inline),然後觸發塊元素的layout(如:zoom:1等)。代碼如下:

div{display:inline; zoom:1;...}

可變元素是基于以上兩者随環境而變化的,它的基本概念就是他需要根據上下文關系确定該元素是塊元素或者内聯元素。可變元素還是屬于上述兩種元素類别,一旦上下文關系确定了他的類别,他就要遵循塊元素或者内聯元素的規則限制。

html标簽的block、inline分類明細:

塊元素(block element) .52css.com] ◎ address - 位址

◎ blockquote - 塊引用

◎ center - 舉中對齊塊

◎ dir - 目錄清單

◎ div - 常用塊級容易,也是css layout的主要标簽

◎ dl - 定義清單

◎ fieldset - form控制組

◎ form - 互動表單

◎ h1 - 大标題

◎ h2 - 副标題

◎ h3 - 3級标題

◎ h4 - 4級标題

◎ h5 - 5級标題

◎ h6 - 6級标題

◎ hr - 水準分隔線

◎ isindex - input prompt

◎ menu - 菜單清單

◎ noframes - frames可選内容,(對于不支援frame的浏覽器顯示此區塊内容

◎ noscript - 可選腳本内容(對于不支援script的浏覽器顯示此内容)

◎ ol - 排序表單

◎ p - 段落

◎ pre - 格式化文本

◎ table - 表格

◎ ul - 非排序清單

内聯元素(inline element) 52css.com] ◎ a - 錨點◎ abbr - 縮寫

◎ acronym - 首字

◎ b - 粗體(不推薦)

◎ bdo - bidi override

◎ big - 大字型

◎ br - 換行

◎ cite - 引用

◎ code - 計算機代碼(在引用源碼的時候需要)

◎ dfn - 定義字段

◎ em - 強調

◎ font - 字型設定(不推薦)

◎ i - 斜體

◎ img - 圖檔

◎ input - 輸入框

◎ kbd - 定義鍵盤文本

◎ label - 表格标簽

◎ q - 短引用

◎ s - 中劃線(不推薦)

◎ samp - 定義範例計算機代碼

◎ select - 項目選擇

◎ small - 小字型文本

◎ span - 常用内聯容器,定義文本内區塊

◎ strike - 中劃線

◎ strong - 粗體強調

◎ sub - 下标

◎ sup - 上标

◎ textarea - 多行文本輸入框

◎ tt - 電傳文本

◎ u - 下劃線

◎ var - 定義變量

可變元素 52css.com] 可變元素為根據上下文語境決定該元素為塊元素或者内聯元素。

◎ applet - java applet

◎ button - 按鈕

◎ del - 删除文本

◎ iframe - inline frame

◎ ins - 插入的文本

◎ map - 圖檔區塊(map)

◎ object - object對象

◎ script - 用戶端腳本