251 lines
11 KiB
Markdown
251 lines
11 KiB
Markdown
[HTML5 Boilerplate homepage](https://html5boilerplate.com/) | [Documentation
|
||
table of contents](TOC.md)
|
||
|
||
# The HTML
|
||
|
||
By default, HTML5 Boilerplate provides two `html` pages:
|
||
|
||
* [`index.html`](#indexhtml) - a default HTML skeleton that should form the
|
||
basis of all pages on your website
|
||
* [`404.html`](#404html) - a placeholder 404 error page
|
||
|
||
|
||
## `index.html`
|
||
|
||
|
||
### The `no-js` Class
|
||
|
||
The `no-js` class is provided in order to allow you to more easily and
|
||
explicitly add custom styles based on whether JavaScript is disabled
|
||
(`.no-js`) or enabled (`.js`). Using this technique also helps [avoid the
|
||
FOUC](https://www.paulirish.com/2009/avoiding-the-fouc-v3/).
|
||
|
||
|
||
## Language Attribute
|
||
|
||
Please consider specifying the language of your content by adding a [value](http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry) to the `lang`
|
||
attribute in the `<html>` as in this example:
|
||
|
||
```html
|
||
<html class="no-js" lang="en">
|
||
```
|
||
|
||
### The order of the `<title>` and `<meta>` tags
|
||
|
||
The order in which the `<title>` and the `<meta>` tags are specified is
|
||
important because:
|
||
|
||
1) the charset declaration (`<meta charset="utf-8">`):
|
||
|
||
* must be included completely within the [first 1024 bytes of the
|
||
document](https://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#charset)
|
||
|
||
* should be specified as early as possible (before any content that could
|
||
be controlled by an attacker, such as a `<title>` element) in order to
|
||
avoid a potential [encoding-related security
|
||
issue](https://code.google.com/p/doctype-mirror/wiki/ArticleUtf7) in
|
||
Internet Explorer
|
||
|
||
2) the meta tag for compatibility mode
|
||
(`<meta http-equiv="x-ua-compatible" content="ie=edge">`):
|
||
|
||
* [needs to be included before all other tags except for the `<title>` and
|
||
the other `<meta>`
|
||
tags](https://msdn.microsoft.com/en-us/library/cc288325.aspx)
|
||
|
||
|
||
### `x-ua-compatible`
|
||
|
||
Internet Explorer 8/9/10 support [document compatibility
|
||
modes](https://msdn.microsoft.com/en-us/library/cc288325.aspx) that affect the
|
||
way webpages are interpreted and displayed. Because of this, even if your site's
|
||
visitor is using, let's say, Internet Explorer 9, it's possible that IE will not
|
||
use the latest rendering engine, and instead, decide to render your page using
|
||
the Internet Explorer 5.5 rendering engine.
|
||
|
||
Specifying the `x-ua-compatible` meta tag:
|
||
|
||
```html
|
||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||
```
|
||
|
||
or sending the page with the following HTTP response header
|
||
|
||
```
|
||
X-UA-Compatible: IE=edge
|
||
```
|
||
|
||
will force Internet Explorer 8/9/10 to render the webpage in the highest
|
||
available mode in [the various cases when it may
|
||
not](https://hsivonen.fi/doctype/#ie8), and therefore, ensure that anyone
|
||
browsing your site is treated to the best possible user experience that
|
||
browser can offer.
|
||
|
||
If possible, we recommend that you remove the `meta` tag and send only the
|
||
HTTP response header as the `meta` tag will not always work if your site is
|
||
served on a non-standard port, as Internet Explorer's preference option
|
||
`Display intranet sites in Compatibility View` is checked by default.
|
||
|
||
If you are using Apache as your webserver, including the
|
||
[`.htaccess`](https://github.com/h5bp/server-configs-apache) file takes care of
|
||
the HTTP header. If you are using a different server, check out our [other
|
||
server config](https://github.com/h5bp/server-configs).
|
||
|
||
Starting with Internet Explorer 11, [document modes are
|
||
deprecated](https://msdn.microsoft.com/library/bg182625.aspx#docmode).
|
||
If your business still relies on older web apps and services that were
|
||
designed for older versions of Internet Explorer, you might want to consider
|
||
enabling [Enterprise Mode](https://blogs.msdn.microsoft.com/ie/2014/04/02/stay-up-to-date-with-enterprise-mode-for-internet-explorer-11/) throughout your company.
|
||
|
||
|
||
## Meta Description
|
||
|
||
The `description` meta tag provides a short description of the page.
|
||
In some situations this description is used as a part of the snippet
|
||
shown in the search results.
|
||
|
||
```html
|
||
<meta name="description" content="This is a description">
|
||
```
|
||
|
||
|
||
## Mobile Viewport
|
||
|
||
There are a few different options that you can use with the [`viewport` meta
|
||
tag](https://docs.google.com/present/view?id=dkx3qtm_22dxsrgcf4 "Viewport and
|
||
Media Queries - The Complete Idiot's Guide"). You can find out more in [the
|
||
Apple developer docs](https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html).
|
||
HTML5 Boilerplate comes with a simple setup that strikes a good balance for general use cases.
|
||
|
||
```html
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
```
|
||
|
||
## Web App Manifest
|
||
HTML5 Boilerplate includes a simple web app manifest file.
|
||
|
||
The web app manifest is a simple JSON file that allows you to control how your
|
||
app appears on a device's home screen, what it looks like when it launches
|
||
in that context and what happens when it is launched. This allows for much greater
|
||
control over the UI of a saved site or web app on a mobile device.
|
||
|
||
It's linked to from the HTML as follows:
|
||
|
||
```html
|
||
<link rel="manifest" href="site.webmanifest">
|
||
```
|
||
Our [site.webmanifest](https://github.com/h5bp/html5-boilerplate/blob/master/src/site.webmanifest) contains a very skeletal "app" definition, just to show the basic usage.
|
||
You should fill this file out with [more information about your site or application](https://developer.mozilla.org/en-US/docs/Web/Manifest)
|
||
|
||
## Favicons and Touch Icon
|
||
|
||
The shortcut icons should be put in the root directory of your site. `favicon.ico`
|
||
is automatically picked up by browsers if it's placed in the root. HTML5
|
||
Boilerplate comes with a default set of icons (include favicon and one Apple
|
||
Touch Icon) that you can use as a baseline to create your own.
|
||
|
||
Please refer to the more detailed description in the [Extend section](extend.md)
|
||
of these docs.
|
||
|
||
## The Content Area
|
||
|
||
The central part of the boilerplate template is pretty much empty. This is
|
||
intentional, in order to make the boilerplate suitable for both web page and
|
||
web app development.
|
||
|
||
### Browser Upgrade Prompt
|
||
|
||
The main content area of the boilerplate includes a prompt to install an up to
|
||
date browser for users of IE 8 and lower. If you intended to support IE 8, then you
|
||
should remove the snippet of code.
|
||
|
||
## Modernizr
|
||
|
||
HTML5 Boilerplate uses a custom build of Modernizr.
|
||
|
||
[Modernizr](https://modernizr.com/) is a JavaScript library which adds classes to
|
||
the `html` element based on the results of feature test and which ensures that
|
||
all browsers can make use of HTML5 elements (as it includes the HTML5 Shiv).
|
||
This allows you to target parts of your CSS and JavaScript based on the
|
||
features supported by a browser.
|
||
|
||
Starting with version 3 Modernizr can be customized using the [modernizr-config.json](https://github.com/h5bp/html5-boilerplate/blob/master/modernizr-config.json) and the
|
||
[Modernizr command line utility](https://www.npmjs.com/package/modernizr-cli).
|
||
|
||
## What About Polyfills?
|
||
|
||
If you need to include [polyfills](https://remysharp.com/2010/10/08/what-is-a-polyfill)
|
||
in your project, you must make sure those load before any other JavaScript. If you're
|
||
using some polyfill CDN service, like [cdn.polyfill.io](https://cdn.polyfill.io/),
|
||
just put it before the other scripts in the bottom of the page:
|
||
|
||
```html
|
||
<script src="js/vendor/modernizr-3.5.0.min.js"></script>
|
||
<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
|
||
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
|
||
<script>window.jQuery || document.write('<script src="js/vendor/jquery-3.2.1.min.js"><\/script>')</script>
|
||
<script src="js/plugins.js"></script>
|
||
<script src="js/main.js"></script>
|
||
</body>
|
||
```
|
||
|
||
If you like to just include the polyfills yourself, you could include them in
|
||
`js/plugins.js`. When you have a bunch of polyfills to load in, you could
|
||
also create a `polyfills.js` file in the `js/vendor` directory or include the files
|
||
individually and combine them using a build tool. Always ensure that the polyfills
|
||
are all loaded before any other Javascript.
|
||
|
||
There are some misconceptions about Modernizr and polyfills. It's important
|
||
to understand that Modernizr just handles feature checking, not polyfilling
|
||
itself. The only thing Modernizr does regarding polyfills is that the team
|
||
maintains [a huge list of cross Browser polyfills](https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills).
|
||
|
||
### jQuery CDN for jQuery
|
||
|
||
The jQuery CDN version of the jQuery JavaScript library is referenced towards
|
||
the bottom of the page. A local fallback of jQuery is included for rare instances
|
||
when the CDN version might not be available, and to facilitate offline
|
||
development.
|
||
|
||
The jQuery CDN version was chosen over other potential candidates
|
||
([like Google's Hosted Libraries](https://developers.google.com/speed/libraries/))
|
||
because it's fast ([comparable or faster than Google by some
|
||
measures](https://www.cdnperf.com/#jsdelivr,cdnjs,google,yandex,microsoft,jquery,bootstrapcdn/https/90))
|
||
and, (unlike Google's CDN) is available to China's hundreds of millions of internet users.
|
||
For many years we [chose](https://github.com/h5bp/html5-boilerplate/issues/1191)
|
||
the Google Hosted version over the jQuery CDN because it was available
|
||
over HTTPS (the jQuery CDN was not,) and it offered a better chance of
|
||
hitting the cache lottery owing to the popularity of the Google CDN.
|
||
The first issue is no longer valid and the second is far outweighed by
|
||
being able to serve jQuery to Chinese users.
|
||
|
||
While the jQuery CDN is a strong default solution your site or application may
|
||
require a different configuration. Testing your site with services like
|
||
[WebPageTest](https://www.webpagetest.org/) and browser tools like
|
||
[PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/) will help you examine the real
|
||
world performance of your site and can show where you can optimize your specific
|
||
site or application.
|
||
|
||
### Google Universal Analytics Tracking Code
|
||
|
||
Finally, an optimized version of the Google Universal Analytics tracking code is
|
||
included. Google recommends that this script be placed at the top of the page.
|
||
Factors to consider: if you place this script at the top of the page, you’ll
|
||
be able to count users who don’t fully load the page, and you’ll incur the max
|
||
number of simultaneous connections of the browser.
|
||
|
||
Further information:
|
||
|
||
* [Optimizing the Google Universal Analytics
|
||
Snippet](https://mathiasbynens.be/notes/async-analytics-snippet#universal-analytics)
|
||
* [Introduction to
|
||
Analytics.js](https://developers.google.com/analytics/devguides/collection/analyticsjs/)
|
||
* [Google Analytics Demos & Tools](https://ga-dev-tools.appspot.com/)
|
||
|
||
**N.B.** The Google Universal Analytics snippet is included by default mainly
|
||
because Google Analytics is [currently one of the most popular tracking
|
||
solutions](https://trends.builtwith.com/analytics/Google-Analytics) out there.
|
||
However, its usage isn't set in stone, and you SHOULD consider exploring the
|
||
[alternatives](https://en.wikipedia.org/wiki/List_of_web_analytics_software)
|
||
and use whatever suits your needs best!
|