1. 程式人生 > 其它 >前端二向箔03-HTML元資料和連結

前端二向箔03-HTML元資料和連結

技術標籤:前端二向箔html5

03 HTML元資料和連結

html元資料即在head標籤中的部分, 主要是描述了網頁的一些重要的資訊和媒體連結. 大多情況下是提供給瀏覽器爬蟲和機器閱讀的. 連結作為網頁的互聯的基石, 在head中連結有linkscript兩種形式.

本文歸納常見的元資料和連結的重要知識.

元資料

  • head

    head本身沒有意義, 只提供儲存容器, 是Document的元資料集合. 不會在頁面上顯示, 且只有一個title和base.

  • title

    網頁html文件標題, 而非網頁內容標題( h1~h6), 主要在搜尋中體現重要性, 對於整個文件的概括性. 這個標題在其他上下文中也會被使用,例如在使用者的歷史、書籤,或搜尋結果中

  • base

    給網頁上的URL提供相對地址的基礎, 相當於根目錄字首, 只能有一個base. 它會改變全域性的連結, 並不提倡使用.

    <base href="https://www.example.com/news/index.html">
    ...
    <p>Visit the <a href="archives.html">archives</a>.</p>
    

    上面例子中的連結地址是 “https://www.example.com/news/archives.html”。

  • style

    css樣式表

最重要的meta

meta是作為title, base, link等的補充, 而實際上meta型別是開發者常見的優化方向. 本質是key-value.

使用meta要注意:

  • 必須指定任意一個: namehttp-equivcharset, 和 itemprop( 除了itemprop其他的都要同時指定content)
  • 每個文件必須存在不少於一個有 charset 屬性的 meta 元素。

可以自定義meta, 約定好name和value即可, 也可以使用預定義的規範meta.

主要預定義的型別有這幾項:

  1. html5簡化了meta的charset寫法, 新增charset屬性用於設定網頁的編碼. 即:

    <
    meta
    charset="UTF-8">

    進行utf-8(ASCII是utf-8的子集)編碼是因為一般http請求過程, 伺服器會設定編碼格式, 但應對一些非http協議無請求頭, 如file, 就可以避免亂碼情況.

  2. 具有http-equiv屬性的meta, 執行命令, 一般是新增http頭, 即content-type, 可以同時設定編碼:

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
  3. name為viewport的meta, 設定網頁縮放, 響應式設計中最常用.

    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
    

    上述是移動端響應式設計中最典型的使用, 其中content設定key=value, 中間使用逗號分隔.

    屬性解釋:

    • width:頁面寬度,可以取數值,一般設定成 device-width,即裝置寬度。
    • height:頁面高度,可以取數值,一般設定成 device-height,即裝置高度。
    • initial-scale:初始縮放比例. (一般為1)
    • minimum-scale:最小縮放比例。 (一般為1)
    • maximum-scale:最大縮放比例。 (一般為1)
    • user-scalable:是否允許使用者縮放。(對於移動端已有響應式設計就設定為no)
  4. description\application-name, 前者描述網頁, 後者提供網頁應用的名稱

    <meta name=application-name content="mugu">
    <meta name="description" content="this is a description>
    

    對於description, 在網頁搜尋中比較重要, 對於資訊的提取也比較高效

    而application-name是為網頁應用設定的, 可以用作標籤收藏時的使用, 利於瀏覽器演算法生成.

  5. keyword棄用, 很多搜尋引擎不會考慮這些關鍵字,因為該特性是不可靠的甚至會導致垃圾結果,對使用者並沒有幫助。特別是面對一些作弊, 惡意填充的keyword, 瀏覽器搜尋引擎基本不作為考量.

  6. referrer, generator, theme-color…

連結

連結包括兩種, 超連結外部資源連結, 其中核心就是網際網路的URL和URI系統.

URI 指的是一個資源,URL 指的是用地址定位一個資源,URN 指的是用名稱定位一個資源。 即URL 和 URN 是 URI 的子集。 詳細可見引用[4]

在網頁中連結最重要的兩個屬性是relhref, 前者是Relationship, 指連結目標文件和本文件的關係; 後者表示Hypertext Reference, 指超連結的目標地址. 把握這兩者的對應關係可以更好的理解和使用響應的標籤.

網頁中的連結主要有以下:

link

  1. rel屬性, 不同的功能

link最主要的使用時連結外部資源. 即外部資源類連結. 常見在head標籤中, 進行stylesheet關係的css檔案引用.

<link rel="stylesheet" type="text/css" href="theme.css">

大多情況向link不會顯示在網頁中, 作為元資料的一類, 其設計的目的是為了瀏覽器和搜尋引擎識別. 比如icon資源, 會被瀏覽器識別:

<link rel="alternate" type="application/atom+xml" href="/blog/news/atom">
<!-- 移動端提供不同解析度, 此處的apple開頭rel為ios特有 -->
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="favicon114.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="favicon72.png">

此外指定不同的rel可以有不同的功能, 如preload預載入一些資原始檔( 只是快取, 未執行, 同常加上type屬性宣告MIME型別 ); 使用prerender可以預渲染頁面, 這在確定使用者會接下的頁面中設定, 來訪問可以極大提升使用者體驗.

