HTML 文檔之 Head 最佳實踐--摘抄

HTML 文檔之 Head 最佳實踐

 
story
01-10 閱讀 353 收藏 0
收藏
這篇文章整理了做者承認的一些最佳實踐,寫在這裏與各位分享
閱讀原文 摺疊收起

HTML 文檔之 Head 最佳實踐

來源: laozhu.me

每個標準的 HTML 文檔都包含一個 <head> 頭部分,除了聲明文檔類型,編碼方式和文檔標題,引入外部資源這些基本功能外, 頭還能作不少很是有用的事情,這篇文章整理了做者承認的一些最佳實踐,寫在這裏與各位分享。css

語言

html 標籤中經過 lang 屬性進行明確的語言聲明,將會有助於翻譯,英文、簡體中文和繁體中文網頁所屬性值以下:html

<html lang="en"> <html lang="zh-Hans"> <html lang="zh-Hant">

編碼

請在 <head> 中第一行統一使用 utf-8 編碼聲明。html5

<meta charset="utf-8">

Base 元素

儘可能不使用 <base> 元素,絕對地址和 URL 對於開發者和用戶來講都更好。git

<!-- Bad --> <base href="/blog/"> <link href="hello-world" rel="canonical"> <!-- Good --> <link href="/blog/hello-world" rel="canonical">

Viewport

設置 viewport 的寬度爲設備寬度,默認縮放比爲 1(容許用戶縮放),設置 viewport-fit=cover 以兼容 iPhone X 全面屏「劉海」的顯示。github

<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">

DNS 預讀取

DNS 預讀取是一項使瀏覽器主動去執行域名解析的功能,其範圍包括當前文檔內的全部連接,這可以減小用戶點擊連接時的延遲。web

<meta http-equiv="x-dns-prefetch-control" content="on"> <link rel="dns-prefetch" href="//www.google-analytics.com"> <link rel="dns-prefetch" href="//fonts.googleapis.com">

預加載

指示瀏覽器預先請求當前頁面所須要的關鍵性資源。api

<link rel="preload" href="/css/main.css" as="style"> <link rel="preload" href="/js/main.js" as="script">

預請求

指示瀏覽器預先請求用戶即將瀏覽頁面所須要的關鍵性資源。跨域

<link rel="prefetch" href="/img/css-sprite.png"> <link rel="prefetch" href="/fonts/icons.woff2">

渲染偏好

對於國內各類雙核瀏覽器,經過設置 renderer 頭要求它們使用 webkit 內核;對於 IE 瀏覽器,經過設置 IE=edge 要求它使用最新的版本;對於百度搜索強制轉碼的流氓作法,經過 no-transform 禁止其自動轉碼;指示瀏覽器對相似電話、郵箱或地址的內容不要自做聰明的瞎識別(移動端)。瀏覽器

<meta name="renderer" content="webkit"> <!-- 用在360中 --> <meta name="force-rendering" content="webkit"> <!-- 用在其它 --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- 針對 IE 瀏覽器 --> <meta http-equiv="Cache-Control" content="no-transform"> <!-- 針對百度搜索 --> <meta name="format-detection" content="telephone=no,email=no,adress=no">

文檔信息

HTML 文檔的一些元數據,包括:做者、描述、關鍵詞和生成工具;設置 robotsindex,follow 指示搜索引擎爬蟲該頁面須要進入索引,而且頁面內的全部連接都要繼續跟蹤;設置 referrerorigin-when-cross-origin 指示瀏覽器在進行跨域跳轉時,其 referrer 值將統一爲域名,而非具體的 URL 地址。markdown

<meta name="author" content="米老朱"> <meta name="description" content="米老朱的我的博客"> <meta name="keywords" content="米老朱,極客,博客,WEB,開發,產品設計"> <meta name="generator" content="Hugo 0.32"> <meta name="robots" content="index,follow"> <meta name="referrer" content="origin-when-cross-origin">

Icons

雖然說全部瀏覽器都還支持過期的 favicon.ico 格式,但在 HTML5 時代,咱們應該使用更好的 PNG icon with sizes 方案。同時爲了兼容老舊瀏覽器,咱們能夠將生成好的 favicon.ico 文件放在網站的根目錄下面,一般瀏覽器會自動請求並加載它,並不須要額外經過 link 標籤引入。

