一:HTML5 Boilerplate是什么?解决了什么问题?css
对于第一次据说这我的,确定都有这个疑问把!在网上看了看,发现不少人都认为这个是和Bootstrap同样的东西,这真是大错特错了。html
实际上,HTML5 Boilerplate只是一个单纯的HTML模版。前端
什么?HTML模版?干吗用?jquery
这里不得不提全部前端开发都会遇到的问题,每次要从新弄一个页面的时候,大家都是怎么作的呢?那个doctype、html、head、body、meta标签,写的多心烦。或者从之前的项目中复制,或者抄一抄Bootstrap推荐的模版等等。可是在作这些事情的时候,有没有想过,本身的写法是不是最好的呢?或者说业界对这个有没有一个比较统一的推荐?那么,答案是有的。ajax
HTML5 Boilerplate就是解决了这么一个问题,它提供了一个十分完善的HTML模版,完善到全部的页面彷佛都应该遵照这个规则。apache
说的这么神乎其神,那么咱们仍是要一看究竟才行。从官网下载 而后,最核心的的是一个index.html文件,不大,咱们来看看它的源码api
<!DOCTYPE html> <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> <link rel="stylesheet" href="css/normalize.css"> <link rel="stylesheet" href="css/main.css"> <script src="js/vendor/modernizr-2.6.2.min.js"></script> </head> <body> <!--[if lt IE 7]> <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> <![endif]--> <!-- Add your site or application content here --> <p>Hello world! This is HTML5 Boilerplate.</p> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script> <script src="js/plugins.js"></script> <script src="js/main.js"></script> <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. --> <script> (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]= function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date; e=o.createElement(i);r=o.getElementsByTagName(i)[0]; e.src='//www.google-analytics.com/analytics.js'; r.parentNode.insertBefore(e,r)}(window,document,'script','ga')); ga('create','UA-XXXXX-X');ga('send','pageview'); </script> </body> </html>
这能够说就是HTML5 Boilerplate的所有了。大概看一下,确定会发现有些是和本身之前的写法同样的,有些又是没见过的写法,或者说本身也是这么写的可是历来没想过为何。下面,就先“解剖”下这个HTML文件把。跨域
二:浅析index.html浏览器
首先,文档类型使用了HTML5文档声明,比起HTML4的那一大长串,这个明显简单明了。并且,兼容所有浏览器。由于IE在设计的时候,对于这种写法也会进入标准模式。因此,之后的文档声明都这样写,省心。服务器
而后,是这么一大段
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
这段代码很经典。
首先,咱们先看这些条件判断,意思分别是低于IE7,等于IE7,等于IE8,高于IE8。
而后条件注释里面,就有相应的类名,好比在 lt IE 7中,html标签上便会有 lt-ie9 lt-ie8 lt-ie7这3个类,意思分别是低于ie七、八、9 。有什么用呢?其实最大的左右就是在写CSS HACK的时候,由于这样写,就能够不用CSS HACK了,好比若是是ie6,那么html标签上就会有 lt-ie7这个类,直接用CSS优先级覆盖以前的设置便可。
而后特殊的地方应该就在最后一句了,最后一句的意思是全部大于ie8和非ie浏览器都使用<html class="no-js">这个html头。仔细看会发现里面加了几个残缺的注释标签。有什么用呢,对于大于ie8的ie浏览器,这几个标签彻底忽略。对于非ie浏览器。因为不识别[if gt IE 8],而后和后面的注释一块儿,会发现整个这部分都被注释了。这样,就实现了最完美的浏览器识别了。
而后还有一个no-js类。这个主要是会和后面的modernizr.js一块儿使用。由于modernizr会在浏览器启用的js的时候,把no-js换成js。简单来讲这个类能够用来判断浏览器是否启用了js。
接着,就是
<meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1">
首先,先设置文档编码,记住这个放最前面(特别注意别放title后面),以避免后面代码出现乱码。
接下来即是设置IE使用最新版原本渲染
而后是描述,便于SEO。viewport指定移动端不对网页进行缩放。
这些个元标签基本都是一个网页必需要有的,因此你们能够检查下本身的网站是否漏了什么。
以后,引入了normalize、main两个css。modernizr这个js。关于这3个文件,后面再详细说明。
进入主体部分。
首先,看到这么一段
<!--[if lt IE 7]> <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> <![endif]-->
对于使用低于IE7版本的用户,给出升级提示,固然,咱们能够选择删除这一段或者换成一个中文提示
而后呢,即是这一段脚本
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script> <script src="js/plugins.js"></script> <script src="js/main.js"></script>
首先,经过CDN引入jquery。这里用的是谷歌的CDN。若是这段照抄,那么,,嘿嘿,网站确定杯具了。因此这里换成国内的jqueryCDN把,好比七牛的。
而后,判断jQuery对象是否存在。由于CDN有可能挂了。若是jQuery对象不存在,那么咱们就能够用本身服务器的jquery把。
而后引入了plugins.js还有main.js。main.js是空的,plugins.js后面详细说明。
最后一段代码就是引入google统计了。这里,根据本身的须要换成百度统计或者是别的把。就不详细说了。
至此,HTML5 Boilerplate的最关键的模版HTML算是讲完了。之后要新弄一个页面,就照着这个copy把。
不过,HTML5 Boilerplate提供的还不止这些,下面讲讲单个文件的做用把。
三:静态文件
打开项目代码,能够看到有挺多的文件的,有些是说明文件,好比doc/路径下的,就不讲了,有些是值得讲讲的,好比css/ js/下的部分文件。挑几个有趣的说说把。
首先 css目录下有main和normalize
normalize也许你们都听过,就是一个浏览器重置,里面的每一条css都是进过千千万万的人精挑细选的,基本上这个重置属于公认的了。
里面的具体每条规则就不细讲了,能够百度查看这个项目的文档,或者直接看注释也ok。
main就是改项目对normalize的补充,能够看到提供了一些基础类名方便你们,好比图片置换,清除浮动等等。
js提供了个plugins.js
代码以下
// Avoid `console` errors in browsers that lack a console. (function() { var method; var noop = function () {}; var methods = [ 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn' ]; var length = methods.length; var console = (window.console = window.console || {}); while (length--) { method = methods[length]; // Only stub undefined methods. if (!console[method]) { console[method] = noop; } } }());
比较简单,就不说明了。解决的主要问题就是用console调试的时候IE报错。这个问题我想你们都碰见过,调试代码忘记删除,线上IE报错,致使js没法继续执行。加了这个,就能够避免掉这问题了。
还有就是modernizr了,这是个强大的浏览器功能检查js,具体使用能够在官网上看看教程,这里就不说了。
而后,还提供了一些个文件,好比apache的配置htaccess、 404页面、flash跨域须要的文件crossdomain.xml、爬虫过滤文件robots.txt等,你们按需使用。
至此,HTML5 Boilerplate算是所有理完了,很简单的一个项目,可是很实用,也很漂亮。能够做为开发标配。