<link rel="preload" href="sintel-short.mp4" as="video" type="video/mp4">
<link rel="prerender" href="http://example.com/">

as屬性指定載入資源的型別,它的值一般有下面幾種。

  • script
  • style
  • image
  • media
  • document

還有一些其他資訊類的元資料用途, 即提供給搜尋引擎\瀏覽器等, 此類一般為超連結類連結, 當rel指明為:

<!-- 作者資訊 -->
<link rel="author" href="humans.txt">

<!-- 版權資訊 -->
<link rel="license" href="copyright.html">

<!-- 另一個語言的版本, 通常由搜尋引擎判別; 也可由外掛判斷RSS訂閱連結 -->
<link rel="alternate" href="https://es.example.com/" hreflang="es">
<link rel="alternate" type="application/atom+xml" href="/blog/news/atom">

<!-- 聯絡方式 -->
<link rel="me" href="https://google.com/profiles/someone" type="text/html">
<link rel="me" href="mailto:[email protected]">
<link rel="me" href="sms:+15035550125">

<!-- 歷史資料 -->
<link rel="archives" href="http://example.com/archives/">

<!-- 目錄 -->
<link rel="index" href="http://example.com/article/">

<!-- 導航, 主要在分頁瀏覽的業務場景中 -->
<link rel="first" href="http://example.com/article/">
<link rel="last" href="http://example.com/article/?page=42">
<link rel="prev" href="http://example.com/article/?page=1">
<link rel="next" href="http://example.com/article/?page=3">

<!-- 部分來自wangdoc.com -->

當然有些已經被meta元資料替代.

  1. media屬性, 外部資源生效的媒介條件

    <link href="print.css" rel="stylesheet" media="print">
    <link href="mobile.css" rel="stylesheet" media="screen and (max-width: 600px)">
    

    和css的媒體查詢類似, 在不同條件下, 載入不同的檔案資源.

  2. 其他屬性

    <link>標籤的其他屬性如下。

    • crossorigin:載入外部資源的跨域設定。
    • href:外部資源的網址。
    • referrerpolicy:載入時Referer頭資訊欄位的處理方法。
    • asrel="preload"rel="prefetch"時,設定外部資源的型別。
    • type:外部資源的 MIME 型別,目前僅用於rel="preload"rel="prefetch"的情況。
    • title:載入樣式表時,用來標識樣式表的名稱。
    • sizes:用來宣告圖示檔案的尺寸,比如載入蘋果手機的圖示檔案。

a

a標籤指anchor, 即錨點, 在網路中定下信標就是a標籤的功能. a標籤於link同樣具有rel和href, 也可充當元資料, 且rel的:

alternate \ author \ help \ license \ next \ prev \ search

與link的語義相同, 不同的是, a會顯示在頁面上, 更多是閱讀用途.

除了常用的連結, 還有幾個比較重要的用法:

  • download屬性, 表示當前連結用於下載, 如下例, 檔名為bar.exe, 也可省略.

    <a href="foo.exe" download="bar.exe">點選下載</a>
    

    注意,如果連結點選後,伺服器的 HTTP 迴應的頭資訊設定了Content-Disposition欄位,並且該欄位的值與download屬性不一致,那麼該欄位優先,下載時將顯示其設定的檔名。

  • mailto協議, 開啟本機預設的郵件程式傳送郵件

    <a href="mailto:[email protected]">聯絡我們</a>
    
    <!-- 詳細用法可以指定郵件的主題\日期等, 注意需要轉義, %20為空格 -->
    <a
      href="mailto:[email protected][email protected]&subject=The%20subject&body=The%20body"
    >傳送郵件</a>
    
    <!-- 分享網頁的用法 -->
    <a href="mailto:">告訴朋友</a>
    

script

作為互動的靈魂, script標籤載入指令碼程式碼, 執行JavaScript程式.

最重要的就是type屬性, 一般預設是"text/javascript". 還有下面一些其他屬性,大部分跟 JavaScript 語言有關.

  • async:該屬性指定 JavaScript 程式碼為非同步執行,不是造成阻塞效果,
  • JavaScript 程式碼預設是同步執行。
  • defer:該屬性指定 JavaScript 程式碼不是立即執行,而是頁面解析完成後執行。
  • crossorigin:如果採用這個屬性,就會採用跨域的方式載入外部指令碼,即 HTTP 請求的頭資訊會加上origin欄位。
  • integrity:給出外部指令碼的雜湊值,防止指令碼被篡改。只有雜湊值相符的外部指令碼,才會執行。
  • nonce:一個密碼隨機數,由伺服器在 HTTP 頭資訊裡面給出,每次載入指令碼都不一樣。它相當於給出了內嵌指令碼的白名單,只有在白名單內的指令碼才能執行。
  • referrerpolicy:HTTP 請求的Referer欄位的處理方法。

<noscript>標籤用於瀏覽器不支援或關閉 JavaScript 時,所要顯示的內容. noscript不是一個功能性標籤, 我個人感覺更像是一種人性化的設計, 雖然有些爭議, 但是在某些層面noscript照顧到一部分人的利益. 可以查閱這篇部落格