时间:2021-07-01 10:21:17 帮助过:62人阅读
本文是根据HTML5 Boilerplate 官方文档所译,主要介绍了HTML5 Boilerplate的架构以及涉及到的相关知识。并且详细介绍了如何在基于HTML5 Boilerplate创建自己的项目。
基本目录结构
一个基本的 HTML5 Boilerplate 站点,最初的目录结构就像这样:
.
├── css
│ ├── main.css
│ └── normalize.css
├── doc
├── img
├── js
│ ├── main.js
│ ├── plugins.js
│ └── vendor
│ ├── jquery.min.js
│ └── modernizr.min.js
├── .editorconfig
├── .htaccess
├── 404.html
├── apple-touch-icon.png
├── browserconfig.xml
├── index.html
├── humans.txt
├── robots.txt
├── crossdomain.xml
├── favicon.ico
├── tile-wide.png
└── tile.png
下面是有关该目录的组成及使用方式的整体概述:
css
/css 文件夹保存项目中的所有CSS文件。文件夹中包含了一些用于初始化的 CSS,为开发者在构建项目前提供标准化的开发环境。
doc
/doc 文件夹保存 HTML5 Boilerplate 的所有开发文档。可以使用它作为开发者个人项目的基础文档。
js
/js 文件夹保存项目中的所有 js 文件。库、插件和自定义代码都可以放在这里,此外还包括了一些用于初始化的 js,以帮助开发者构建项目。
.htaccess
该文件默认为 Apache 的网络服务器配置信息。更多信息,请参考 Apache Server Configs repository。
如果网站托管的服务器不是 Apache,那么可以在 Server Configs项目中找到相关服务器的配置信息。
404.html
一个自定义的404页面,有益于开发者快速开始构建项目。
browserconfig.xml
该文件包含 IE11 动态瓷贴的设置信息。
更多信息,请参考MSDN。
.editorconfig
该文件的作用在于,帮助和激励开发者及其团队,在编辑器和 IDE 之的范。
index.html
该页面包含默认的 HTML 结构,建议开发者使用它作为页面的基础结构。如果开发者正在使用一个服务器端的模版引擎,那么可能需要在项目构建之初,将该页面结构整合入模版引擎。
如果开发者修改了目录结构,请确保同时更新了 CSS 和 JavaScript 的引用地址。
如果开发者使用了谷歌分析脚本(Google Analytics),请确保网页底部相关脚本的 Analytics ID 书写正确。
humans.txt
该文件记录网站、应用程序的开发团队及开发技术等信息。
robots.txt
该文件记录对搜索引擎屏蔽的页面。
crossdamin.xml
一个用作跨域请求的模板。
Icons
可以根据需要替换默认的 favicon.ico,tile.png,tile-wide.png 和 Apple Touch Icon。
更多信息,可以参考 Hans 的这篇文章——HTML5 Boilerplate Favicon and Apple Touch Icon PSD-Template。
HTML 解析
HTML5 Boilerplate 默认提供两个 html 页面:
index.html
404.html
index.html
no-js类
no-js 类可以让开发者依据 JavaScript 被启用(.js)或被禁止(.no-js)两种状态,更轻易准确地添加自定义样式。
使用这个技巧也有助于避免浏览器闪烁(FOUC)。
lang 属性
请认真考虑在 中添加 lang 属性,从而对页面内容所使用的语种加以说明,举例如下:
置顶
字符集声明():
该声明必须完整地包含在文档内容最开始的 1024 字节中。
该声明应该尽早出现(早于可能被攻击者利用的任何内容,比如
除
x-ua-compatible
IE 8/9/10 支持文档兼容模式——该模式会对文档解析和页面渲染产生影响。因此,即使网站的访问者使用了 IE 9 或更高版本的浏览器,IE 也有可能不使用最新的渲染引擎,而会使用 IE 5.5 渲染引擎解析你的页面。
x-ua-compatible 元标签的详细内容如下:
此外,可以使用 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 初始化了一些简单的设置,希望在多种使用情境下取得良好平衡。
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 服务,只需在页面底部将其放在其他脚本之前即可。
}
追踪 JavaScript 错误
在 ga 定义之后,添加如下函数:
(function(window){
var undefined,
link = function (href) { var a = window.document.createElement('a'); a.href = href; return a; };
window.onerror = function (message, file, line, column) {
var host = link(file).hostname; ga('send', { 'hitType': 'event', 'eventCategory': (host == window.location.hostname || host == undefined || host == '' ? '' : 'external ') + 'error', 'eventAction': message, 'eventLabel': (file + ' LINE: ' + line + (column ? ' COLUMN: ' + column : '')).trim(), 'nonInteraction': 1 });
};
}(window));
追踪页面滚动
在 ga 定义之后,添加如下函数:
$(function(){
var isDuplicateScrollEvent, scrollTimeStart = new Date, $window = $(window), $document = $(document), scrollPercent;$window.scroll(function() { scrollPercent = Math.round(100 * ($window.height() + $window.scrollTop())/$document.height()); if (scrollPercent > 90 && !isDuplicateScrollEvent) { //page scrolled to 90% isDuplicateScrollEvent = 1; ga('send', 'event', 'scroll', 'Window: ' + $window.height() + 'px; Document: ' + $document.height() + 'px; Time: ' + Math.round((new Date - scrollTimeStart )/1000,1) + 's' ); }});
});
Internet Explorer
在 IE 10 中提示用户切换到“桌面模式”
在 Metro 模式下,IE 10 并不支持插件,比如 Flash。如果你的网站需要使用插件,那么可以使用 x-ua-comptible 元标签,提醒用户切换到桌面模式。
下面是 HTML5 Boilerplate 中 x-ua-comptible 的默认值:
更多信息请参考 Microsoft's IEBlog post about prompting for plugin use in IE10 Metro Mode。
IE 9+ 固定网站
如果启用了固定功能,那么 IE 9 的用户就可以将应用程序添加到任务栏或者开始菜单。这一功能也带来了一系列的工具,方便用户对元素进行个性化配置。更多信息请参考 documentation on IE9 Pinned Sites。
为固定的网站命名
如果不使用这条标签,Windows 将会使用页面标题作为应用程序的标题。
为固定的网站添加提示
如你所知,这里讲的是一个提示工具。当用户将鼠标悬停在固定网站的图标上边时,就会出现一个预览窗口。
为固定的网站设置默认页面
如果当网站固定时需要制定一个特定的 URL(比如首页),那就在这里设置。一个好的想法是让固定网站发送特别编写的 URL,这样开发者就可以追踪到有多少用户使用了固定网站,就像下面这样:
自定义窗口大小
如果固定网站打开时需要使用确定的大小,那么可以在这里自定义尺寸。该功能只支持静态的像素尺寸,且最小为 800x600。
添加跳转列表
开发者可以给固定网站添加跳转列表,当鼠标点击右键时,就可以快速显示跳转列表了。每个列表项都指向特定的 URL,并拥有自己的图标(通常为 16x16 的图标)。开发者可以添加任意数量的列表项。
更多帮助信息和技巧,请参考 Microsoft's documentation on adapting WebKit-oriented apps for IE10。
搜索
为搜索引擎蜘蛛设置 sitemap
了解如何创建 sitemap。
对搜索引擎屏蔽页面
根据 FLickr 前社区经理 Heather Champ 的看法,如果你足够理智,那么就不应该允许搜索引擎检索 “联系” 和 “投诉” 页面。
提醒:不应该在页面中出现展示给搜索引擎的信息。
Firefox 和 IE 搜索插件
内置搜索功能的网站,可以考虑使用浏览器搜索插件提高性能。“搜索插件” 本质上就是一个 XML 文件,它定义了插件于浏览器的信息交互行为。How to make a browser search plugin。
其他参数
使用polyfills。
通过 microdata 使用 Microformats 优化搜索结果的准确性。
如果你正在构建一个网页应用,那么你可能会考虑在 iOS 5+ 中滚动时,通过-webkit-overflow-scrolling: touch 调用本地样式。
如果想要屏蔽 Chrome 的翻译提示,或在网页中的禁用 Google 翻译,那么可以使用 。如果只是在某一个部分禁用翻译,那么可以添加 class="notranslate"。
如果想在 iOS 中,禁用 Safari 对手机号的自动检测和格式化功能,那么可以使用 。
可以通过使用 implementing X-Robots-tag headers,避免开发阶段的网站被搜索引擎抓取。
当前的屏幕阅读器对 HTML5 的支持还不是很好,建议通过使用 accessifyhtml5.js 给 HTML5 元素添加 ARIA roles 增强无障碍使用体验。
订阅
RSS
需要一个 RSS 订阅?请看这里的教程。learn how to write an RSS feed from scratch。
Atom
Atom 和 RSS 非常类似,你可能会很中意它,那么看看 Atom 的文档吧。
Pingbacks
当其他网站链接到你的网站时,你的服务器可能会收到通知。该 href 属性需要包含你在 pingback 上的服务地址。
更多信息
High-level explanation
Step-by-step example case
PHP pingback service
社交网络
Facebook 图谱
当用户分享当前站点时,开发者可以设置其分享到 Facebook 或其他社交网络的信息内容。以下就是开发者需要的最基本信息。更多具体的内容类型,请参考 Facebook's built-in Open Graph content templates。如果想要使用 Facebook 支持的高级特性,可以参考Open Graph tutorial。
Twitter 卡贴
Twitter 卡贴提供了类似 Facebook 图谱的功能。实际上,当卡贴不能使用时,Twitter 也会使用类似图谱的功能。注意,对于这种方式,Twitter 要求开发者在每个基本域名上都激活卡贴功能。更多格式和应用处理方式,请参考 official Twitter Cards documentation。
对于移动端网页,添加 link rel="canonical" 标签指向相关的桌面端地址,比如 。
更多信息请参考:
https://developers.google.com/webmasters/smartphone-sites/details#separateurls
https://developers.google.com/webmasters/smartphone-sites/feature-phones
网页应用
当网页应用在 iOS 中被添加到桌面后,可以使用如下标签获取信息:
使用 apple-mobile-web-app-capable,可以减少网页应用对 Chrome 的依赖,并提供 IOS App 的视图支持。可以通过使用 apple-mobile-web-app-status-bar-style,控制默认视图的色彩模式。
使用 apple-mobile-web-app-title,可以为桌面图标重命名。该功能支持 iOS 6+。
更多信息请参考苹果官方文档。
Apple Touch Icons
Apple Touch Icons 相当于 iOS 设备的桌面图标。Apple Touch Icons 的主要尺寸如下:
57×57px – iPhone with @1x display and iPod Touch
72×72px – iPad and iPad mini with @1x display running iOS ≤ 6
76×76px – iPad and iPad mini with @1x display running iOS ≥ 7
114×114px – iPhone with @2x display running iOS ≤ 6
120×120px – iPhone with @2x and @3x display running iOS ≥ 7
144×144px – iPad and iPad mini with @2x display running iOS ≤ 6
152×152px – iPad and iPad mini with @2x display running iOS 7
180×180px – iPad and iPad mini with @2x display running iOS 8
显示尺寸含义:
@1x - non-Retina
@2x - Retina
@3x - Retina HD
更多有关 iOS 设备的显示信息,请参考 List of iOS devices display。
大多数情况下,可以使用 180×180px 大小的图标,命名为 apple-touch-icon.png 后包含在页面的
即可:
如果希望每个设备有不同的内容,那么可以添加多个 Apple Touch Icons。更多信息情参考 article on Touch Icons。
Apple Touch Startup Image
除此之外,可以给 iOS 上的网页应用添加启动界面。该功能需要使用 apple-touch-startup-image,并附加相关的图片链接。由于 iOS 应用于多种尺寸的屏幕下,所以有必要使用媒体查检测尺寸,然后再加载图片。这里是一个在 retina iPhone 的示例:
不过,该功能可能需要使用 JavaScript 检测启动界面的图片。Mobile Boilerplate 提供了一个有效地功能来解决这个问题,请参考helpers.js 的实现方法。
Chrome Mobile web apps
Chrome 移动端拥有一个专有的元标签,用来在桌面安装网页应用,该标签比苹果的属性属性标签更具有通用性。
同样适用于 touch icons:
其他
.gitignore
HTML5 Boilerplate 引入了一个基础性的、项目级的 .gitignore。主要用来让源代码忽略对项目中特定文件和目录的管理。在不同的开发环境使用不同的忽略列表,将会大有裨益。
特定系统和特定编辑器的文件应该使用 “global ignore” ,从而忽略系统中所有库对相关文件的依赖。
比如,在希望全局忽略的 HOME 目录,将如下内容放入 .gitignore 文件。
[core]
excludesfile = ~/.gitignore
更多信息请参考:
More on global ignores: https://help.github.com/articles/ignoring-files
Comprehensive set of ignores on GitHub: https://github.com/github/gitignore
.editorconfig
.editorconfig 文件用来激励和帮助开发者/开发团队,在不同的编辑器和 IDE 下,定义和维护一致性的代码风格。
默认情况下,.editorconfig 包含了一些基本属性,用来体现代码风格,但是开发者可以根据需求自定义相关属性。
为了让编辑器、IDE 更好的使用 .editorconfig 配置文件,开发者需要安装一个插件。
注意:如果你不需要使用 HTML5 Boilerplate 提供的服务器配置,我们强烈建议不要允许你服务器使用 .editorconfig 文件,因为该文件会屏蔽敏感信息。
更多信息请参考 EditorConfig project。
服务器配置
HTML5 Boilerplate 为 Apache HTTP 服务器配置了 .htaccess 文件。如果不是使用 Apache 服务器,建议下载 server configuration 并适配所用服务器。
Servers and Stacks
介绍 WEB 服务器和堆栈的内容就远远超过了本文档的范围,但这里有一些常用的资料:
Apache HTTP Server
LAMP (Linux, Apache, MySQL, and PHP). Other variants include MAMP, WAMP, or XAMPP.
LAPP uses PostgreSQL instead of MySQL
Nginx
LEMP is similar to the LAMP stack but uses Nginx
IIS
ASP.NET
MEAN (MongoDB, Express, AngularJS, Node.js)
.htaccess
.htaccess(超文本存取)文件就是Apache HTTP 服务器的配置文件。常用于:
Rewriting URLs
Controlling cache
Authentication
Server-side includes
Redirects
Gzipping
如果你使用过主流服务器的配置文件(通常称为 httpd.conf),那么你应该熟悉往 .htaccess 文件中添加逻辑处理。比如, 部分位于主要的配置文件中。因为 .htaccess 文件会拖慢 Apache,所以通常建议这么做。
为了启用本地的 Apache 模块,请参考这里。
.htaccess 主要用于:
允许跨源请求 web 字体
当浏览器请求图片时,使用跨域资源共享头
将 404.html 作为 404 错误文档
为 IE 用户提供更好的用户体验
将 UTF-8 作为 text/html 和 text/plain 的字符编码
启用 URLs 重写引擎
强制或移除 URL 开头的 www.
缺少默认文档时阻塞对目录的调用
隔离文件访问,防止敏感信息泄露
降低了 MIME 类型的安全风险
强制压缩
通知浏览器是否需要从服务器请求特定文件,或者是否需要从浏览器缓存获取特定文件
当使用 .htaccess 时,我们建议阅读一次所有的内部注释。其中有一些是可选的。
更多有关 .htaccess 文件的信息请参考这里。
注意,.htaccess 的源库在这里。
crossdomain.xml
跨域策略文件是一个 XML 文档,其内容来自 web 客户端(比如,Adobe Flash Player, Adobe Reader),可以允许处理来自多个域名的数据:
授权读取数据
允许客户端在跨域请求中导入自定义的头部信息
授权许可基本的套接字连接
注意:如果一个客户端从一个特定的源域名获取内容,然后该内容请求重定向其他域名,那么远程域名就需要使用跨域策略文件,从而获得源域名的授权,最终允许客户端继续处理相关事务。
更多信息请参考 cross-domain policy file specification。
robots.txt
robots.txt 文件用来告知搜索引擎网站中可以抓取的页面。
默认情况下,文件中包含下面两行信息:
User-agent: * - 以下规则适用于所有的搜索引擎
Disallow: - 网站中的所有页面都可以被抓取
如果想屏蔽某些页面,那么你需要在 Disallow 参数后面做出具体声明(比如: Disallow: /path)。如果你想屏蔽所有内容,只需 Disallow: /。
/robots.txt 并不是用来访问控制的,所以请不要这样使用。可以将其视为一个 “禁止通行” 标志,而不是一扇锁上的门。通过 robots.txt 文件屏蔽 URLs,即使未被抓取仍有可能被定位,而且 robots.txt 文件中的内容也可以被任何人访问到,这样就间接透漏了私有内容的位置。所以,如果想屏蔽访问私人信息,建议使用合理的验证机制。
关于 /robots.txt 文件的更多信息请参考:
robotstxt.org
How Google handles the robots.txt file
browserconfig.xml
用户在 Windows 8.1 启动界面固定的应用图标,可以通过 browserconfig.xml 文件进行个性化定制。在该文件中,可以自定义瓷贴颜色、图片,甚至是动态瓷贴。
默认情况下,该文件指向两个既有的瓷贴图片:
tile.png (558x558px): used for Small, Medium and Large tiles.如有必要该图片可以自动修改尺寸。
tile-wide.png (558x270px): user for Wide tiles.
注意,当收藏网站时,IE 11 将收藏夹中使用相同的图片。
有关 browserconfig.xml 文件的跟多信息,请参考 MSDN。
FAQ
为什么 jQuery 的链接没有加http?
这是因为使用了 protocol-relative URLs。
注意:如果你尝试直接在浏览器中预览本地网页,那么浏览器将无法加载资源,特别是使用 protocol-relative URLs,因为它会尝试从本地文件系统获取相关资源。建议使用本地的 HTTP 服务器,或者是允许在线预览网页的文件托管服务(比如Dropbox)来测试网页。
建立本地 HTTP 服务器可以使用多种短命令:
PHP 5.4.0+ 使用 php -S localhost:8080 命令从本地目录启动并运行。
Python 2.x 使用 python -m SimpleHTTPServer 命令从本地目录启动并运行。
Python 3.x 使用 python -m http.server 命令从本地目录启动并运行。
Ruby 1.9.2+ 使用 ruby -run -ehttpd . -p8080 命令从本地目录启动并运行。
Node.js 使用 static -p 8080 或 http-server -p 8080 命令安装和启动服务器。
为什么不从 Google CDN 自动加载最新版本的 jQuery?
首先,Google CDN 所指向的 jQuery 文件已不再更新,并且将锁定在1.11.1版本,以防止新版本变动引发的网页脚本失效。
其次,通常来说,更新版本应该是个慎重的决定!网页中不应该一直引用最新版本的原因如下:
可能与现有插件、代码不兼容
与固定引用某一版本的方式相比,一直引用最新版本将会减少本地缓存时间,这意味着用户无法受益于长周期缓存带来的便利。
为什么将 Google Analytics 代码置于网页底部?而 Google 则建议将其置于
将其置于
的主要优势是,在页面加载完成之前,即使用户离开当前网页,也可以获得页面浏览量(PV)。然而,将其置于页面底部则有助于改善整体性能。如何在 HTML5 Boilerplate 中整合 Bootstrap。
一个简单的方法是使用 Initializr,并创建自定义的构建环境——在其中同时包含 HTML5 Boilerplate 和 Bootstrap。
更多信息请参考文章: HTML5 Boilerplate 和 Bootstrap 的互相整合。
每当 HTML5 Boilerplate 释放出新版本,开发者是否必须更新网站?
完全没有必要!这就像是房子盖完之后,虽然需要时不时的修护一下,但通常没必要重新打地基。当然,如果想尝试新版本的变动,也是完全可以的,但最好正确权衡这么做的成本和收获。
哪里可以获取技术支持?
请使用 StackOverflow 寻求帮助。
本文根据HTML5 Boilerplate官方文档所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:https://github.com/h5bp/html5-boilerplate/blob/master/src/doc/html.md。