tags: web
html
frontend
一個網頁最基本由HTML開始,而HTML並非一成不變,他會隨著時間持續更新規格,目前最新的版本為HTML 5,於2014年10月28日,W3C正式發布,它並不是全新的規格,而是基於HTML 4上面來新增功能,也刪除了一些過時的元素,例如:applet、center等等。
HTML、CSS與Javascript都是有不同目的的語言,HTML用來提供內容與資訊,CSS用來決定網頁上一切事物的外觀,如:字體、字型、顏色、尺寸等等,而Javascript用來讓網頁有功能、邏輯與動作效果,如:顯示時間、判斷使用者輸入直是否正確、數學計算與根據使用者動作決定畫面的隱藏與顯示等等。
雖然在HTML裡面可以直接嵌入CSS與Javascript程式碼,但這將會造成HTML原始碼本身變得複雜且難以閱讀,甚至在找問題時更加困難,將這三種語言分開來會是比較好的做法,盡量保持網頁結構的單純。
W3C(World Wide Web Consortium)是網頁技術標準的組織,它雖然是網頁標準的一個官方組織,但是其納入的網頁標準卻不是強制性的,瀏覽器可以自行決定要如何解譯網頁文件,但大致上來說,瀏覽器都會遵循W3C的標準規格,因為如果該瀏覽器顯示出來的網頁跟大家都不一樣,那就沒人會願意使用,但即使瀏覽器大部份都依照W3C的規格來開發,但仍然不盡相同,因此最令前端設計師頭痛的,莫過於瀏覽器的相容性;例如:某些標籤可能A瀏覽器可以辨識,但B瀏覽器卻無法辨識,使用者使用的瀏覽器因為版本不同,而無法支援最新的CSS效果等等。
W3C官方網頁:
- HTML和CSS標準規格:https://www.w3.org/standards/webdesign/htmlcss
- Javascript API:https://www.w3.org/standards/webdesign/script.html
- w3school:https://www.w3schools.com/default.asp
W3School有HTML、CSS與Javascript學習的一切資源,請多加善用。
規則1:所有的HTML元素都有「開始」標籤和「結束」標籤,而該元素的內容放在兩個標籤內,例如:
<開始標籤>元素內容</結束標籤>
雖然瀏覽器有時很聰明,當你沒有加上結束標籤時仍然可以正常顯示,但仍請保持正確的標籤規則。
規則二:如果該標籤內不需要元素內容,則稱為空標籤,可以將「開始」標籤與「結束」標籤簡寫為:
<空標籤 />
規則三:巢狀標籤,HTML元素內可以標含其它元素,但必須將其完整包圍,也就是不可以將被包圍的元素的「結束」標籤放到包圍該元素的「結束」標籤下面,例如:
<article>
<h1>文章</h1>
</article>
<article>
<h1>文章
</article>
</h1>
規則四:屬性,有些標籤需要透過屬性來設定其特殊功能,例如: <a>
標籤為超連結標籤,需要透過href
屬性來設定要前往的目的地,範例:
<a href="https://www.google.com">前往Google首頁</a>
規則五:標籤名稱使用小寫英文,雖然這個規則不是強制的,也就是說HTML元素名稱並不會區分大小寫,
和
都是一樣的意義,但W3C仍建議HTML內全部使用英文小寫來作為標籤名稱,因為小寫英文字母會比大寫來的容易閱讀。
HTML檔案第一個元素就是「文件類型宣告(doctype)」,doctype告訴瀏覽器這個頁面使用哪一版的HTML,對HTML 5來說,doctype為:
<!DOCTYPE html>
這個元素較為特別,不需要結束標籤,也是唯一一個不需要的。
接著doctype後面則為HTML的全部內容,劃分為兩個部分:<head>與<body>,這兩個部分被<html>元素包圍:
<!DOCYPTE html>
<html>
<head>
...這裡是head元素內的內容,用來放置該HTML文件的資訊或設定,不會顯示在瀏覽器上...
</head>
<body>
...這裡是body元素內的內容,所有顯示在網頁上的資料都放在body裡面...
</body>
</html>
我們必須在<head>元素內使用<meta>元素的charset
屬性來設定該HTML文件的文字編碼,如果設定了錯誤的文字編碼,使用者在瀏覽器上可能會見到亂碼,網頁建議使用支援多國語言且節省網路流量的UTF-8編碼,例如一個一般的HTML 5網頁編碼通常會這樣設定:
<meta charset="utf-8" />
在<head>元素內,我們還必須設定該HTML文件的標題,標題不會顯示在網頁上,而是用來在瀏覽器本身的視窗列或是標籤列顯示,或是當使用者將網頁加入書籤或我的最愛時,預設的網頁名稱。
<title>Aaron Ho部落格</title>
viewport也是<meta>的元素,是RWD網頁可以運作的其中一個關鍵,在非RWD網頁的時代,並不需要設定這個屬性。
viewport屬性用來指示瀏覽器應該用裝置解析度來顯示網頁,而非使用螢幕的真實解析度,在沒有設定viewport的桌上型電腦,用的就是全尺寸的顯示方式,這是大家很習慣的方式,而在行動裝置上,如果使用這個方式來顯示網頁,網頁的字體將會被縮放的方長的小而難以閱讀。
與viewport屬性相關的設定有:
width
:寬度,告訴瀏覽器如何縮放網頁,width=device-width
表示使用瀏覽器的全尺寸來顯示,如果沒有設定,將會以設備的原始尺寸來顯示,例如:iPhone4的原始解析度寬為980像素,而瀏覽器顯示寬度為320像素。initial-scale
:初始縮放,告訴瀏覽器載入網頁後一開始要如何縮放,即縮放倍數,1為原始大小,2為兩倍,以此類推。user-scalable
:設定使用者是否可以自行縮放網頁,預設為yes
,要禁止使用者縮放可以設為no
。maximum-scale
:最大允許縮放倍數,如果是maximum-scale=2
,表示使用者只能放大兩倍,如果為maximum-scale=1
則表示完全無法縮放,意思等同於user-scalable=no
。雖然viewport也是<meta>元素的一個屬性,但是它必須單獨使用一個<meta>標籤來設定,而不可以與其它屬性(如:charset等)同時設定,有些瀏覽器或許可以支援,但並不保證。
一個常見的viewport設定:
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes"/>
網頁上有一些特殊字元,如:<
或是&
等等,因為它們是HTML語法的一部分,當你想顯示在網頁上時,必須使用特殊的方式來表示,否則瀏覽器會將它當成是HTML語法的一部分,而造成顯示問題。
特殊字 | 描述 | 文字表示方式 | 數字表示方式 |
---|---|---|---|
空字元 | |||
< | 小於符號 | < | < |
> | 大於符號 | > | > |
& | 海錨符號 | & | & |
" | 雙引號 | " | " |
' | 單引號 | ' | ' |
¢ | 美元分 | ¢ | ¢ |
£ | 英鎊 | £ | £ |
¥ | 日圓 | ¥ | ¥ |
€ | 歐元 | € | € |
© | 版權符號 | © | © |
® | 註冊商標符號 | ® | ® |
標記 | 字元 | HTML組合標記 | 結果 |
---|---|---|---|
̀ | a | à | à |
́ | a | á | á |
̂ | a | â | â |
̃ | a | ã | ã |
̀ | O | Ò | Ò |
́ | O | Ó | Ó |
̂ | O | Ô | Ô |
̃ | O | Õ | Õ |
HTML5新增了許多特定的語意標籤以支援網頁版面設計,用來取代了不具意義的div、span標籤,網頁設計師利用這些與義標籤建立具有明確架構定義的網頁,讓整個HTML的結構更有意義並且更容易被理解。
網頁頁面的頂部,通常用來放置網站的主要標題、圖片與LOGO等主要的資訊。
定義著一個區段或一份文件的標題,該元素是用來對 h1 到 h6 的標題群組化。其中最大的標題為區段的主要標題,其它則屬於次要標題。當標題擁有多個層級時,這個元素會被用來對 h1-h6 元素的集合做群組化。
通常為網站的主要功能選單。
網頁中的一個內容區塊,是獨立且完整的內容,在一個網頁中可以有很多個。
主要內容之外的其他內容,可以為網站的側邊欄。
用於內容等等段落的區分,在一個內容中可以有許多個。
figure用來作為一段獨立的引用區域,用來在網頁內容旁說明或展示獨立的內容,而figcaption用來作為設定該區域的標題。
網頁下方,用來顯示網站相關資訊、著作權等等。
文字高亮。
- 完整的新增元素,可以參考W3C網站:https://www.w3schools.com/html/html5_new_elements.asp
- 讓IE8以前(包含)IE8的瀏覽器支援新元素:https://www.w3schools.com/html/html5_browsers.asp
- W3C建議的將舊網頁改為使用語意標籤:https://www.w3schools.com/html/html5_migration.asp
標籤 | 說明 |
---|---|
<!–..–> | HTML文件註解 |
<!DCOTYPE> | 定義HTML文件類型 |
<head> | 定義與網頁文件有關之資訊,其內容不會顯示在瀏覽器上 |
<body> | HTML主要內容最外層的元素 |
<abbr> | 定義縮寫文字 |
<address> | 定義內容為地址 |
<area> | 定義帶有可點擊影像地圖區域 |
<base> | 定義網頁中所URL的連接基準 |
<bdo> | 定義文字顯示方向 |
<blockquote> | 定義額外註解或較長的引文 |
<br> | 換行符號 |
<button> | 定義一個按鈕 |
<caption> | 定義一個表格標題 |
<cite> | 定義著作的標題 |
<dd> | 在列表中定義條目的定義 |
<div> | 定義網頁內的一個區塊(自動換行) |
<span> | 定義網頁內的一個區塊(不換行) |
<dl> | 用於一個列表的定義 |
<dt> | 用於一個項目的定義 |
<em> | 用於強調文字 |
<form> | 建立表單 |
<h1>~<h6> | 定義標題文字,有1~6個等級 |
<input> | 定義一個可輸入的區域 |
<ins> | 定義為插入的文字 |
<del> | 定義為刪除的文字 |
<map> | 定義一個影像地圖的範圍 |
<object> | 定義一個嵌入物件 |
<ol> | 定義一個有數字順序的清單 |
<ul> | 定義一個無順序的清單 |
<li> | 定義一個表單的項目 |
<p> | 定義一個段落 |
<pre> | 定義一段非HTML格式的文字區塊 |
<select> | 定義一個下拉式選單 |
<textarea> | 定義一個文字輸入區域 |
<var> | 定義一個變數 |
完整HTML元素:https://www.w3schools.com/tags/
標籤 | 說明 | HTML4的用法 | HTML5的用法 |
---|---|---|---|
<a> | 定義內容為一個超連結 | 須有href=”#”屬性才能連結 | 該標籤永遠表示超連結,只是當沒有href的情況下,就只是一個佔位符號 |
<b> | 定義文章區塊以外的內容,通常用於內容相關的邊欄 | 表現粗體 | 除了表現粗體,其他特別但不太重要的內容,想要特別強調時 |
<hr> | 定義為音效內容 | 做為水平分隔線 | 更換段落主題時使用的水平分隔線 |
<i> | 定義網頁上的繪圖區塊 | 表現斜體 | 除了表現斜體,無重要資料的其他內容,但想要另外標示時使用 |
<menu> | 定義一個指令按鈕 | - | 定義複雜的選單或表單結構 |
<small> | 定義一個下拉式選單 | 表現較小字體 | 備註或是其他法律特殊字體需要小字時使用 |
<strong> | 定義一個元件的細項 | 表現較大字體 | 除了表現較大字體,也可標示重要資訊 |
移除的元素 | 替代元素 |
---|---|
<acronym> | <abbr> |
<applet> | <object> |
<basefont> | CSS |
<big> | CSS |
<center> | CSS |
<dir> | <ul> |
<font> | CSS |
<frame> | 無 |
<frameset> | 無 |
<noframes> | 無 |
<strike> | CSS, <s>, or <del> |
<tt> | CSS |
- 資料來源為W3C網站:https://www.w3schools.com/html/html5_intro.asp
- 雖然瀏覽器大都繼續支援這些被移除的標籤,但作一個為良好的HTML5網頁,請盡量不要再使用它們。
<!DOCTYPE html>
<html>
<head>
<title>HTML5 網頁範例</title>
</head>
<body>
<header>
<hgroup>
<h1><a href="#">網站主標題</a></h1>
<h2><a href="#">網站次標題</a></h2>
</hgroup>
<p>其它說明文字</p>
</header>
<nav>
<ul>
<li><a href="index.html">首頁</li>
<li><a href="life.html">生活心得</a></li>
<li><a href="travel.html">旅遊新知</a></li>
<li><a href="about.html">關於我</a></li>
</ul>
</nav>
<section>
<article>
<header>
<h3><a href="#">內容標題1</a></h3>
</header>
<section>
<p>內容段落1</p>
<p>內容段落2</p>
</section>
</article>
<article>
<header>
<h3><a href="#">內容標題2</a></h3>
</header>
<section>
<p>內容段落1</p>
<p>內容段落2</p>
<p>內容段落3</p>
<p>內容段落4</p>
</section>
</article>
</section>
<aside>
<h2><a href="#">aside</a></h2>
<p>補充資料/子選單</p>
</aside>
<footer>版權宣告</footer>
</body>
</html>