<meta name="theme-color" content="#db5945"> <!-- 主題顏色 --> <meta name="application-name" content="米老朱的博客"> <!-- 應用名稱 --> <meta name="apple-mobile-web-app-capable" content="yes"> <!-- 隱藏狀態欄 --> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <!-- 狀態欄顏色 --> <meta name="apple-mobile-web-app-title" content="米老朱的博客"> <!-- iOS 下的應用名稱 --> <meta name="msapplication-tooltip" content="米老朱的博客"> <!-- Hover 的提示信息 --> <meta name="msapplication-TileColor" content="#db5945"> <!-- 磁貼背景顏色 --> <meta name="msapplication-TileImage" content="/img/logo-144.png"> <!-- 磁貼圖標 --> <meta name="msapplication-config" content="/browserconfig.xml"> <!-- 磁貼配置文件 --> <link rel="icon" type="image/png" href="/img/logo-16.png" sizes="16x16"> <!-- Browser Favicon --> <link rel="icon" type="image/png" href="/img/logo-32.png" sizes="32x32"> <!-- Taskbar Shortcut --> <link rel="icon" type="image/png" href="/img/logo-96.png" sizes="96x96"> <!-- Desktop Shortcut --> <link rel="icon" type="image/png" href="/img/logo-128.png" sizes="128x128"> <!-- Chrome Web Store --> <link rel="icon" type="image/png" href="/img/logo-196.png" sizes="196x196"> <!-- Chrome for Android Home Screen --> <link rel="icon" type="image/png" href="/img/logo-228.png" sizes="228x228"> <!-- Opera Coast Icon --> <link rel="apple-touch-icon" href="/img/logo-120.png"> <!-- iPhone --> <link rel="apple-touch-icon" href="/img/logo-152.png" sizes="152x152"> <!-- iPad --> <link rel="apple-touch-icon" href="/img/logo-180.png" sizes="180x180"> <!-- iPhone Plus --> <link rel="apple-touch-icon" href="/img/logo-167.png" sizes="167x167"> <!-- iPad Pro --> <link rel="mask-icon" href="/img/logo.svg" color="green"> <!-- Safari Pinned Tab Icon -->

微軟爲了讓 Metro UI 更好看,引入了 browserconfig.xml 文件,主要用於定製網站固定磁鐵的圖標和背景顏色,其格式以下所示:

<?xml version="1.0" encoding="utf-8"?> <browserconfig> <msapplication> <tile> <square70x70logo src="/img/logo-70.png"/> <square150x150logo src="/img/logo-150.png"/> <wide310x150logo src="/img/logo-310x150.png"/> <square310x310logo src="/img/logo-310.png"/> <TileImage src="/img/logo-144.png"/> <TileColor>#db5945</TileColor> </tile> </msapplication> </browserconfig>

favicon.ico 其實是一個圖片容器,裏面至少應該包含 16x16,32x32,48x48 三個尺寸的 png 圖片,咱們能夠使用 ImageMagick 工具在本地直接生成(生成以前須要對 png 圖片進行壓縮以減少尺寸)。

$ convert favicon-16.png favicon-32.png favicon-64.png favicon.ico

注意:apple-mobile-web-app-status-bar-style 值默認狀態欄爲白色,可設置爲 black(黑色) 或者 black-translucent(灰色半透明);mask-icon 引入的 svg 文件必須只有一個圖層,而且 viewBox 屬性應該爲 「0 0 16 16」。

Twitter 卡片用於將網站內容以更加優雅漂亮的方式分享到 twitter.com 網站,從形式上說,分爲:summary, summary_large_image, app, player 四種形式,一般咱們的站點只須要 summary 這種形式。

<meta name="twitter:card" content="summary"> <meta name="twitter:site" content="@melaozhu"> <meta name="twitter:title" content="此處爲分享標題"> <meta name="twitter:description" content="此處爲分享描述"> <meta name="twitter:image" content="此處爲分享配圖">

配置上線後,你能夠經過這個 Card validator 工具檢查是否正確顯示。

Facebook Open Graph

Open Graph 是一套開放的網頁標註協議,經過 meta 標籤標註網頁的類型,主要由 Facebook 推進,已經成爲社交分享領域的事實標準。若是你但願明確告訴社交網絡或搜索引擎你的網頁類型,你應該添加這些 meta 標籤。

<meta property="og:type" content="article"> <meta property="og:title" content="此處爲分享標題"> <meta property="og:description" content="此處爲分享描述"> <meta property="og:image" content="此處爲分享配圖"> <meta property="og:url" content="此處爲分享的連接地址">

固定連接

對於一份文檔存在多個 URL 的狀況,經過 rel="canonical" 指定惟一的固定連接。

<link rel="canonical" href="https://laozhu.me/">

對於支持 RSS 訂閱的頁面,可針對 RSS 閱讀器提供可訂閱的源文件。

<link rel="alternative" href="/index.xml" title="米老朱的博客" type="application/atom+xml">

Polyfill

能夠專門爲老舊的 IE 瀏覽器引入 Polyfill 方案,舉個例子,爲了讓 IE6-IE8 瀏覽器可以使用 HTML5 標籤和 Media Query 特性,咱們須要引入 html5shivresponse.js 這兩個庫。

<!--[if lt IE 9]> <script src="//cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="//cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script> <![endif]-->

其餘的 Polyfill 方案寫法相似。

打印樣式表

對於可打印的頁面(如文章頁面),可提供針對打印機的樣式表,使得網站用戶能夠將文章打印下來閱讀。

<link rel="stylesheet" href="/css/print.css" media="print">

交替樣式表

定義交替樣式表的時候,指定其 title 屬性,以方便用戶在瀏覽器中根據名稱選擇替代樣式,交替樣式表多用於多主題切換的站點。

<link href="default.css" rel="stylesheet"> <link href="high-contrast.css" rel="alternate stylesheet" title="High contrast">

參考資料

  1. HTML Best Practices
  2. Favicon Cheatsheet
  3. DNS 預讀取
  4. Prefetching, preloading, prebrowsing
  5. Favicons, Touch Icons, Tile Icons, etc. Which Do You Need?
  6. Here’s Everything You Need to Know About Favicons in 2017
  7. Configuring Web Applications
  8. Creating Pinned Tab Icons
  9. 「The Notch」 and CSS
  10. Alternative style sheets
相關文章
相關標籤/搜索