么是彈性布局?
用戶的文字大小與彈性布局
用戶的瀏覽器默認渲染的文字大小是“16px”,換句話說,Web頁面中“body”的文字大小在用戶瀏覽器下默認渲染是“16px”。當然,如果用戶愿意他可以改變這種字體大小的設置,用戶可以通過UI控件來改變瀏覽器默認的字體大小。
彈性設計有一個關鍵地方Web頁面中所有元素都使用“em”單位值。“em”是一個相對的大小,我們可以這樣來設置1em,0.5em,1.5em等,而且“em”還可以指定到小數點后三位,比如“1.365em”。而其中“相對”的意思是:
1.相對的計算必然會一個參考物,那么這里相對所指的是相對于元素父元素的font-size。比如說:如果在一個<div>設置字體大小為“16px”,此時這個<div>的后代元素教程了是將繼承他的字體大小,除非重新在其后代元素中進行過顯示的設置。此時,如果你將其子元素的字體大小設置為“0.75em”,那么其字體大小計算出來后就相當于“0.75 X 16px = 12px”;
2.如果用戶通過瀏覽器的UI控件改變了文字的大小,那么我們整個頁面也會進行放大(或縮小),不至于用戶改變了瀏覽器的字體后會致使整個頁面崩潰(我想這種現像大家都有碰到過,不信你就試試你自己制作過的項目,你會覺得很恐怖)。
大家可以查看這個彈性布局樣例。此時你使用瀏覽器的UI控件改變了文字的大小或者直接“ctrl + ”和“ctrl - ”,你會發現這個彈性布局實例,在瀏覽器改變字體大小瀏覽會做出相應的放大和縮小,并不會影響整個頁面的布局。注:這個實例的所有HTML和CSS在本教程中教程了都會使用到。
至于其他的彈性布局的實例,大家可以瀏覽Dan Cederholm的Simplebites,并改變文字的大小去瀏覽。
體驗后,是不是覺得彈性布局的頁面很靈活呀,而且也像“px”一樣的精確。因此,只要我們掌握了“font-size”、“px”和“em”之間的基本關系,我們就可以民以食快速使用CSS創建精確的布局。
CSS的Elastigirl引進EM
Elastigirl的“em”是極其強大和靈活的,他不管字體大小是什么,是12px,16或60,他都可以計算出其值。
em其實就是一種排版的測試單位,而且他的由來還有一段小故事,關于這段小故事我就不和大家說了,因為大家都不是來聽我講故事的,我想大還是喜歡知道他在CSS中的那些事。
在CSS中,“em”實際上是一個垂直測量。一個em等于任何字體中的字母所需要的垂直空間,而和它所占據的水平空間沒有任何的關系,因此:
如果字體大小是16px,那么1em=16px。
入門
在我們開始來了解CSS中的這個“em”之前,我們需要知道在瀏覽器下,他的默認字體大小。正好我們前面也這樣做了,在所有現代瀏覽器中,其默認的字體大小就是“16px”。因此在瀏覽器下默認的設置將是:
1em = 16px
因此,在一個CSS選擇器被寫入時,瀏覽器就有了一個“16px”大小的默認字體。此時我們Web頁面中的<body>就繼承了這個“font-size:16px;”,除非你在CSS樣式中顯式的設置<body>的“font-size”值,來改變其繼承的值。這樣一來,“1em = 16px”、“0.5em = 8px”、“10em = 160px”等等,那么我們也可以使用“em”來指定任何元素的大小。
設置Body的font-size
很多前輩在多年的實踐中得出一個經驗,他們建議我們在<body>中設置一個正文文本所需的字體大小,或者設置為“10px”,相當于(“0.625em或62.5%”),這樣為了方便其子元素計算。這兩種都是可取的。但是我們都知道,<body>的默認字體是“16px”,同時我們也很清楚了,我們改變了他的默認值,要讓彈性布局不被打破,就需要重新進行計算,重新進行調整。所以完美的設置是:
body {font-size:1em;}
可是在那個沒人愛的IE底下,“em”會有一個問題存在。調整字體大小的時候,同樣會打破我們的彈性布局,不過還好,有一個方法可以解決:
html {font-size: 100%;}
公式轉換——PXtoEM
如果你是第一創建彈性布局的,最好在身邊準備一個計算器,因為我們一開始少不了很多的計算,有了他放心。
像素對于我們來說太密切了,因此我們也將從這開始。首先需要計算出1px和em之間的比例,然后是知道我們需要的px值。通過前面的介紹,大家都知道1em總是等于父元素的字體大小,因此我們完全可以通過下面的工式來計算:
1 ÷ 父元素的font-size × 需要轉換的像素值 = em值
大家可以參考一下面這張轉換表(body字體為16px時的值)
接下來我們一起看一個很簡單的實例“使用CSS的EM制作一個960px寬度的彈性布局”
HTML Markup
<body>
<div id="container">…</div>
</body>
將960px轉換為em
1 ÷ 16px × 960px = 60em
這個計算值的前提條件是<body>的“font-size:16px”。
CSS Code
html {
font-size: 100%;
}
body {
font-size: 1em;
}
#container {
width: 60em;
}
通過上面的實例,我想大家更能形像化的理解了,因為有例可詢,其實我們可以把上面的計算公式轉換一下,將更方便你的計算:
需要轉換的像素值 ÷ 父元素的font-size = em值
那么我們上面的實例“960px”就可以這樣來轉換成“em”值
960px ÷ 16px = 60em
上面我們一起見證了“px”轉換成“em”的計算方式,接下來我們一起來動看制作上面展示過的彈性布局樣例。下面我們主要一起來一步一步的實現他。
構建一個彈性的容器
要創建彈性布局樣例那樣的居中效果,我們首先需要創建一個HTML結構,我在此給創建一個<div>并且取名叫“wrap”
<body>
<div id="wrap"> content here</div>
</body>
我們希望這個容器是一個“740px”寬,適合一個“800px × 600px”顯屏的實例。那么“740px”會等于多少“em”呢?這就是我們需要關心的問題,大家一起來看吧:
1、將“740px”轉換成“em”設置到我們的容器“div#wrap”:我們都知道“div#wrap”的父元素<body>設置了字體為“16px”,那么此時在沒有進行另外顯示的設置時,他的子元素<div id="wrap">將繼承“font-size”值,這樣我們就可以輕意得到:“1px和1em之間的關系”
1em = 16px 也就是 1px = 1 ÷ 16 = 0.0625em
這樣一來,我們的“740px”就很容易的能轉換成“em” 0.0625em × 740 = 46.25em
當然大家也可以按照我們前面所列出的計算公式來進行轉換,這樣你心中更具有一個概念性,也不容易弄錯:
1 ÷ 16 × 740 = 46.25em (1 ÷ 父元素的font-size × 需要轉換的像素值 = em值)
這樣一來,您可以使用上面的公式計算出您需要的任何寬度或高度的“em”值,你只需要知道“1px等于多少em”,另外就是你要轉換的“px”值是多少,具備這幾個參數你就能得到你想要的“em”值了。
2、創建CSS樣式:現在我們可以給“div#wrap”寫樣式了,彈性布局樣例很明顯的告訴我們,給“div#wrap”設置了一個寬度為“740px”居中,帶有上下“margin”為“24px”,而且帶有“1px”的邊框效果,那么我們首先根據上面的公式計算出相應的“em值”,然后在寫到CSS樣式中:
html {font-size: 100%;}
body {font-size: 1em;}
#wrap {
width: 46.25em;/*740px ÷ 16 = 46.25em */
margin: 1.5em auto;/*24px ÷ 16 = 1.5em*/
border: 0.0625em solid #ccc;/*1px ÷ 16 = 0.0625em*/
}
現在我們就輕松的創建了一個包含內容的彈性容器:彈性布局樣例。
文本樣式與em
首先我們在前面那個創建的<div id="wrap"></div>中插入一個<h1>和一個<p>:
<div id="wrap">
<h1>...</h1>
<p>...</p>
</div>
在彈性布局樣例實例中,我們標題使用了“18px”,而段落設置的是“12px”字體,同時其行高是“18px”。18px將是我們實現彈性布局的一個重要值,可以使用他們都按正比變化。(有關于標題和段落的排版介紹,大家感興趣可以點擊Richard Rutter的basic leading和vertical rhythm以及chapter on vertical motion的相關介紹)。
根據CSS繼承一說,我們在“div#wrap”的內容容器中沒有顯式的設置字體大小,這樣整個“div#wrap”將繼承了其父元素“body”的字體——“16px”。
1、給段落設置樣式:——“12px”的字體,“18px”的行高以及margin值
從CSS繼承中,我們可以得知我們所有段落繼承了其父元素“div#wrap”的“font-size:16px”。同時我們通過前面的介紹得知1px = 1 ÷ 16 = 0.0625em,這樣一來我們就很輕松的知道“12px”等于多少個“em”
0.0625em × 12 = 0.750em
這樣我們就可以給段落p設置樣式:
p {font-size: 0.75em;/*0.0625em × 12 = 0.750em */}
要計算出段落所需的行高和“margin”為“18px”,來滿足Richard Rutter說的basic leading,那我們就需要像下面的方法和來計算:
18 ÷ 12 = 1.5em
使用所需的行高值“18px”直接除以“字體大小12px”,這樣就得到了段落“p”的“line-height”值。在本例中行高就等于字體的“1.5”倍,接著我們把“line-height”和“margin”樣式加到段落“p”中
p{
font-size: 0.75em;/*0.625em × 12 = 0.750em */
line-height: 1.5em;/*18px(line-height) ÷ 12(font-size) = 1.5em */
margin: 1.5em;/*18px(margin) ÷ 12(font-size) = 1.5em */
}
2、給標題設置一個18px的字號
標題“h1”和段落“p”一樣的原理,他也是繼承他父元素“div#wrap”的“16px”的“font-size”,所以我們也是按同樣的方法可以計處出他的“em”
0.0625em × 18 = 1.125em
我們可以把得出的值寫到CSS樣式表中
h1 {
font-size: 1.125em;/*0.625em × 18 = 1.125em*/
}
同樣為了保留Richard Rutter所說的vertical rhythm,我們同樣將標題“h1”的“line-height”和“margin”都設置為“18px”,使用方法前面介紹的方法。很容易得到他們的“em”值為“1em”:
h1 {
font-size: 1.125em; /*0.625em × 18 = 1.125em*/
line-height: 1em; /*18px(line-height) ÷ 18px(font-size) = 1em */
margin: 1em; /*18px(margin) ÷ 18px(font-size) = 1em */
}
設置圖片大小——使用em
要做出彈性布局樣例這樣的果,我們也需要在html中插入一張圖片:
<body>
<div id="wrap">
<h1>....</h1>
<p><img src="90.png" alt="" /> Lorem...</p>
</div>
</body>
我們這張圖片具有“90px”的寬和高,同時具有一個右邊距和底邊距為“18px”設置,而且還進行左浮動。下面我們就一起來看其如何實現圖片這幾個樣式效果:
從HTML結構中,我們很清楚的知道,圖片是段落“p”的子元素,通過前面的介紹,你們知道這個段落“p”的“font-size”值被得定義為“12px”,因此我們計算圖片的屬性值時,不能在按“1px = 0.0625em”或者“1em=16px”來計算,我們需要使用最老的公式計算:
1 ÷ 父元素的font-size × 需要轉換的像素值 = em值
這樣一來,按上面所示的公式,我們就可以計算出圖片的大小:
1 ÷ 12 × 90 = 7.5em
現在你就可以將計算出來的值寫到樣式中去:
p img {
width: 7.5em; /*1 ÷12( 父元素的font-size) × 90px(圖片的寬度) = 7.5em */
height: 7.5em; /*1 ÷12( 父元素的font-size) × 90px(圖片的高度) = 7.5em */
}
我們在段落中知道了“18px”剛好是“1em”,現在我們也把他使用到圖片的樣式中:
p img {
width: 7.5em; /*1 ÷12( 父元素的font-size) × 90px(圖片的寬度) = 7.5em */
height: 7.5em; /*1 ÷12( 父元素的font-size) × 90px(圖片的高度) = 7.5em */
margin: 0 1.5em 1.5em 0;
float: left;
}
這樣我們就制作出一個和彈性布局樣例一樣的效果。希望通過這樣的一個實例能幫助大家了解如何使用“em”來創建一個彈性布局的方法。當然大家可能還在擔心使用“em”來制作一個彈性布局,不能像“px”一樣的的精確,如果你真正理解了這篇教程后,我想你不會在有這樣的想法。
彈性布局的公式總結
最后我想大家肯定和我會有同一種想法,就是相關參數是的“px”值如何成功而且正確的轉換成“em”值,經過上面的學習,我最后將公式總結一下:
元素自身沒有設置字號大小時,元素的width、height、line-height、margin、padding、border等值轉換都按下面公式轉換:
1 ÷ 父元素的font-size × 需要轉換的像素值 = em值
我們來看一個實例:
<body>
<div id="wrapper">test</div>
</body>
我們在body默認字體大小為“16px”,此時需要“div#wrapper”的相關參數值為:
#wrapper {
width: 200px;
height: 100px;
border: 5px solid red;
margin: 15px;
padding: 10px;
line-height: 18px;
}
那么我們按照上面的公式,將所在參數進行轉換:
#wrapper {
width: 12.5em;/*1 ÷ 16 × 200 = 12.5em值*/
height: 6.25em;/*1 ÷ 16 × 100 = 6.25em值*/
border: 0.3125em solid red;/*1 ÷ 16 × 5 = 0.3125em值*/
margin: 0.9375em;/*1 ÷ 16 × 15 = 0.9375em值*/
padding: 0.625em;/*1 ÷ 16 × 10 = 0.625em值*/
line-height: 1.125em;/*1 ÷ 16 × 18 = 1.125em值*/
}
我們一起來看計算出來的值:
接下來我需要大家在來看一個效果,這一點很關鍵喲,仔細看好,在同樣的參數基礎上稍加一條元素本身設置字體大小為:14px;,大家可以會說很簡單的呀,按前面的公式計算出來加上就是了,那么我現在就按大家說的計算加上:
#wrapper {
font-size: 0.875em;/*1 ÷ 16 × 14= 0.875em值*/
width: 12.5em;/*1 ÷ 16 × 200 = 12.5em值*/
height: 6.25em;/*1 ÷ 16 × 100 = 6.25em值*/
border: 0.3125em solid red;/*1 ÷ 16 × 5 = 0.3125em值*/
margin: 0.9375em;/*1 ÷ 16 × 15 = 0.9375em值*/
padding: 0.625em;/*1 ÷ 16 × 10 = 0.625em值*/
line-height: 1.125em;/*1 ÷ 16 × 18 = 1.125em值*/
}
此進我們在firebug下看計算出來的layout值
為了更好的說明問題,我把元素自身沒有設置字體大小和元素自身設置了字體大小,兩者在firebug計算出來值:
我截這個圖的主要意圖是,說明一個問題就是元素自身要是設置了字體大小后,其計算公式就不在是前面所說的,我們需要做一下修改:
1、字體計算公式依舊
1 ÷ 父元素的font-size × 需要轉換的像素值 = em值
2、其它屬性的計算公式需要換成
1 ÷ 元素的font-size × 需要轉換的像素值 = em值
那么我們現在來計算一回:
#wrapper {
font-size: 0.875em;/*1 ÷ 16 × 14= 0.875em值*/
width: 14.2857em;/*1 ÷ 14 × 200 = 14.2857em值*/
height: 7.1429em;/*1 ÷ 14 × 100 = 7.1429em值*/
border: 0.357em solid red;/*1 ÷ 14 × 5 = 0.357em值*/
margin: 1.071em;/*1 ÷ 14 × 15 = 1.071em值*/
padding: 0.714em;/*1 ÷ 14 × 10 = 0.714em值*/
line-height: 1.2857em;/*1 ÷ 14 × 18 = 1.2857em值*/
}
我們在來看一次計算出來的值:
總結
長篇介紹了一大堆,唯一想告訴大家的是以下幾點
1、瀏覽器的默認字體大小是16px
2、如果元素自身沒有設置字體大小,那么元素自身上的所有屬性值如“boder、width、height、padding、margin、line-height”等值,我們都可以按下面的公式來計算
1 ÷ 父元素的font-size × 需要轉換的像素值 = em值
3、這一種千萬要慢慢理解,不然很容易與第二點混了。如果元素設置了字體大小,那么字體大小的轉換依舊按第二條公式計算,也就是下面的:
1 ÷ 父元素的font-size × 需要轉換的像素值 = em值
那么元素設置了字體大小,此元素的其他屬性,如“border、width、height、padding、margin、line-height”計算就需要按照下面的公式來計算:
1 ÷ 元素自身的font-size × 需要轉換的像素值 = em值
這樣說,不知道大家理解了整明白了沒有,如果沒有整明白,可以回過頭來看上面的一個實例。轉自:http://www.uml.org.cn/html/201207311.asp
天遇到一個 em 問題。
剛好分享給大家看看。
眾所周知——
使用 em 可以由父節點控制子節點的字體、邊距等大小。
這樣可以讓其他引用組件的開發者,方便地控制組件內排版,以達到頁面顯示一致性。
但是,不小心使用的話,可能有意料之外的結果。
先來看看題目。
題目:
觀察下列代碼。
.parent { font-size: 16px; } ? .child { font-size: 1.5em; padding: 1.5em; } ? <ul class="parent"> <li class="child"></li> </ul>
正確答案是:B
等等,為什么不是 A??em 不是相對于父元素的字體大小來計算嗎?
這就要從規范說起,在 css2.1 規范中提到:
css2.1 規范截圖
大概翻譯為:
對于 em、ex 單位,如果是應用在 font-size 屬性上,它的長度值的計算是基于父元素的字體大小,如果是應用在其他屬性上,它的長度值的計算是基于當前元素的字體大小。
這就十分清晰了,對于上題而言:
父節點是 font-size=16px
子節點的 font-size=16px*1.5=24px
子節點中的除 font-size 外其他屬性計算為 padding=24px*1.5=36px
所以說,如果面試時候被問到類似 ——
em 單位是什么,怎么計算 em 的值?
如果單純的回答:em 是相對于父元素的字體大小進行計算?。這是不準確的。
嚴謹一點應該回答:
對于一個元素的 em 計算,其字體大小是相對于父元素的字體大小;除字體大小外的其他屬性,是相對于當前元素的字體大小。
這些細節很容易反映出基礎水平,所以平時應該多加留意。
加關注并點擊左下角「了解更多」,即可獲取 css2.1 規范文檔。
文本標記語言(英語:HyperText Markup Language,簡稱:HTML)是一種用于創建網頁的標準標記語言。HTML是一種基礎技術,常與CSS、JavaScript一起被眾多網站用于設計令人賞心悅目的網頁、網頁應用程序以及移動應用程序的用戶界面。網頁瀏覽器可以讀取HTML文件,并將其渲染成可視化網頁。HTML描述了一個網站的結構語義隨著線索的呈現,使之成為一種標記語言而非編程語言。
HTML元素是構建網站的基石。HTML允許嵌入圖像與對象,并且可以用于創建交互式表單,它被用來結構化信息——例如標題、段落和列表等等,也可用來在一定程度上描述文檔的外觀和語義。HTML的語言形式為尖括號包圍的HTML元素(如<html>),瀏覽器使用HTML標簽和腳本來詮釋網頁內容,但不會將它們顯示在頁面上。
HTML可以嵌入如JavaScript的腳本語言,它們會影響HTML網頁的行為。網頁瀏覽器也可以引用層疊樣式表(CSS)來定義文本和其它元素的外觀與布局。維護HTML和CSS標準的組織萬維網聯盟(W3C)鼓勵人們使用CSS替代一些用于表現的HTML元素。
歷史
W3C制作的早期HTML標志
發展
蒂姆·伯納斯-李
1980年,物理學家蒂姆·伯納斯-李在歐洲核子研究中心(CERN)在承包工程期間,為使CERN的研究人員使用并共享文檔,他提出并創建原型系統ENQUIRE。1989年,伯納斯-李在一份備忘錄中提出一個基于互聯網的超文本系統。他規定HTML并在1990年底寫出瀏覽器和服務器軟件。同年,伯納斯-李與CERN的數據系統工程師羅伯特·卡里奧聯合為項目申請資助,但未被CERN正式批準。在他的個人筆記中伯納斯-李列舉“一些使用超文本的領域”,并把百科全書列為首位。
HTML的首個公開描述出現于一個名為“HTML標簽”的文件中,由蒂姆·伯納斯-李于1991年底提及。它描述18個元素,包括HTML初始的、相對簡單的設計。除了超鏈接標簽外,其他設計都深受CERN內部一個以標準通用標記語言(SGML)為基礎的文件格式SGMLguid的影響。這些元素在HTML 4中仍有11個存在。
伯納斯-李認為HTML是SGML的一個應用程序。1993年中期互聯網工程任務組(IETF)發布首個HTML規范的提案:“超文本標記語言(HTML)”互聯網草案,由伯納斯-李與丹·康納利(英語:Dan Connolly (computer scientist))撰寫。其中包括一個SGML文檔類型定義來定義語法。草案于6個月后過期,不過值得注意的是其對NCSA Mosaic瀏覽器自定義標簽從而將在線圖像嵌入的行為的認可,這反映IETF把標準立足于成功原型的理念。同樣,戴夫·拉格特(英語:Dave Raggett)在1993年末提出的與之競爭的互聯網草案“HTML+(超文本標記格式)”建議規范已經實現的功能,如表格與填寫表單。
在HTML和HTML+的草案于1994年初到期后,IETF創建一個HTML工作組,并在1995年完成"HTML 2.0",這是第一個旨在成為對其后續實現標準的依據的HTML規范。
在IETF的主持下,HTML標準的進一步發展因競爭利益而遭受停滯。自1996年起,HTML規范一直由萬維網聯盟(W3C)維護,并由商業軟件廠商出資。不過在2000年,HTML也成為國際標準(ISO/ IEC15445:2000)。HTML 4.01于1999年末發布,進一步的勘誤版本于2001年發布。2004年,網頁超文本應用技術工作小組(WHATWG)開始開發HTML5,并在2008年與W3C共同交付,2014年10月28日完成標準化。
版本時間線
1995年11月24日
HTML 2.0作為IETF RFC 1866發布。追加RFC的附加功能:
1995年11月25日:RFC 1867(基于表單的文件上傳)
1996年5月:RFC 1942(表格)
1996年8月:RFC 1980(客戶端圖像映射)
1997年1月:RFC 2070(國際化)
1997年1月14日
HTML 3.2作為W3C推薦標準發布。這是首個完全由W3C開發并標準化的版本,因IETF于1996年9月12日關閉它的HTML工作組。
最初代號為“威爾伯”(Wilbur),HTML 3.2完全去除數學公式,協調各種專有擴展,并采用網景設計的大多數視覺標記標簽。由于兩家公司達成了協議,網景的閃爍元素(英語:blink element)和微軟的滾動元素(英語:marquee element)被移除。HTML對數學公式的支持最后成為另外一種被稱為MathML的標準。
1997年12月18日
HTML 4.0作為W3C推薦標準發布。它提供三種變化:
嚴格,過時的元素被禁止。
過渡,過時的元素被允許。
框架集,大多只與框架相關的元素被允許。
最初代號“美洲獅”(Cougar), HTML 4.0采用許多特定瀏覽器的元素類型和屬性,并試圖淘汰網景的視覺標記功能,將其標記為不贊成使用。HTML 4是遵循ISO 8879 - SGML的SGML應用程序。
1998年4月24日
HTML 4.0進行微調,不增加版本號。
1999年12月24日
HTML 4.01作為W3C推薦標準發布。它同樣提供三種變化,最終勘誤版于2001年5月12日發布。
2000年5月
ISO/IEC 15445:2000("ISO HTML",基于HTML 4.01嚴格版)作為ISO/IEC國際標準發布。在ISO中這一標準位于ISO/IEC JTC 1/SC 34(英語:ISO/IEC JTC 1/SC 34)域(ISO/IEC聯合技術委員會1、小組委員會34 – 文檔描述與處理語言)。
2014年10月28日
HTML 5作為W3C推薦標準發布。
草案時間線
HTML5的Logo
1991年10月
HTML標簽,一個非正式CERN文件首次公開18個HTML標簽。
1992年6月
HTML DTD的首個非正式草案, 后續有七個修訂版(7月15日,8月6日,8月18日,11月17日,11月19日,11月20日,11月22日)。
1992年11月
HTML DTD 1.1(首個版本號,基于RCS修訂版,版本號從1.1開始而非1.0),非正式草案。
1993年6月
超文本標記語言由IETF IIIR工作小組作為互聯網草案(一個粗略的建議標準)。在被第二版代一個月后,IETF又發布6個草案,最終在RFC1866中發布HTML 2.0。
1993年11月
HTML+由IETF作為互聯網草案發布,是超文本標記語言草案的一個競爭性提案。它于1994年5月到期。
1995年4月 (1995年3月編寫)
HTML 3.0[33]被提議作為IETF的標準,但直到提案在五個月過期后(1995年9月28日)仍沒有進一步的行動。它包含許多拉格特HTML+提案的功能,如對表格的支持、圍繞數據的文本流和復雜的數學公式的顯示。W3C開始開發自己的Arena瀏覽器作為HTML 3和層疊樣式表的試驗臺(英語:Test bed),但HTML 3.0并沒有獲得成功。瀏覽器廠商,包括微軟和網景,選擇實現HTML3草案功能的不同子集并引入它們自己的插件(見瀏覽器大戰)。
2008年1月
HTML5由W3C作為工作草案(鏈接)發布。雖然HTML5的語法非常類似于SGML,但它已經放棄任何成為SGML應用程序的嘗試,除了一種替代的基于XML的HTML5序列,它已明確定義自己的“HTML”序列。
2011年 HTML5 – 最終征求
2011年5月,工作小組將HTML5推進至“最終征求”(Last Call)階段,邀請W3C社區內外人士以確認本規范的技術可靠性。W3C開發一套綜合性測試套件來實現完整規范的廣泛交互操作性,完整規范的目標日期為2014年。2011年1月,WHATWG將其“HTML5”活動標準重命名為“HTML”。W3C仍然繼續其發布HTML5的項目。
2012年 HTML5 – 候選推薦
2012年7月,WHATWG和W3C的工作產生一定程度的分離。W3C繼續HTML5規范工作,重點放在單一明確的標準上,這被WHATWG稱為“快照”。WHATWG組織則將HTML5作為一個“活動標準”(Living Standard)。活動標準的概念是從未完成但永遠保持更新與改進,可以添加新特性,但功能點不會被刪除。
2012年12月,W3C指定HTML5作為候選推薦階段。 該階段的標準為“兩個100%完成,完全實現交互操作”。
2014年 HTML5 – 提案推薦與推薦
2014年9月,HTML5進入提案推薦階段。
2014年10月28日,HTML5作為穩定W3C推薦標準發布,這意味著HTML5的標準化已經完成。
XHTML版本
XHTML是使用XML 1.0改寫自HTML 4.01的獨立語言。它不再被作為單獨標準開發。
XHTML 1.0, 2000年1月26日作為W3C推薦標準發布。修訂版于2002年8月1日發布,它提供與HTML 4.0和4.01相同的三個變化,這些變化被重新在XML中制定。
XHTML 1.1,基于XHTML 1.0 嚴格版,2001年5月31日 作為W3C推薦標準發布。修訂版可使用模塊化XHTML的模塊,2001年4月10日作為W3C推薦標準發布。
XHTML 2.0為工作草案,但為支持HTML5與XHTML5的工作,此草案被放棄。 XHTML 2.0與XHTML 1.x不兼容,因此更確切的說這是一個XHTML風格的新語言而不是XHTML 1.x的更新。
在HTML5草案中規定一個XHTML語法,稱為“XHTML5.1”。
標記
HTML標記包含標簽(及其屬性)、基于字符的數據類型、字符引用和實體引用等幾個關鍵部分。HTML標簽是最常見的,通常成對出現,比如<h1>與</h1>。這些成對出現的標簽中,第一個標簽是開始標簽,第二個標簽是結束標簽。兩個標簽之間為元素的內容,有些標簽沒有內容,為空元素,如<img>。
HTML另一個重要組成部分為文檔類型聲明(英語:document type declaration),這會觸發標準模式渲染。
以下是一個經典的Hello World程序的例子:
<!DOCTYPE html>
<html>
<head>
<title>This is a title</title>
</head>
<body>
<p>Hello world!</p>
</body>
</html>
<html>和</html>之間的文本描述網頁,<body>和</body>之間的文本為可視頁面內容。標記文本<title>This is a title</title>定義了瀏覽器的頁面標題。
文檔標記類型<!DOCTYPE html>用于HTML5。 如果未進行聲明,瀏覽器會使用“怪異模式”進行渲染。
元素
HTML文檔由嵌套的HTML元素構成。它們用HTML標簽表示,包含于尖括號中,如<p>
在一般情況下,一個元素由一對標簽表示:“開始標簽”<p>與“結束標簽”</p>。元素如果含有文本內容,就被放置在這些標簽之間。
在開始與結束標簽之間也可以封裝另外的標簽,包括標簽與文本的混合。這些嵌套元素是父元素的子元素。
開始標簽也可包含標簽屬性。這些屬性有諸如標識文檔區段、將樣式信息綁定到文檔演示和為一些如<img>等的標簽嵌入圖像、引用圖像來源等作用。
一些元素如換行符<br>,不允許嵌入任何內容,無論是文字或其他標簽。這些元素只需一個單一的空標簽(類似于一個開始標簽),無需結束標簽。
許多標簽是可選的,尤其是那些很常用的段落元素<p>的閉合端標簽。HTML瀏覽器或其他媒介可以從上下文識別出元素的閉合端以及由HTML標準所定義的結構規則。這些規則非常復雜,不是大多數HTML編碼人員可以完全理解的。
因此,一個HTML元素的一般形式為:<tag attribute1="value1" attribute2="value2">''content''</tag>。一些HTML元素被定義為空元素,其形式為<tag attribute1="value1" attribute2="value2">。空元素不能封裝任何內容。例如<br>標簽或內聯標簽<img>。一個HTML元素的名稱即為標簽使用的名稱。注意,結束標簽的名稱前面有一個斜杠“/”,空元素不需要也不允許結束標簽。如果元素屬性未標明,則使用其默認值。
例子
HTML文檔的頁眉:<head>...</head>。標題被包含在頭部,例如:
<head>
<title>The Title</title>
</head>
標題:HTML標題由<h1>到<h6>六個標簽構成,字體由大到小遞減:
<h1>Heading level 1</h1>
<h2>Heading level 2</h2>
<h3>Heading level 3</h3>
<h4>Heading level 4</h4>
<h5>Heading level 5</h5>
<h6>Heading level 6</h6>
段落:
<p>第一段</p> <p>第二段</p>
換行:<br>。<br>與<p>之間的差異是br換行但不改變頁面的語義結構,而p部分的頁面成段。
<p>這是<br>一個<br>使用換行<br>段落</p>
鏈接:使用<a>標簽來創建鏈接。href屬性包含鏈接的URL地址。
<a >中文維基百科的連結!</a>
注釋:
<!-- This is a comment -->
注釋有助于理解標記,但它不會在網頁上顯示。
HTML中存在以下幾種類型的標記元素:
用于文本的結構式標記
例如,<h2>羽毛球</h2>將“羽毛球”定義為二級標題。結構式標記不指示任何特定的渲染,但大多數網頁瀏覽器都會采用元素格式的默認樣式。要在內容上實現進一步的風格可以使用層疊樣式表(CSS)。
用于文本外觀的表現式標記,不論其目的
例如,<b>粗體</b>表示視覺輸出設備應將文本“粗體”加粗,但如果設備無法做到這一點(如朗讀文本的聽覺設備),就不會發生什么現象。在這種情況下,<b>粗體</b>與''斜體''也可能有相同的視覺效果,但在本質上它們更加語義化。如同<strong>加強文字</strong>與<em>強調文字</em>的區別。為支持CSS的使用,大多數表現式標記在HTML 4.0規范中不再被推薦使用。
超文本標記使文檔的一部分鏈接到其他文檔
錨元素在文檔中創建超鏈接,其href屬性設置鏈接的目標URL。例如:HTML標記<a 渲染為超鏈接。要將圖片渲染為超鏈接,img元素要作為內容插入到a元素中:<a ><img src="image.gif" alt="說明文字" width="50" height="50" border="0"></a>。
屬性
大多數元素的屬性以“名稱-值”的形式成對出現,由“=”分離并寫在開始標簽元素名之后。值一般由單引號或雙引號包圍,有些值的內容包含特定字符,在HTML中可以去掉引號(XHTML不行)。不加引號的屬性值被認為是不安全的[58]。有些屬性無需成對出現,僅存在于開始標簽中即可影響元素[6],如img 元素的ismap 屬性。
許多元素存在一些共通的屬性:
id屬性為元素提供了在全文檔內的唯一標識。它用于識別元素,以便樣式表可以改變其表現屬性,腳本可以改變、顯示或刪除其內容或格式化。對于添加到頁面的URL,它為元素提供了一個全局唯一標識,通常為頁面的子章節。例如,ID "屬性"對于https://zh.wikipedia.org/wiki/HTML#屬性
class屬性提供一種將類似元素分類的方式。常被用于語義化或格式化。例如,一個HTML文檔可指定類<class="標記">來表明所有具有這一類值的元素都從屬于文檔的主文本。格式化后,這樣的元素可能會聚集在一起,并作為頁面腳注而不會出現在HTML代碼中。類屬性也被用于微格式的語義化。類值也可進行多聲明。如<class="標記 重要">將元素同時放入標記與重要兩類中。
style屬性可以將表現性質賦予一個特定元素。比起使用id或class 屬性從樣式表中選擇元素,“style”被認為是一個更好的做法,盡管有時這對一個簡單、專用或特別的樣式顯得太繁瑣。
title屬性用于給元素一個附加的說明。 大多數瀏覽器中這一屬性顯示為工具提示(英語:Tooltip)。
lang屬性用于識別元素內容的語言,它可能與文檔的主要語言不同。例如,在中文文檔中:
<p>法語<span lang="fr">c'est la vie</span>在法國的應用很普遍,意為“這就是生活” 。<p>
縮寫元素abbr可用于說明一些屬性:
<abbr id="ID" class="術語" style="color:purple;" title="超文本標記語言">HTML</abbr>
這個例子顯示為HTML; 在大多數瀏覽器中,光標指向縮寫時會顯示標題文字“超文本標記語言”。
大多數元素采用與語言相關的屬性dir 來指定文字方向,如 "rtl"采用從右到左的文本,比如阿拉伯語、波斯語以及希伯來語。
字符與實體引用
參見:XML與HTML字符實體引用列表和Unicode與HTML
在4.0版本中,HTML定義了一系列共252個字符實體引用和1,114,050個字元值參考。二者都支持單個字符通過簡單的標記寫入。文字字符與其對應的標記渲染的效果相同。
用這種方式“轉義”字符的能力允許字符<與&(當分別被寫作<和&時)被理解為字符數據而不是標記。例如<通常為標簽的開頭,&通常為字符實體引用與數字字符引用的開頭;&或&或&將&作為元素的內容或屬性的值。雙引號字符"在不被用于屬性值的標示時必須轉義為"或"或";相等地,當于單引號字符'不被用于屬性值的標示時,也必須轉義為'或'(或HTML5與XHTML文檔中的')。
如果文檔作者忽略了轉義這樣的字符,一些瀏覽器會嘗試通過上下文猜測他們的意圖。如果結果仍為無效標記,這會使其他瀏覽器或用戶代理難以訪問到該文檔,并使它們嘗試使用搜索和索引來解析該文檔。
那些難以輸入或不在該文檔字符編碼中的字符也可通過轉義來實現。例如通常只在西歐或南美的鍵盤出現的重音符e(é),可以在HTML文檔中用作實體引用é 或數字引用é或é。 諸如UTF-8的Unicode字符編碼與所有的現代瀏覽器兼容并允許直接訪問全球書寫系統幾乎所有的字符 。
數據類型
HTML為元素內容定義了多種數據類型,如腳本數據、樣式表數據以及許多屬性值的類型,包括ID、名稱、URI、數字長度單位、語言、媒體描述符顏色、字符編碼、日期和時間等等。所有這些數據類型都是字符數據的特殊化。
文檔類型聲明
HTML文檔需要以文檔類型聲明(英語:document type declaration)(英語非正式說法“doctype”)開頭。在瀏覽器中,文檔類型聲明有助于確定渲染模式——特別是是否使用怪異模式。
文檔類型聲明的初衷是通過基于文檔類型定義(DTD)的SGML工具來解析并驗證HTML文檔。
HTML5未定義DTD,所以在HTML5中文檔類型聲明更為簡短:
<!DOCTYPE html>
HTML 4文檔類型聲明舉例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
該聲明引用HTML 4.01“嚴格”版的DTD。基于SGML的驗證器可讀取DTD,正確解析這些文檔并執行驗證。在現代瀏覽器中,一個有效的文檔類型激活標準模式有別于怪異模式。
另外,HTML 4.01提供過渡型與框架集型的DTD。過渡型涵蓋最廣,它可整合當前以及老舊或“過時”的標簽,而嚴格型DTD排除了過時的標簽。框架集擁有所有構建框架所需的標簽以及過渡型的標簽。
語義化HTML
語義化HTML是一種編寫HTML的方式,它強調編碼信息的含義在其格式(樣子)之上。HTML從創立之初就包括語義化標記,但也包括標識性標記如<font>、<i>和<center>標簽。也存在一些語義上中立的span與div標簽。自1990年代末層疊樣式表開始應用于大多數瀏覽器,網頁制作者就被鼓勵使用CSS以便呈現與內容分離。
在2001年一次對語義網的討論中,蒂姆·伯納斯-李等人給出了一種的方法,使智能軟件“代理人”可能有一天會自動抓取網頁進行查找、過濾并將之前不相關的聯系起來。這種代理甚至在現在也不普遍,但一些Web 2.0、混搭和價格比較網站的想法可能會結束。這些網頁應用程序的混合與伯納斯-李的語義代理人的之間主要區別基于以下事實:當前的聚合與信息混合通常由網頁開發者設計,他們早已知道網絡位置和他們希望混搭、比較與結合的特定數據的API語義。
網頁代理的一個重要類型是網絡爬蟲或搜索引擎蜘蛛。這些軟件代理依賴于它們發現的網頁的語義清晰度,因為它們一天要使用各種技術與算法來讀取和索引數百萬個網頁并給網頁用戶提供搜索工具,沒有這些萬維網的有效性就會大大降低。
為使搜索引擎蜘蛛評估它們在HTML文檔中發現的文本片段的重要性,也為那些創建標記等混合的人與更多的自動化代理工具,HTML中的語義結構需要廣泛一致地應用從而將文本的含義呈現給瀏覽者。
表示性標記在當前的HTML和XHTML推薦中不被鼓勵使用,HTML5中則被視為非法。
好的語義化HTML也改善了網頁文檔的可訪問性。例如,當屏幕閱讀器或音頻瀏覽器可以正確判定一個文檔的結構時,視覺障礙用戶不會再因閱讀重復或無關的信息而浪費時間。
分發
HTML文檔分發的方法和其他計算機文件相同。不過,它們最常通過網頁服務器的超文本傳輸協議或電子郵件傳輸。
HTTP
萬維網主要由從服務器通過HTTP協議向瀏覽器發送的HTML文檔組成。但是,HTTP也可以被用于傳輸HTML之外的數據,例如圖像、聲音和其他內容。為使瀏覽器了解如何處理接收到的文檔,在傳輸文檔時必須同時傳遞文件類型。這種元數據包含MIME類型(對于HTML 4.01或更早版本是text/html,而對于XHTML 1.0或之后的版本是application/xhtml+xml),以及字符編碼(參見HTML字符編碼方式)。
在現在的瀏覽器中,和HTML文檔一起發送的MIME類型影響文檔的解讀方式。和XHTML MIME類型一起發送的文檔被認為是良構的XML,而語法錯誤會導致瀏覽器無法呈現文檔。完全相同的文檔如果和HTML MIME類型一起發送,則可能被正常顯示,因為瀏覽器對HTML的語法檢查更加松懈些。
W3C的推薦指出,遵循規定的推薦指引的XHTML 1.0文檔可標記二者任一的MIME類型。XHTML 1.1還指出,XHTML 1.1文檔應標有兩種MIME類型。
HTML郵件
大多數圖形電子郵件客戶端允許使用HTML的子集(經常界限不清)提供格式化和無法使用純文本的語義標記。這可能包括印刷信息,如彩色標題、強調和引用文本、內嵌圖片和圖表等。許多這樣的客戶包含一個編寫HTML電子郵件消息的圖形用戶界面編輯器和一個用于顯示的渲染引擎。在郵件中使用HTML受到了一些兼容性的批評,由于一些盲人或具有視覺障礙的人的訪問問題,這種方式有利于偽裝的釣魚攻擊。因其消息大小超過明文,所以它可混淆垃圾郵件過濾器。
命名規則
最常用的計算機文件擴展名為.html,通用縮寫為.htm。它起源于某些早期操作系統與文件系統,如DOS以及FAT數據結構的局限性,它將文件擴展名限制為3個字母。
HTML應用程序
HTML應用程序(HTA;文件擴展名".hta")是一個Microsoft Windows應用程序,它在瀏覽器中使用HTML和動態HTML提供應用程序圖形界面。正規HTML文件被限制在瀏覽器的安全模型中,只能分別通過網頁服務器和網頁對象與站點Cookie進行通信和操作。HTA作為完全受信任的應用程序運行,因此擁有更多的權限,如創建/編輯/刪除文件與注冊表項。因為它們在瀏覽器安全模式之外操作,所以HTA不能通過HTTP執行,必須下載(就像EXE文件)并在本地文件系統執行。
所見即所得編輯器
所見即所得編輯器使用圖形用戶界面(GUI)顯示HTML文檔,常常類似于文字處理器,所以用戶可以設計一切。編者面對的是文檔,而不是代碼,所以作者并不需要太多的HTML知識。這種所見即所得的編輯模式一直受到詬病,主要因為它生成的代碼質量不高;也有人主張將其改變至WYSIWYM模型(所見即所指)。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。