前端编码规范 -- html篇
文档类型
推荐使用 HTML5 的文档类型申明: <!DOCTYPE html>
(建议使用 text/html 格式的 HTML。避免使用 XHTML。XHTML 以及它的属性,比如 application/xhtml+xml 在浏览器中的应用支持与优化空间都十分有限)。
HTML 中最好不要将无内容元素的标签闭合,例如:使用 <br>
而非 <br />
。
字符编码
通过明确声明字符编码,能够确保浏览器快速并容易的判断页面内容的渲染方式。这样
做的好处是,可以避免在 HTML 中使用字符实体标记(character entity),从而全部与
文档编码一致(一般采用 UTF-8 编码)。
<meta charset="UTF-8">
语言属性
<html lang="en">
</html>
脚本加载
出于性能考虑,脚本异步加载很关键。一段脚本放置在 内,比如 ,其加载会一直阻塞 DOM 解析,直至它完全地加载和执行完毕。这会造成页面显示的延迟。特别是一些重量级的脚本,对用户体验来说那真是一个巨大的影响。
异步加载脚本可缓解这种性能影响。如果只需兼容 IE10+,可将 HTML5 的 async 属性加至脚本中,它可防止阻塞 DOM 的解析,甚至你可以将脚本引用写在 里也没有影响。
如需兼容老旧的浏览器,实践表明可使用用来动态注入脚本的脚本加载器。你可以考虑 yepnope 或 labjs。注入脚本的一个问题是:一直要等到 CSS 对象文档已就绪,它们才开始加载(短暂地在 CSS 加载完毕之后),这就对需要及时触发的 JS 造成了一定的延迟,这多多少少也影响了用户体验吧。
终上所述,兼容老旧浏览器(IE9-)时,应该遵循以下最佳实践。
脚本引用写在 body 结束标签之前,并带上 async 属性。这虽然在老旧浏览器中不会异步加载脚本,但它只阻塞了 body 结束标签之前的 DOM 解析,这就大大降低了其阻塞影响。而在现代浏览器中,脚本将在 DOM 解析器发现 body 尾部的 script 标签才进行加载,此时加载属于异步加载,不会阻塞 CSSOM(但其执行仍发生在 CSSOM 之后)。
所有浏览器中,推荐
<html>
<head>
<link rel="stylesheet" href="main.css">
</head>
<body>
<!-- body goes here -->
<script src="main.js" async></script>
</body>
</html>
只在现代浏览器中,推荐
<html>
<head>
<link rel="stylesheet" href="main.css">
<script src="main.js" async></script>
</head>
<body>
<!-- body goes here -->
</body>
</html>
语义化
根据元素(有时被错误地称作“标签”)其被创造出来时的初始意义来使用它。打个比方,用 p 元素来定义文字段落,用 a 元素来定义链接锚点,等等。
有根据有目的地使用 HTML元素,对于可访问性、代码重用、代码效率来说意义重大。
简单来说丰富的语义化的标签总是比满屏的div看着清晰明了~
多媒体回溯
对页面上的媒体而言,像图片、视频、canvas 动画等,要确保其有可替代的接入接口。图片文件我们可采用有意义的备选文本(alt),视频和音频文件我们可以为其加上说明文字或字幕。
提供可替代内容对可用性来说十分重要。试想,一位盲人用户如何能知晓一张图片是什么,要是没有 alt 的话。(图片的 alt 属性是可不填写内容的,纯装饰性的图片就可用这么做:alt="")。
Type 属性
省略样式表与脚本上的 type 属性。鉴于 HTML5 中以上两者默认的 type 值就是 text/css 和 text/javascript,所以 type 属性一般是可以忽略掉的。甚至在老旧版本的浏览器中这么做也是安全可靠的。
ID 和锚点
通常一个比较好的做法是将页面内所有的头部标题元素都加上 ID. 这样做,页面 URL 的 hash 中带上对应的 ID 名称,即形成描点,方便跳转至对应元素所处位置。
格式化规则
在每一个块状元素,列表元素和表格元素后,加上一新空白行,并对其子孙元素进行缩进。内联元素写在一行内,块状元素还有列表和表格要另起一行。
(如果由于换行的空格引发了不可预计的问题,那将所有元素并入一行也是可以接受的,格式警告总好过错误警告)。
HTML 引号
使用双引号("") 而不是单引号('') 。
实用高于完美
尽量遵循 HTML 标准和语义,但是不应该以浪费实用性作为代价。任何时候都要用尽量小的复杂度和尽量少的标签来解决问题。
属性顺序
HTML 属性应该按照特定的顺序出现以保证易读性。
1、class
2、id
3、name
4、data-*
5、src, for, type, href, value , max-length, max, min, pattern
6、placeholder, title, alt
7、aria-*, role
8、required, readonly, disabled
class 是为高可复用组件设计的,理论上他们应处在第一位。id 更加具体而且应该尽量少使用(例如, 页内书签),所以他们处在第二位。
如果不当或者补充请多多指教!
最新文章
- ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现&ldquo;定制化错误页面&rdquo;
- JavaSE 之 final 初探
- Lua的string和string库总结
- 关于Android中ArrayMap/SparseArray比HashMap性能好的深入研究
- vim ---- 一键自动indent的命令
- iOS 和 Android 测试托管平台 FIR.im 的注册与常用功能
- Oracle 11g新特性
- 使用substring方法进行字符串拆分
- Android应用增加计时器
- java 21-11 数据输入、输出流和内存操作流
- ios开发逆向传值的几种方法整理
- jQuery 做好七件事帮你提升jQuery的性能
- AIX5.3CPU占用高的问题核查
- VS2015下的Android开发系列02——用VS开发第一个Android APP
- 二分图最大匹配 Hopcroft-Karp算法模板
- MySQL进程处于Waiting for table flush的分析
- MySQL 水平拆分与垂直拆分详解
- .NET Core整理之配置EFCore
- Grafana 利用Grafana Variables变量配置快速切换不同主机的图表数据展示
- 【CF1154】题解