要撰寫一個 Angular 的頁面、元件,html 絕對是必備的技能,在 HTML5 標準被提出後,又更加複雜了。其實筆者也是對 html 很陌生,我們先走一遍 Angular 的範例,認識一下用了哪些標籤。
html 是一種標籤語言,而不是程式語言。其實很容易理解,一個 html 元素,基本上會是成對的標籤,把內容包起來,像是這樣:
<title>SpongeWebsite</title>
<title> 開始標籤SpongeWebsite 內容</title> 結束標籤
或是只有開始標籤,而沒有結束標籤:
<img src="https://s.aolcdn.com/hss/storage/midas/17f4b60aec299f212a456632b2311c5e/202565129/google-1200-2.jpg">
像img這個標籤,我們還可以給予他屬性src,用來指定圖片的網址。
現在你對html結構有了初步認識,開始標籤、屬性、內容、結束標籤。
接下來進入html主體,基本結構:
<html>
    <head></head>
    <body></body>
</html>
非常直觀,由頭跟身體組成,<head></head>裡面,可以定義一些資訊,像 title 、 description 等,或是引入一些 js 檔。
只有<body></body>裡的內容,會顯示在瀏覽器上。
我們看看index.html :
<!-- index.html-->
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>SpongeWebsite</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root></app-root>
</body>
</html>
首先第一行是html的註解方式,是用<!-- -->把內容包起來,像這樣:
<!-- 這裡填入註解-->
<!doctype>宣告這個檔案的類型,要宣告為html5,只要寫 <!doctype html> 就可以了,其他檔案類型如 HTML 4.01 Strict,他的宣告式就很長:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">...</html>
lang="en" 指定語系,幫助瀏覽器正確解碼。作用域是整個<html>...</html>包起來的範圍。<head>... </head>
<meta charset="utf-8">指定編碼格式,有關於 UTF-8 或 Unicode ,可參考 UTF-8、 <title>SpongeWebsite</title> 定義網站的標題,也就是這邊顯示的字
。<base href="/"> 如果你的網頁有超連結設定成相對路徑,那麼就會導向以 <base> 設定為基底的URL。"/"會指定該html所屬的目錄。<body> </body>裡建立一個超連結的標籤:  <a href="test.com">Link</a>
點選這個連結, URL 就會導向http://localhost:4200/test.com
如果設成絕對路徑:
  <a href="http://www.google.com">Link</a>
就能正確導向www.google.com,而不會經過base的URL。
<meta name="viewport" content="width=device-width, initial-scale=1">
設定頁面寬度等於裝置寬度,這樣在手機或平板上比較不容易跑版。width 是頁面寬度,可以是一個常數,initial-scale是縮放比例,預設為 1。
 <link rel="icon" type="image/x-icon" href="favicon.ico">
設定 icon , rel 指明與這個檔案的關係,簡單說就是這個檔案的用途。type 要按照icon的檔案格式填入對應的MIME標籤, GIF 檔要填入 image/gif , PNG要填入 image/png 。MIME稍微知道一下就好。
最後href則是檔案的路徑。<link> 這個標籤比較常見的是用在匯入css,像這樣:
<link rel="stylesheet" href="https://assets.hackmd.io/build/emojify.js/dist/css/basic/emojify.min.css">
這邊的內容稍微理解就好。
<div style="text-align:center">
  <h1>
    Welcome to {{ title }}!
  </h1>
  <img width="300" alt="Angular Logo" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==">
</div>
<h2>Here are some links to help you start: </h2>
<ul>
  <li>
    <h2><a target="_blank" rel="noopener" href="https://angular.io/tutorial">Tour of Heroes</a></h2>
  </li>
  <li>
    <h2><a target="_blank" rel="noopener" href="https://angular.io/cli">CLI Documentation</a></h2>
  </li>
  <li>
    <h2><a target="_blank" rel="noopener" href="https://blog.angular.io/">Angular blog</a></h2>
  </li>
</ul>
因為這邊的內容是嵌在 index.html 的 <body></body> 裡,所以這邊看不到 <head> 、 <body> 標籤。
<div></div>"text-align:center",讓 <div></div> 的內容置中對齊。<h1></h1><h1> ~ <h6> 六種,數字越大,字體越小。<img> 載入圖片, width 指定圖片顯示的寬度, alt 可以填寫當圖片載入失敗時,要顯示的字,可以實驗看看把 src="..." 這段拿掉,就能看到 alt 的內容印在瀏覽器上。data:image/svg+xml; 說明這個圖片是svg格式, base64 是編碼格式,把後面的資料餵進Base64 Decoder,馬上就能解析出內容:
<ul></ul><ul></ul> 包起來的內容是一個沒有順序的 list , list 的每一項則是用 <li></li> 包起來。<a>target 是決定要在哪裡打開這個連結, 指定為 _blank 即會開起新的分頁,如果指定成 _parent 、 _self 、 _top ,對於目前的頁面來說,效果都只會和 _self 一樣,在同個頁面開啟連結。rel="noopener",由於我們點下連結時,瀏覽器會執行 window.open(<URL>) ,此時會開啟一個視窗,那麼原先的頁面就是 window.opener 。如果網站有惡意程式碼,是可以把 window.opener 換成其他網站,達成釣魚網站的攻擊手法,所以這邊會設定 noopener 。相關範例可參考這邊的說明。href這兩個檔案涵蓋了蠻多基本的標籤,明天我們整理一些常用標籤,及介紹標籤可以用的屬性。