版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、前端编码规范一般规范这是一份旨在增强团队的开发协作,提高代码质量和打造开发基石的编码风格规范,其中包含了 HTML, JavaScript 和 CSS/SCSS 这几个部分。我们知道,当一个团队开始指定并实行编码规范的话,错误就会变得更加显而易见。如果一段特定的代码不符合规范的话,它有可能只是代码风格错误,而也有可能会是 bug。早期指定规范就使得代码审核得以更好的开展,并且可以更精确的地定位到错误。只要开发者们能够保证源代码源文件都严格遵循规范,那接下去所使用的混淆、压缩和编译工具则可投其所好不尽相同。一般规范以下章节列举了一些可应用在 HTML, JavaScript 和 CSS/SCSS
2、 上的通用规则。文件/资源命名在 web 项目中,所有的文件名应该都遵循同一命名约定。以可读性而言,减号(-)是用来分隔文件名的不二之选。同时它也是常见的 URL 分隔符(i.e./or/请确保文件命名总是以字母开头而不是数字。而以特殊字符开头命名的文件,一般都有特殊的含义与用处(比如 compass1中的下划线就是用来标记跳过直接编译的文件用的)。资源的字母名称必须全为小写,这是因为在某些对大小写字母敏感的操作系统中,当文件通过工具压缩混淆后,或者人为修改过后,大小写不同而导致引用文件不同的错误,很难被发现。还有一些情况下,需要对文件增加前后缀或特定的扩展名(比如 .min.js, .min
3、.css),抑或一串前缀(比如3fa89b.main.min.css)。这种情况下,建议使用点分隔符来区分这些在文件名中带有清晰意义的元数据。不推荐1. MyScript.js2. myCamelCaseName.css3. i_love_underscores.html4. 1001-scripts.js5. my-file-min.css推荐1. my-script.js2. my-camel-case-name.css3. i-love-underscores.html4. thousand-and-one-scripts.js5. my-file.min.css协议不要指定引入资源所带
4、的具体协议。当引入图片或其他媒体文件,还有样式和脚本时,URLs 所指向的具体路径,不要指定协议部分(http:,https:),除非这两者协议都不可用。不指定协议使得 URL 从绝对的获取路径转变为相对的,在请求资源协议无法确定时非常好用,而且还能为文件大小节省几个字节。不推荐1. script src=推荐1. script src=/不推荐1. .example 2. background: url(3. 推荐1. .example 2. background: url(/3. 文本缩进一次缩进两个空格。1. 2. Fantastic3. Great4. 5. Test6. 7. 1.
5、media screen and (min-width: 1100px) 2. body 3. font-size: 100%;4. 5. 1. (function()2. var x = 10;3. 4. function y(a, b) 5. return 6. result: (a + b) * x7. 8.9. 10. ();注释注释是你自己与你的小伙伴们了解代码写法和目的的唯一途径。特别是在写一些看似琐碎的无关紧要的代码时,由于记忆点不深刻,注释就变得尤为重要了。编写自解释代码只是一个传说,没有任何代码是可以完全自解释的。而代码注释,则是永远也不嫌多。当你写注释时一定要注意:不要写你
6、的代码都干了些什么,而要写你的代码为什么要这么写,背后的考量是什么。当然也可以加入所思考问题或是解决方案的链接地址。不推荐1. var offset = 0;2. 3. if(includeLabels) 4. / Add offset of 205. offset = 20;6. 推荐1. var offset = 0;2. 3. if(includeLabels) 4. / If the labels are included we need to have a minimum offset of 20 pixels5. / We need to set it explicitly bec
7、ause of the following bug: 6. offset = 20;7. 一些注释工具可以帮助你写出更好的注释。JSDoc或YUIDoc就是用来写 JavaScript 注释用的。你甚至可以使用工具来为这些注释生成文档,这也是激励开发者们写注释的一个好方法,因为一旦有了这样方便的生成文档的工具,他们通常会开始花更多时间在注释细节上。代码检查对于比较宽松自由的编程语言来说,严格遵循编码规范和格式化风格指南就显得极为重要。遵循规范固然很好,但是有自动化流程来确保其执行情况,岂不更佳。Trust is good, control is better.前端编码规范HTML规范HTML
8、规范文档类型推荐使用 HTML5 的文档类型申明:.(建议使用 text/html 格式的 HTML。避免使用 XHTML。XHTML 以及它的属性,比如application/xhtml+xml在浏览器中的应用支持与优化空间都十分有限)。HTML 中最好不要将无内容元素1的标签闭合,例如:使用而非.HTML 验证一般情况下,建议使用能通过标准规范验证的 HTML 代码,除非在性能优化和控制文件大小上不得不做出让步。使用诸如 W3C HTML validator 这样的工具来进行检测。规范化的 HTML 是显现技术要求与局限的显著质量基线,它促进了 HTML 被更好地运用。不推荐1. Test
9、2. This is only a test.推荐1. 2. 3. Test4. This is only a test.省略可选标签HTML5 规范中规定了 HTML 标签是可以省略的。但从可读性来说,在开发的源文件中最好不要这样做,因为省略标签可能会导致一些问题。省略一些可选的标签确实使得页面大小减少,这很有用,尤其是对于一些大型网站来说。为了达到这一目的,我们可以在开发后期对页面进行压缩处理,在这个环节中这些可选的标签完全就可以省略掉了。脚本加载出于性能考虑,脚本异步加载很关键。一段脚本放置在内,比如,其加载会一直阻塞 DOM 解析,直至它完全地加载和执行完毕。这会造成页面显示的延迟。特
10、别是一些重量级的脚本,对用户体验来说那真是一个巨大的影响。异步加载脚本可缓解这种性能影响。如果只需兼容 IE10+,可将 HTML5 的 async 属性加至脚本中,它可防止阻塞 DOM 的解析,甚至你可以将脚本引用写在里也没有影响。如需兼容老旧的浏览器,实践表明可使用用来动态注入脚本的脚本加载器。你可以考虑yepnope或labjs。注入脚本的一个问题是:一直要等到 CSS 对象文档已就绪,它们才开始加载(短暂地在 CSS 加载完毕之后),这就对需要及时触发的 JS 造成了一定的延迟,这多多少少也影响了用户体验吧。终上所述,兼容老旧浏览器(IE9-)时,应该遵循以下最佳实践。脚本引用写在 b
11、ody 结束标签之前,并带上 async 属性。这虽然在老旧浏览器中不会异步加载脚本,但它只阻塞了 body 结束标签之前的 DOM 解析,这就大大降低了其阻塞影响。而在现代浏览器中,脚本将在 DOM 解析器发现 body 尾部的 script 标签才进行加载,此时加载属于异步加载,不会阻塞 CSSOM(但其执行仍发生在 CSSOM 之后)。所有浏览器中,推荐1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 只在现代浏览器中,推荐1. 2. 3. 4. 5. 6. 7. 8. 9. 语义化根据元素(有时被错误地称作“标签”)其被创造出来时的初始意义来使用它。打个比方,用 headi
12、ng 元素来定义头部标题,p 元素来定义文字段落,用 a 元素来定义链接锚点,等等。有根据有目的地使用 HTML 元素,对于可访问性、代码重用、代码效率来说意义重大。以下示例列出了一些的语义化 HTML 主要情况:不推荐1. My page title2. 3. Home4. News5. About6. 7. 8. 9. 10. All news articles11. 12. Bad article13. Introduction sub-title14. This is a very bad example for HTML semantics15. I think Im more on
13、 the side and should not receive the main credits16. 17. This article was created by David 2014-01-01 00:0018. 19. 20. 21. 22. Related sections: Events, Public holidays23. 24. 25. 26. 27. 28. Copyright 201429. 推荐1. 2. 3. 4. My page title5. 6. 7. 8. 9. 10. 11. Home12. News13. About14. 15. 16. 17. 18.
14、 19. 20. 21. 22. 23. 24. All news articles25. 26. 27. 29. 30. 31. 32. 33. Good article34. 35. Introduction sub-title36. 37. 38. 39. 40. This is a good example for HTML semantics41. 42. 43. 44. I think Im more on the side and should not receive the main credits45. 46. 47. 48. 50. This article was cre
15、ated by David 1 month ago51. 52. 53. 54. 55. 56. Related sections: Events, Public holidays57. 58. 59. 60. 61. 62. 63. Copyright 201464. 多媒体回溯对页面上的媒体而言,像图片、视频、canvas 动画等,要确保其有可替代的接入接口。图片文件我们可采用有意义的备选文本(alt),视频和音频文件我们可以为其加上说明文字或字幕。提供可替代内容对可用性来说十分重要。试想,一位盲人用户如何能知晓一张图片是什么,要是没有 alt 的话。(图片的 alt 属性是可不填写内容的
16、,纯装饰性的图片就可用这么做:alt=)。不推荐1. 推荐1. 尽量用 alt 标签去描述图片,设想你需要对于那些只能通过语音或者看不见图片的用户表达图片到底是什么。不推荐1. 推荐1. 关注点分离理解 web 中如何和为何区分不同的关注点,这很重要。这里的关注点主要指的是:信息(HTML 结构)、外观(CSS)和行为(JavaScript)。为了使它们成为可维护的干净整洁的代码,我们要尽可能的将它们分离开来。严格地保证结构、表现、行为三者分离,并尽量使三者之间没有太多的交互和联系。就是说,尽量在文档和模板中只包含结构性的 HTML;而将所有表现代码,移入样式表中;将所有动作行为,移入脚本之中
17、。在此之外,为使得它们之间的联系尽可能的小,在文档和模板中也尽量少地引入样式和脚本文件。清晰的分层意味着: 不使用超过一到两张样式表(i.e. main.css, vendor.css) 不使用超过一到两个脚本(学会用合并脚本) 不使用行内样式(.no-good ) 不在元素上使用 style 属性() 不使用行内脚本(alert(no good)) 不使用表象元素(i.e.,) 不使用表象 class 名(i.e. red, left, center)不推荐1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Im a subtitle and Im bold!12. Dar
18、e you center me!13. 14. alert(Just dont.);15. 16. Im important!17. 18. 推荐1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Im a subtitle and Im bold!12. 13. Dare you center me!14. 16. Im important!17. 18. 19. 20. 21. HTML 内容至上不要让非内容信息污染了你的 HTML。现在貌似有一种倾向:通过 HTML 来解决设计问题,这是显然是不对的。HTML 就应该只关注内容。HTML 标签的目的,就是为了不断地展示内
19、容信息。 不要引入一些特定的 HTML 结构来解决一些视觉设计问题 不要将img元素当做专门用来做视觉设计的元素以下例子展示了误将 HTML 用来解决设计问题的这两种情况:不推荐1. 2. 3. 4. See the square next to me?5. 1. .text-box .square 2. display: inline-block;3. width: 1rem;4. height: 1rem;5. background-color: red;6. 推荐1. 2. 3. See the square next to me?4. 1. /* We use a :before ps
20、eudo element to solve the design problem of placing a colored square in front of the text content */2. .text-box:before 3. content: ;4. display: inline-block;5. width: 1rem;6. height: 1rem;7. background-color: red;8. 图片和 SVG 图形能被引入到 HTML 中的唯一理由是它们呈现出了与内容相关的一些信息。不推荐1. 2. 3. 4. See the square next to
21、me?5. 推荐1. 2. 3. See the square next to me?4. 1. /* We use a :before pseudo element with a background image to solve the problem */2. .text-box:before 3. content: ;4. display: inline-block;5. width: 1rem;6. height: 1rem;7. background: url(square.svg) no-repeat;8. background-size: 100%;9. Type 属性省略样式
22、表与脚本上的 type 属性。鉴于 HTML5 中以上两者默认的 type 值就是 text/css 和 text/javascript,所以 type 属性一般是可以忽略掉的。甚至在老旧版本的浏览器中这么做也是安全可靠的。不推荐1. 2. 推荐1. 2. 可用性如果 HTML5 语义化标签使用得当,许多可用性问题已经引刃而解。ARIA 规则在一些语义化的元素上可为其添上默认的可用性角色属性,使用得当的话已使网站的可用性大部分成立。假如你使用nav,aside,main,footer等元素,ARIA 规则会在其上应用一些关联的默认值。更多细节可参考ARIA specification另外一些角
23、色属性则能够用来呈现更多可用性情景(i.e.role=tab)。Tab Index 在可用性上的运用检查文档中的 tab 切换顺序并传值给元素上的 tabindex,这可以依据元素的重要性来重新排列其 tab 切换顺序。你可以设置tabindex=-1在任何元素上来禁用其 tab 切换。当你在一个默认不可聚焦的元素上增加了功能,你应该总是为其加上tabindex属性使其变为可聚焦状态,而且这也会激活其 CSS 的伪类:focus。选择合适的tabindex值,或是直接使用tabindex=0将元素们组织成同一 tab 顺序水平,并强制干预其自然阅读顺序。微格式在 SEO 和可用性上的运用如果
24、SEO 和可用性环境条件允许的话,建议考虑采用微格式。微格式是通过在元素标签上申明一系列特定数据来达成特定语义的方法。谷歌、微软和雅虎对如何使用这些额外的数据一定程度上的达成一致,如果正确的使用,这将给搜索引擎优化带来巨大的好处。你可以访问获得更多内容细节。看一个电影网站的简单例子:不带微格式1. 2. Avatar3. Director: James Cameron (born August 16, 1954)4. Science fiction5. Trailer6. 带有微格式1. 2. Avatar3. 4. Director: James Cameron (bor
25、n August 16, 1954)5. 6. Science fiction7. Trailer8. ID 和锚点通常一个比较好的做法是将页面内所有的头部标题元素都加上 ID. 这样做,页面 URL 的 hash 中带上对应的 ID 名称,即形成描点,方便跳转至对应元素所处位置。打个比方,当你在浏览器中输入 URLhttp:/your- H3 上。1. Best practices格式化规则在每一个块状元素,列表元素和表格元素后,加上一新空白行,并对其子孙元素进行缩进。内联元素写在一行内,块状元素还有列表和表格要另起一行。(如果由于换行的空格引发了不可预计的问题,那将所有元素并入一行也是可以
26、接受的,格式警告总好过错误警告)。推荐1. 2. Space, the final frontier.3. 4. 5. 6. Moe7. Larry8. Curly9. 10. 11. 12. 13. 14. Income15. Taxes16. 17. 18. 19. 20. $ 5.0021. $ 4.5022. 23. 24. HTML 引号使用双引号(“”) 而不是单引号(”) 。不推荐1. 推荐1. 前端编码规范CSS/SCSS规范CSS/SCSS规范ID and class namingID和class(类)名总是使用可以反应元素目的和用途的名称,或其他通用名称。代替表象和晦涩难懂
27、的名称。应该首选具体和反映元素目的的名称,因为这些是最可以理解的,而且发生变化的可能性最小。通用名称只是多个元素的备用名,他们兄弟元素之间是一样的,没有特别意义。区分他们,使他们具有特殊意义,通常需要为“帮手”。尽管class(类)名和ID 的语义化对于计算机解析来说没有什么实际的意义,语义化的名称 通常是正确的选择,因为它们所代表的信息含义,不包含表现的限制。不推荐6. .fw-800 7. font-weight: 800;8. 9. 10. .red 11. color: red;12. 推荐6. .heavy 7. font-weight: 800;8. 9. 10. .importa
28、nt 11. color: red;12. 合理的避免使用ID一般情况下ID不应该被应用于样式。ID的样式不能被复用并且每个页面中你只能使用一次ID。使用ID唯一有效的是确定网页或整个站点中的位置。尽管如此,你应该始终考虑使用class,而不是id,除非只使用一次。不推荐2. #content .title 3. font-size: 2em;4. 推荐2. .content .title 3. font-size: 2em;4. 另一个反对使用ID的观点是含有ID选择器权重很高。一个只包含一个ID选择器权重高于包含1000个class(类)名的选择器,这使得它很奇怪。4. / 这个选择器权重
29、高于下面的选择器5. #content .title 6. color: red;7. 8. 9. / than this selector!10. html body div.content.news-content .title.content-title.important 11. color: blue;12. CSS选择器中避免标签名当构建选择器时应该使用清晰, 准确和有语义的class(类)名。不要使用标签选择器。 如果你只关心你的class(类)名,而不是你的代码元素,这样会更容易维护。从分离的角度考虑,在表现层中不应该分配html标记/语义。它可能是一个有序列表需要被改成一个无
30、序列表,或者一个div将被转换成article。如果你只使用具有实际意义的class(类)名,并且不使用元素选择器,那么你只需要改变你的html标记,而不用改动你的CSS。不推荐4. div.content header.content-header h2.title 5. font-size: 2em;6. 推荐8. .content .content-header .title 9. font-size: 2em;10. 尽可能的精确很多前端开发人员写选择器链的时候不使用 直接子选择器(注:直接子选择器和后代选择器的区别)。有时,这可能会导致疼痛的设计问题并且有时候可能会很耗性能。然而,在
31、任何情况下,这是一个非常不好的做法。如果你不写很通用的,需要匹配到DOM末端的选择器, 你应该总是考虑直接子选择器。考虑下面的DOM:6. 7. News event8. 9. 10. Check this out11. 12. 13. This is a news article content14. 15. 16. Buy this17. Yey!18. 19. 20. 下面的CSS将应用于有title类的全部三个元素。然后,要解决content类下的title类 和 teaser类下的title类下不同的样式,这将需要更精确的选择器再次重写他们的样式。不推荐11. .content .t
32、itle 12. font-size: 2rem;13. 推荐7. .content .title 8. font-size: 2rem;9. 10. 11. .content .content-body .title 12. font-size: 1.5rem;13. 14. 15. .content .content-body .teaser .title 16. font-size: 1.2rem;17. 缩写属性CSS提供了各种缩写属性(如 font 字体)应该尽可能使用,即使在只设置一个值的情况下。使用缩写属性对于代码效率和可读性是有很有用的。不推荐8. border-top-style: none;9. font-family: palatino, georgia, serif;10. font-size: 100%;11. line-height: 1.6;12. padding-bottom: 2em;13. padding-left: 1em;14. padding-right: 1em;15. padding-top: 0;推荐1. border-top: 0;2. font: 100%/1.6 palatino, georgia, serif;3. padding: 0 1em 2em;0 和 单位省略“0”值后面的单位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省江门市新会区崖南镇田边小学2024-2025学年五年级上学期11月期中语文试题
- 礼物筹备方案
- 天津行政职业能力模拟45
- 2014年05月10日下午广东省省直机关公务员面试真题
- 2010年3月11日海关面试真题
- 关于成立人工智能公司商业计划书
- 2007年山西省公务员面试真题
- 内蒙古行政职业能力模拟75
- 海南省行政职业能力测验真题2016年
- 心理健康教育谈话记录
- 安全生产的理论与实践培训
- MSA-GRR数据自动生成工具演示教学
- 数字经济十大趋势
- 工程水文学题库及题解(全)
- 个人征信承诺书
- 【类文阅读】25.古人谈读书(试题)五年级语文上册 部编版(含答案、解析)
- 药剂科静配中心院内感染预防与控制考核标准表格2022版
- 新疆维吾尔自治区吐鲁番市2023-2024学年九年级上学期期中数学试题
- 鲁教版七年级上册地理知识点汇总
- (浙江专版)2023-2024学年五年级上册期中模拟测评卷一
- 核酸的生物合成 完整版
评论
0/150
提交评论