HTML5规范~

http://codeguide.bootcss.com/
 

规范的唯一判定方式是:保证正确性的同时,让人一看就是一个人写的~一致性。

 

HTML5:

展开说几点:

1. HTML5 DOCTYPE

<!DOCTYPE html>
为每个 HTML 页面的第一行添加标准模式(standard mode)的声明,这样能够确保在每个浏览器中拥有一致的展现。

 

2. 语言属性

强烈建议为 html 根元素指定 lang 属性,从而为文档设置正确的语言。这将有助于语音合成工具确定其所应该采用的发音有助于翻译工具确定其翻译时所应遵守的规则等等。

 

1 <html lang="zh-CN">
2   <!-- ... -->
3 </html>
View Code

 

3. IE兼容模式

IE 支持通过特定的 <meta> 标签来确定绘制当前页面所应该采用的 IE 版本。除非有强烈的特殊需求,否则最好是设置为 edge mode,从而通知 IE 采用其所支持的最新的模式。

 

1 <meta http-equiv="X-UA-Compatible" content="IE=Edge">

更多资料


从IE8 出现文档兼容性。

 

文档兼容性是对 Microsoft Internet Explorer 6 中引入的兼容性模式的扩展,使您可以选择 Internet Explorer 用于显示网页的特定呈现模式。——微软的官方文档。

 

 

浏览器模式(browser mode)和文档模式(document mode)。这两个模式的引入,让我们在IE浏览器上能够简单的处理兼容性问题,当然,其实也并不简单,先看看这两个概念的定义:

  浏览器模式(browser mode):用于切换IE针对该网页的默认文档模式、对不同版本浏览器的条件备注解析、发送给网站服务器的用户代理(User-Agent)字符串的值。网 站可以根据浏览器返回的不同用户代理字符串判断浏览器的版本和安装的功能,这样就可以向不同的浏览器返回不同的页面内容。

  默认情况下,IE8的浏览器模式为IE8。用户可以通过单击地址栏旁边的兼容性视图按钮来手动切换到不同的浏览器模式。在IE8中,IE8兼容性视图会以IE7文档模式来显示网页,同时会向服务器发送IE7的用户代理字符串。

  文档模式(document mode):用于指定IE的页面排版引擎(Trident)以哪个版本的方式来解析并渲染网页代码。切换文档模式会导致网页被刷新,但不会更改用户代理字 符串中的版本号,也不会从服务器重新下载网页。切换浏览器模式的同时,浏览器也会自动切换到相应的文档模式。

  简而言之:浏览器模式的改变,能够改变请求中User Agent的值,让服务器获取后,能够按照UA的值进行对应处理(如果服务器上有这个处理功能)。而文档模式的改变只反映在本地的浏览器解析HTML上, 对客户端显示会有影响,而对服务器透明。同时,修改浏览器模式会影响文档模式,反之却不成立。

  使用文档兼容性的方法比较容易,就是在我们要反馈给客户端的HTML代码中的head中添加一个meta元素,用来描述当前的文档需要使用何种浏览器版本来解释当前文档。
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >

 

 

 举几个例子:

IE=edge 这个设置是让IE使用当前的最高版本进行文档的解析,官方文档指明,edge模式仅适用在测试环境,不建议在生产环境中使用
IE=7 使用标准IE7来处理
IE=EmulateIE7 模拟IE7来处理,遵循 <!DOCTYPE> 指令,如果文档有当前有一个合法的<!DOCTYPE>,就使用IE7模式,否者使用Quirks模式(Internet Explorer 5 Quirks),对于大部分网站来说,这是首选的兼容性模式

 

 

 

X-UA-Compatible不仅可以用meta元素放在页面内,也可以在服务器上进行配置,比如在IIS上配置默认的Header,或者在使 用.NET中配置web.config文件,让服务器端配置上默认的标头,这样系统就有默认的标头来指定全局的文档模式。因为单个页面的文档模式设置会覆 盖默认的文档模式,因此,在某个需要特殊的文档模式展示的页面可以在进行单独配置meta元素即可。

 

 

4. 字符编码

 

