HTML 解析
HTML5 Boilerplate 默认提供两个 html 页面:
- index.html
- 404.html
index.html
no-js
类
no-js
类可以让开发者依据 JavaScript 被启用(.js
)或被禁止(.no-js
)两种状态,更轻易准确地添加自定义样式。
使用这个技巧也有助于避免浏览器闪烁(FOUC)。
lang
属性
请认真考虑在 <html>
中添加 lang
属性,从而对页面内容所使用的语种加以说明,举例如下:
<html class="no-js" lang="en">
<title>
和 <meta>
标签的顺序
置顶 <title>
和 <meta>
标签的顺序意义重大,原因如下:
字符集声明(<meta charset="utf-8">
):
- 该声明必须完整地包含在文档内容最开始的 1024 字节中。
- 该声明应该尽早出现(早于可能被攻击者利用的任何内容,比如
<title>
元素),以避免 IE 潜在的编码安全问题。
兼容模式的元标签(<meta http-equiv="x-ua-compatible" content="ie=edge">
):
除<title>
和其他 <meta>
标签外,该标签必须在其他标签之前声明。
x-ua-compatible
IE 8/9/10 支持文档兼容模式——该模式会对文档解析和页面渲染产生影响。因此,即使网站的访问者使用了 IE 9 或更高版本的浏览器,IE 也有可能不使用最新的渲染引擎,而会使用 IE 5.5 渲染引擎解析你的页面。
x-ua-compatible
元标签的详细内容如下:
<meta http-equiv="x-ua-comptible" content="ie=edge">
此外,可以使用 HTTP 响应头信息 x-ua-comptible: ie=edge
来发送网页数据。这种方式将强制 IE 8/9/10 使用最新的可用模式来渲染页面,即使某些情况下并不适合使用该模式。因此,要确保浏览该网站的所有浏览器,都尽可能提供最佳的用户体验。
如有可能,我们建议移除 meta
标签,而只发送 HTTP 响应头信息。这么做的原因是,如果你的网站运行在非标准的端口上, IE 默认会 “在兼容性视图下显示内部网站”,而此时 meta
标签就不会起作用了。
如果你正在使用 Apache 作为网络服务器,那么可以使用 .htaccess
文件来配置 HTTP 响应头信息。如果是其他网络服务器,可以点击这里查看其他服务器配置信息。
从 IE 11 开始,文档模式已经被弃用了。如果你的业务仍然依赖于陈旧的网页应用,或者你的业务就是为老版本 IE 设计的,那么可以考虑在全公司使用 企业版模式(Enterprise Mode)。
移动端视图
使用 viewport
元标签时有些许不同。更多信息详见苹果开发者文档。HTML5 Boilerplate 初始化了一些简单的设置,希望在多种使用情境下取得良好平衡。
<meta name="viewport" content="width=device-width, initial-scale=1">
Favicons 和 Touch Icon
整站的快捷方式图标应该存放在根目录。HTML5 Boilerplate 默认提供了一组图标(包括 favicon 和 Apple Touch Icon),为开发者提供设计参考。
Modernizr
HTML5 Boilerplate 使用了一份自定义的 Modernizr。众所周知,Modernizr 是一个 JavaScript 库,作用是确保所有浏览器都可以使用 HTML 5 元素(它包含了 HTML 5 shiv),同时还会根据功能检测的结果为 html
元素添加不同的类名。便于开发者明确某个浏览器所支持的 CSS 和 JavaScript 特性。
通常来说,为了最大程度地减少页面加载时间,最好的方式是在页面底部调用 JavaScript,以此避免加载外部脚本的过程阻塞整个网页的渲染和解析进度。但是,Modernizr 脚本应该在浏览器渲染页面前就加载执行,这样才能让浏览器正确处理尚未支持的 HTML5 元素。因此,Modernizr 脚本应该是唯一可以在文档头部加载的 JavaScript 脚本。
腻子脚本
如果你需要在项目中加载 腻子脚本(polyfills) ,那么你必须确保腻子脚本在其他 JavaScript 之前加载。如果你正在使用类似cdn.polyfill.io的 ployfill CDN 服务,只需在页面底部将其放在其他脚本之前即可。
<script src="//cdn.polyfill.io/v1/polyfill.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.11.2.min.js"><\/script>')</script>
<script src="js/plugins.js"></script>
<script src="js/main.js"></script>
如果只是想方便自己使用腻子脚本,可以将它们包含到 js/plugins.js
中。当你有了一堆腻子脚本需要加载时,可以在 js/vendor
文件夹创建一个 polyfills.js
文件。当然使用这个技巧也要注意,确保腻子脚本在其他 JavaScript 脚本前完全加载。
有些人对于 Modernizr 和腻子脚本的认知存在一些误区。正确理解 Modernizr 很重要:它只进行功能检测而不执行功能修复。Modernizr 唯一关注的修复工作,是有关跨浏览器方面腻子脚本的冗长列表。
内容区
HTML5 Boilerplate 模版的内容基本是空的。这么做是有意而为的,以方便 Boilerplate 模版同时适配网页(web page)和网页应用(web app)的开发。
浏览器升级提示
Boilerplate 的内容区包含了一条提示,建议 IE 6/7 的用户安装最新版本浏览器。如果你打算支持 IE 6/7,那么你需要移除相关代码。
由 Google CDN 分发的 jQuery
Google CDN 提供的 jQuery ,使用 protocol-independent 路径放置在了页面底部。此外还设置了一个本地的 jQuery 版本,从而在 CDN 版本不可用或启用离线版本的时候调用。
Google CDN 的版本之所以能从众多的可选版本(比如 jQuery CDN)脱颖而出,一方面是因为它响应速度快,另一方则是因为它具有最佳的穿透力(获取的成功率),这有助于提高将库文件传输到用户浏览器缓存的成功率。
虽然 Google CDN 是模版中开发网页和应用默认的分发网络,但你可能还需要做进一步的配置。你可以使用类似 WebPageTest 的服务和类似 PageSpeed Insights 或 YSlow 的浏览器工具测试网站,这有助于帮你测试网站的实际表现,并且指出特定网页或应用有待优化的地方。
谷歌分析代码
最后,是一段谷歌分析代码。谷歌建议将该脚本置于文档头部。其考虑如下:如果将该脚本置于网页头部,那么即使页面未完全加载,也可以统计用户访问量,并且可以激发浏览器的最大并发连接数。
更多信息请参考:
注意:之所以默认包含谷歌分析代码,是因为谷歌分析是当前最流行的追踪解决方案之一。然而,它的用法并不是一成不变的,你应该查看可替代方案,以选择最适合自己的。