Blame view

doc/html.md 9.92 KB
87e21225   Andy   new webportal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
  [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 the `lang`
  attribute to `<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/en-us/library/ie/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](http://blogs.msdn.com/b/ie/archive/2014/04/02/stay-up-to-date-with-enterprise-mode-for-internet-explorer-11.aspx) throughout your company.
  
  
  ## 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">
  ```
  
  ## Favicons and Touch Icon
  
  The shortcut icons should be put in the root directory of your site. 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.
  
  ## Modernizr
  
  HTML5 Boilerplate uses a custom build of Modernizr.
  
  [Modernizr](http://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.
  
  In general, in order to keep page load times to a minimum, it's best to call
  any JavaScript at the end of the page because if a script is slow to load
  from an external server it may cause the whole page to hang. That said, the
  Modernizr script *needs* to run *before* the browser begins rendering the page,
  so that browsers lacking support for some of the new HTML5 elements are able to
  handle them properly. Therefore the Modernizr script is the only JavaScript
  file synchronously loaded at the top of the document.
  
  ## 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="https://cdn.polyfill.io/v1/polyfill.min.js"></script>
      <script src="https://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>
  </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. Also using
  this technique, make sure 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).
  
  ## 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 6/7. If you intended to support IE 6/7, then you
  should remove the snippet of code.
  
  ### 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/) or
  [YSlow](https://developer.yahoo.com/yslow/) 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!