通过明确声明字符编码,能够确保浏览器快速并容易的判断页面内容的渲染方式。这样做的好处是,可以避免在 HTML 中使用字符实体标记(character entity),从而全部与文档编码一致(一般采用 UTF-8 编码)。
 

 

<meta charset="UTF-8">

 

5. 引入js和css

 

根据 HTML5 规范,在引入 CSS 和 JavaScript 文件时一般不需要指定 type 属性,因为 text/csstext/javascript 分别是它们的默认值。

 

6. 实用性

 

尽量遵循 HTML 标准和语义,但是不要以牺牲实用性为代价。任何时候都要尽量使用最少的标签并保持最小的复杂度。

7. 布尔型

 

布尔型属性可以在声明时不赋值。XHTML 规范要求为其赋值,但是 HTML5 规范不需要。

 

 

三种方式都表示checked&&disabled
<label><input type=checkbox checked name=cheese disabled> Cheese</label>
<label><input type=checkbox checked=checked name=cheese disabled=disabled> Cheese</label>
<label><input type='checkbox' checked name=cheese disabled=""> Cheese</label>

 

 

 

8.减少标签数量:

 

编写 HTML 代码时,尽量避免多余的父元素。很多时候,这需要迭代和重构来实现。

 

 

 

<!-- Not so great -->
<span class="avatar">
  <img src="...">
</span>

<!-- Better -->
<img class="avatar" src="...">

 

 


CSS:

1. 声明顺序

 

相关的属性声明应当归为一组,并按照下面的顺序排列:

  1. Positioning
  2. Box model
  3. Typographic
  4. Visual

由于定位(positioning)可以从正常的文档流中移除元素,并且还能覆盖盒模型(box model)相关的样式,因此排在首位。盒模型排在第二位,因为它决定了组件的尺寸和位置。

其他属性只是影响组件的内部(inside)或者是不影响前两组属性,因此排在后面。

 

 

 

 1 .declaration-order {
 2   /* Positioning */
 3   position: absolute;
 4   top: 0;
 5   right: 0;
 6   bottom: 0;
 7   left: 0;
 8   z-index: 100;
 9 
10   /* Box-model */
11   display: block;
12   float: right;
13   width: 100px;
14   height: 100px;
15 
16   /* Typography */
17   font: normal 13px "Helvetica Neue", sans-serif;
18   line-height: 1.5;
19   color: #333;
20   text-align: center;
21 
22   /* Visual */
23   background-color: #f5f5f5;
24   border: 1px solid #e5e5e5;
25   border-radius: 3px;
26 
27   /* Misc */
28   opacity: 1;
29 }
View Code

 

 

 

2. 不要使用@import

 

<link> 标签相比,@import 指令要慢很多,不光增加了额外的请求次数,还会导致不可预料的问题。替代办法有以下几种:

  • 使用多个 <link> 元素
  • 通过 Sass 或 Less 类似的 CSS 预处理器将多个 CSS 文件编译为一个文件
  • 通过 Rails、Jekyll 或其他系统中提供过 CSS 文件合并功能
3. 媒体查询

 

 

将媒体查询放在尽可能相关规则的附近。不要将他们打包放在一个单一样式文件中或者放在文档底部。如果你把他们分开了,将来只会被大家遗忘。

 

 

 

 

1 .element { ... }
2 .element-avatar { ... }
3 .element-selected { ... }
4 
5 @media (min-width: 480px) {
6   .element { ...}
7   .element-avatar { ... }
8   .element-selected { ... }
9 }
View Code

 

 

 

4. 带前缀的属性

 

当使用特定厂商的带有前缀的属性时,通过缩进的方式,让每个属性的值在垂直方向对齐,这样便于多行编辑。

 

 

 

1 /* Prefixed properties */
2 .selector {
3   -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15);
4           box-shadow: 0 1px 2px rgba(0,0,0,.15);
5 }
View Code

 

 

 


5. 单行规则声明

 

对于只包含一条声明的样式,为了易读性和便于快速编辑,建议将语句放在同一行。对于带有多条声明的样式,还是应当将声明分为多行。

 

