HTML代码规范
通过学习基本的HTML和CSS就能在浏览器上看到实际的效果,可是要写好的HTML,就不是那么容易了。这里将和大家分享HTML规范,希望大家读完之后都能够有所收获。本文将主要以下面三个部分展开:
- HTML整体结构
- HTML代码格式
- HTML内容语义
http://bootstrap.cn/p/codeguide.html 这里的规范也不错,有时间看看。
第一部分:HTML整体结构
1.HTML基础设施
(1)文件应以<!DOCTYPE.....>首行顶格开始,这句话告诉浏览器这是一个什么文件,我们推荐使用<!DOCTYPE html>。
(2)必须在head元素内部的meta标签内声明文档的字符编码charset, 如:<meta charset="UTF-8">,这句代码告诉浏览器应该此HTML文件使用的字符集是什么,如果不加此行代码,那么在浏览器中可能显示为乱码。
(3) 页面的title是极为重要的不可缺少的一项。
当我们在sublime text编辑器中输入!并按下tab键便得到:
1 2 3 4 5 6 7 8 9 10 |
|
2.HTML代码结构和视觉顺序基本保持一致
(1).按照从上之下,从左到右的视觉顺序书写HTML结构。
(2).有时候为了便于搜索引擎抓取,我们也会将重要内容在HTML结构顺序上提前,以为搜索引擎抓取网页内容是自上而下的,所以将重要内容在HTML结构顺序上提前可便于抓取重要的内容。
(3).不要使用table布局,现在基本上被淘汰了,而应该代之以div来布局,方便控制。
3.结构、表现、行为三者分类,避免内联。
(1).使用link引入外部css文件到head中。注意:一般我们不适用@import来引入外部css文件。
(2).使用script将js文件引入,并置于body底部,这时js文件会最后加载,html会最先加载,用户体验会更好。(注意:并不是所有的js文件都要放置于body的底部,如当我们需要使用js文件动态修改meta元素内容时,需要将js文件引入到head标签中。
4.保持良好的树形结构
(1).每一个块级元素都另起一行,每一行都是用tab缩进对齐。如果不是块级元素,比如几个行内元素,我们把他写在一行即可。注意:html、 head、 body 以及body下的第1级标签(即直接子元素)不缩进,其他的都正常缩进。如下图所示:
(2).当然,我们也可以在大的模块之间用空行空开,在模块内不要使用多余的空行。
5.其他需要注意的问题
(1).一个标签上引用的className不要过多,越少越好。
(2).对于一个语义化的内部标签,应该尽量避免使用className。
第二部分:HTML代码格式
1.说明文案的注释方法
(1)开始注释:<!-- 注释文案 -->
(2)结束注释:<!-- /注释文案 -->
(3)允许只有开始注释。
2.严格嵌套
(1).应当以最严格的xhtml strict标准来嵌套,不如内联元素不能包含块级元素等等。
(2).正确闭合标签且必须闭合。
3.严格的属性
(1).属性和值全部小写,每个属性都必须有一个值,每个值必须加双引号。
(2).没有值的属性必须使用自己的名称做为值(checked、disabled、readonly、selected等等)。
(3).可以省略style标签和script标签的type属性。
第三部分:HTML内容语义
1.加强资源型内容的可访问性和可用性。
比如在img标签内加入alt属性,在audio内加入文案和链接等等。
2.加强不可见内容的可访问性
比如背景图片的文字应该同时卸载HTML中,并使用css使其不可见,有利于搜索引擎抓取你的内容,也可在css失效的情况下看到内容。
3.适当使用实体
以实体代替与HTML语法相同的字符,避免浏览器解析错误。
常用的HTML字符实体(建议使用实体):
常用的字符实体(不建议使用实体):
前端编码规范之CSS
1. tab键用(必须)四个空格代替
因为在不同系统的编辑工具对tab解析不一样,windows下的tab键是占四个空格的位置,而在linux下会变成占八个空格的位置(除非你自己设定了tab键所占的位置长度)。
一些童鞋可能会有疑问,tab键换成四个空格,多麻烦啊~
其实不然,我平时用sublime text比较多,在这个工具中可以对tab键进行设置。
选择Indent Using Spaces,Tab Width:4两项即可。
2. 每个样式属性后(必须)加 ";"
方便压缩工具"断句"。
3. Class命名中(禁止)出现大写字母,(必须)采用” - “对class中的字母分隔,如:
/* 正确的写法 */ .hotel-title { font-weight: bold; } /* 不推荐的写法 */ .hotelTitle { font-weight: bold; }
- 用"-"隔开比使用驼峰是更加清晰。
- 产品线-产品-模块-子模块,命名的时候也可以使用这种方式(@Artwl)
4. 空格的使用,以下规则(必须)执行:
.hotel-content { font-weight: bold; }
- 选择器与
{
之前(必须)
要有空格 - 属性名的
:
后(必须)
要有空格 - 属性名的
:
前(禁止)
加空格
一个原因是美观,其次IE 6存在一个bug, 戳bug
5.多选择器规则之间(必须)
换行
当样式针对多个选择器时每个选择器占一行
/* 推荐的写法 */ a.btn, input.btn, input[type="button"] { ...... }
6. (禁止)
将样式写为单行, 如
.hotel-content {margin: 10px; background-color: #efefef;}
单行显示不好注释,不好备注,这应该是压缩工具的活儿~
7. (禁止)
向 0
后添加单位, 如:
.obj { left: 0px; }
只是为了统一。记住,绿色字表强调,不表强制!
8. (禁止)
使用css原生import
使用css原生import有很多弊端,比如会增加请求数等....
9. (推荐)
属性的书写顺序, 举个例子:
.hotel-content { /* 定位 */ display: block; position: absolute; left: 0; top: 0; /* 盒模型 */ width: 50px; height: 50px; margin: 10px; border: 1px solid black; / *其他* / color: #efefef; }
- 定位相关, 常见的有:
display
position
left
top
float
等 - 盒模型相关, 常见的有:
width
height
margin
padding
border
等 - 其他属性
按照这样的顺序书写可见提升浏览器渲染dom的性能
简单举个例子,网页中的图片,如果没有设置width和height,在图片载入之前,他所占的空间为0,但是当他加载完毕之后,那块为0的空间突然被撑开了,这样会导致,他下面的元素重新排列和渲染,造成重绘(repaint)和回流(reflow)。我们在写css的时候,把元素的定位放在前头,首先让浏览器知道该元素是在文本流内还是外,具体在页面的哪个部位,接着让浏览器知道他们的宽度和高度,border等这些占用空间的属性,其他的属性都是在这个固定的区域内渲染的,差不多就是这个意思吧~(@frec)
10. 小图片(必须)sprite 合并
推荐文章:NodeJs智能合并CSS精灵图工具iSpriter
11. (推荐)
当编写针对特定html结构的样式时,使用元素名
+ 类名
/* 所有的nav都是针对ul编写的 */ ul.nav { ...... }
".a div"和".a div.b",为什么后者好?如果需求有所变化,在".a"下有多加了一个div,试问,开始的样式是不是会影响后来的div啊~
12. (推荐)IE Hack List
/* 针对ie的hack */ selector { property: value; /* 所有浏览器 */ property: value\9; /* 所有IE浏览器 */ property: value\0; /* IE8 */ +property: value; /* IE7 */ _property: value; /* IE6 */ *property: value; /* IE6-7 */ }
当使用hack的时候想想能不能用更好的样式代替
13. (不推荐)
ie使用filter
,( 禁止)
使用expression
这里主要是效率问题,应该当格外注意,咱们要少用烧CPU的东西~
14. (禁止)使用行内(inline)样式
<p style="font-size: 12px; color: #FFFFFF">靖鸣君</p>
像这样的行内样式,最好用一个class代替。又如要隐藏某个元素,可以给他加一个class
.hide { display: none; }
尽量做到样式和结构分离~
15. (推荐)reset.css样式
16.(禁止)使用"*"来选择元素
/*别这样写*/ * { margin: 0; padding: 0; }
这样写是没有必要的,一些元素在浏览器中默认有margin或padding值,但是只是部分元素,没有必要将所有元素的margin、padding值都置为0。
17. 链接的样式,(务必)按照这个顺序来书写
a:link -> a:visited -> a:hover -> a:active
原文地址:https://www.cnblogs.com/zhuochong/p/11631580.html