方便定位错误。

 1 /* Single declarations on one line */
 2 .span1 { width: 60px; }
 3 .span2 { width: 140px; }
 4 .span3 { width: 220px; }
 5 
 6 /* Multiple declarations, one per line */
 7 .sprite {
 8   display: inline-block;
 9   width: 16px;
10   height: 15px;
11   background-image: url(../img/sprite.png);
12 }
13 .icon           { background-position: 0 0; }
14 .icon-home      { background-position: 0 -20px; }
15 .icon-account   { background-position: 0 -40px; }
View Code

 引申:如何调试CSS,定位CSS中的报错?

 

 6. 限制使用简写的属性声明

在需要显示地设置所有值的情况下,应当尽量限制使用简写形式的属性声明。
 
常见的滥用简写属性声明的情况如下:
  • padding
  • margin
  • font
  • background
  • border
  • border-radius
大部分情况下,我们不需要为简写形式的属性声明指定所有值。 

过度使用简写形式的属性声明会导致代码混乱,并且会对属性值带来不必要的覆盖从而引起意外的副作用。

 

 

 1 /* Bad example */
 2 .element {
 3   margin: 0 0 10px;
 4   background: red;
 5   background: url("image.jpg");
 6   border-radius: 3px 3px 0 0;
 7 }
 8 
 9 /* Good example */
10 .element {
11   margin-bottom: 10px;
12   background-color: red;
13   background-image: url("image.jpg");
14   border-top-left-radius: 3px;
15   border-top-right-radius: 3px;
16 }
View Code

 

7.  Less和Sass中的嵌套

避免非必要的嵌套。这是因为虽然你可以使用嵌套,但是并不意味着应该使用嵌套。只有在必须将样式限制在父元素内(也就是后代选择器),并且存在多个需要嵌套的元素时才使用嵌套。

1 // Without nesting
2 .table > thead > tr > th { … }
3 .table > thead > tr > td { … }
4 
5 // With nesting
6 .table > thead > tr {
7   > th { … }
8   > td { … }
9 }
View Code

 

8. class命名

  • class 名称中只能出现小写字符和破折号(dashe)(不是下划线,也不是驼峰命名法)。破折号应当用于相关 class 的命名(类似于命名空间)(例如,.btn.btn-danger)。
  • 避免过度任意的简写。.btn 代表 button,但是 .s 不能表达任何意思。
  • class 名称应当尽可能短,并且意义明确。
  • 使用有意义的名称。使用有组织的或目的明确的名称,不要使用表现形式(presentational)的名称。
  • 基于最近的父 class 或基本(base) class 作为新 class 的前缀。
  • 使用 .js-* class 来标识行为(与样式相对),并且不要将这些 class 包含到 CSS 文件中。

1 /* Bad example */
2 .t { ... }
3 .red { ... }
4 .header { ... }
5 
6 /* Good example */
7 .tweet { ... }
8 .important { ... }
9 .tweet-header { ... }
View Code

 

9. 选择器

  • 对于通用元素使用 class ,这样利于渲染性能的优化。
  • 对于经常出现的组件,避免使用属性选择器(例如,[class^="..."])。浏览器的性能会受到这些因素的影响。
  • 选择器要尽可能短,并且尽量限制组成选择器的元素个数,建议不要超过 3 。
  • 只有在必要的时候才将 class 限制在最近的父元素内(也就是后代选择器)(例如,不使用带前缀的 class 时 -- 前缀类似于命名空间)。

1 /* Bad example */
2 span { ... }
3 .page-container #stream .stream-item .tweet .tweet-header .username { ... }
4 .avatar { ... }
5 
6 /* Good example */
7 .avatar { ... }
8 .tweet-header .username { ... }
9 .tweet .avatar { ... }
View Code

 

10. 代码组织

  • 以组件为单位组织代码段。
  • 制定一致的注释规范。
  • 使用一致的空白符将代码分隔成块,这样利于扫描较大的文档。
  • 如果使用了多个 CSS 文件,将其按照组件而非页面的形式分拆,因为页面会被重组,而组件只会被移动。
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2015-10-29 14:45  hanyuxinting  阅读(407)  评论(0编辑  收藏  举报

导航