# html-css-guide-参考 **Repository Path**: huan2515/html-css-guide ## Basic Information - **Project Name**: html-css-guide-参考 - **Description**: html&css开发规范,原仓库地址:https://github.com/doyoe/html-css-guide - **Primary Language**: HTML - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-01 - **Last Updated**: 2022-03-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HTML/CSS开发规范指南 ## 目录 1. [规范概述](#intro) 2. [基本信息](#profile) 3. [通用约定](#general) * [文档目录结构](#directory) * [分离](#separate) * [文件命名](#file-name) * [缩进](#indentation) * [编码](#encoding) * [小写](#lowercase) * [注释](#comment) * [待办事项](#todo) * [行尾空格](#end-line-space) * [省略嵌入式资源协议头](#protocol-relative-url) * [代码有效性](#validator) 4. [HTML约定](#html) * [文档类型](#doctype) * [省略type属性](#type) * [省略属性值](#attribute) * [用双引号包裹属性值](#quots) * [嵌套](#nest) * [标签闭合](#close-tag) * [多媒体替代方案](#perceivable) * [有效操作](#friendly) * [按模块添加注释](#html-comment) * [格式](#format) * [语义化标签](#semantic) * [模块化](#html-module) 5. [CSS约定](#css) * [文件引用](#link) * [命名-组成元素](#element) * [命名-词汇规范](#word) * [命名-缩写规范](#abbr) * [命名-前缀规范](#prefix) * [id与class](#id) * [书写格式](#packaging) * [规则与分号](#semicolon) * [0与单位](#unit) * [0与小数](#decimal) * [去掉uri中引用资源的引号](#non-quotes) * [HEX颜色值写法](#hex) * [属性书写顺序](#order) * [注释规范](#css-comment) * [hack规范](#hack) * [避免低效率选择器](#low-selector) * [属性缩写与分拆](#override) * [模块化](#css-module) 6. [图像约定](#img) * [图像压缩](#img-compress) * [背景图](#background-image) * [前景图](#image) * [Sprite](#sprite) 7. [结语](#end) ## 规范概述 规范的制定是我们长期以来对工作的积累与沉淀的产物,帮助我们更快、更好、更高效的完成繁重、复杂、多样化的任务,我们制作规范的主要目的在于: * 降低每个组员介入项目的门槛成本; * 提高工作效率及协同开发的便捷性; * 高度统一的代码风格; * 提供一整套HTML、CSS解决方案,来帮助开发人员快速做出高质量的符合要求的页面。 ## 基本信息 规范名称 | Cook --------|------| 当前版本 | v1.0 beta 规范发起 | [杜瑶(@doyoe)](http://weibo.com/doyoe) 参与人群 | Qunar FED 最后更新 | 2015.03.20 ## 通用约定 ### 1.文档目录结构 ``` |-- 项目名 |-- src 开发环境 |-- html 静态页面模板目录 |-- bgimg 背景图目录(假设有的话) |-- image 前景图目录(假设有的话) |-- font 字体目录(假设有的话) |-- scripts 脚本目录 |-- styles(Yo) 样式目录 |-- lib 基础库 |-- core 核心代码:reset |-- element 元素 |-- fragment 公用碎片 |-- layout 布局 |-- widget 组件 |-- usage 项目具体实现 |-- project 某个子项目 |-- core 核心代码:桥接lib中的core,可以进行项目级扩展 |-- fragment 项目公用碎片 |-- module 模块 |-- page page桥接文件目录:src-list |-- export page pack之后的文件目录 |-- prd 生产环境 |-- bgimg 背景图目录(假设有的话) |-- image 前景图目录(假设有的话) |-- font 字体目录(假设有的话) |-- scripts 脚本目录 |-- styles(Yo) 样式目录 |-- project1 子项目 |-- index.css |-- login.css |-- and etc... |-- project2 子项目 |-- index.css |-- login.css |-- and etc... |-- and etc... ``` > `src`, `scripts`, `styles` 三个目录是为了和现有项目保持一致,避免修改过大,所以保持不变。 > `html` 目录,用于存放前端开发做的静态页面,以备查阅、备份、review或给后端套页面。 > `bgimg`, `image`, `font` 三个目录在Qunar一般不会直接存在,因为我们有source服务器,这些资源都会在那上面管理;不过特殊情况也会有,比如一些独立的项目,没有使用source的,那么就需要遵循这样的目录划分。 > 至于 `html`, `bgimg`, `image`, `font` 这几个目录为什么没有加 `s`,主要是因为不希望大家去想某个目录是否为复数,简单点就好。 > `prd` 为生产环境目录,以 `xxx` 项目中的一个子项目 `mobile` 为例,其生产环境中的某个CSS外链大致如下:`//sitename.com/prd/styles/mobile/index.css` ### 2.分离 结构(HTML)、表现(CSS)、行为分离(JavaScript) > 将结构与表现、行为分离,保证它们之间的最小耦合,这对前期开发和后期维护都至关重要。 ### 3.文件命名 * CSS模块文件,其文件名必须与模块名一致; 假定有这样一个模块: .m-detail { sRules; } .m-detail-hd { sRules; } .m-detail-bd { sRules; } .m-detail-ft { sRules; } > 那么该模块的文件名应该为:`m-detail.css` * CSS页面文件,其文件名必须与HTML文件名一致; > 假定有一个HTML页面叫 `product.html`,那么其相对应的CSS页面文件名应该为:`product.css` > 假定现在有一个 `product.html`,里面有2个模块: +
+
那么开发人员能快速找到与该页面相关的3个直接CSS文件,包括:`product.css`, `m-list.css`, `m-info.css` ### 4.缩进 使用tab(4个空格宽度)来进行缩进,可以在IDE里进行设置 ### 5.编码 * 以 UTF-8 无 BOM 编码作为文件格式; * 在HTML中文档中用 `` 来指定编码; * 为每个CSS文档显示的定义编码,在文档首行定义 `@charset "utf-8";` > 在 Sass 中,如果文档中出现中文,却未显示定义编码,将会编译出错,为了统一各种写法,且提前规避错误几率,统一要求每个CSS文档都需要定义编码 ### 6.小写 * 所有的HTML标签必须小写; * 所有的HTML属性必须小写; * 所有的样式名及规则必须小写。 ### 7.注释 尽可能的为你的代码写上注释。解释为什么要这样写,它是新鲜的方案还是解决了什么问题。 ### 8.待办事项 用 TODO 标示待办事项和正在开发的条目
... /* TODO: 图文混排 comm: g-imgtext */ .g-imgtext { sRules; } ### 9.行尾空格 删除行尾空格,这些空格没有必要存在 ### 10.省略嵌入式资源协议头 省略图像、媒体文件、样式表和脚本等URL协议头部声明 ( http: , https: )。如果不是这两个声明的URL则不省略。 省略协议声明,使URL成相对地址,防止内容混淆问题和导致小文件重复下载(这个主要是指http和https交杂的场景中)。 不推荐: 推荐: 不推荐: ``` .example { background: url(http://www.google.com/images/example); } ``` 推荐: ``` .example { background: url(//www.google.com/images/example); } ``` > 注:省略协议头在IE7-8下会有一点小问题,外部CSS文件(link和@import)会被下载两遍,所以该条目的约定看具体项目。 ### 11.代码有效性 * 使用 [W3C HTML Validator](http://validator.w3.org/) 来验证你的HTML代码有效性; * 使用 [W3C CSS Validator](http://jigsaw.w3.org/css-validator/) 来验证你的CSS代码有效性。 > 代码验证不是最终目的,真的目的在于让开发者在经过多次的这种验证过程后,能够深刻理解到怎样的语法或写法是非标准和不推荐的,即使在某些场景下被迫要使用非标准写法,也可以做到心中有数。 ## HTML约定 ### 1.文档类型 * 统一使用HTML5的标准文档类型:``; > HTML5文档类型具备前后兼容的特质,并且易记易书写 * 在文档doctype申明之前,不允许加上任何非空字符; > 任何出现在doctype申明之前的字符都将使得你的HTML文档进入非标准模式 * 不允许添加 `` 标签强制改变文档模式。 > 避免出现不可控的问题 ### 2.省略type属性 在调用CSS和JavaScript时,可以将type属性省略不写 不允许: 应该: > 因为HTML5在引入CSS时,默认type值为text/css;在引入JavaScript时,默认type值为text/javascript ### 3.省略属性值 非必须属性值可以省略 不允许: 应该: > 这里的 readonly 和 disabled 属性的值是非必须的,可以省略不写,我们知道HTML5表单元素新增了很多类似的属性,如: required ### 4.用双引号包裹属性值 所有的标签属性值必须要用双引号包裹,同时也不允许有的用双引号,有的用单引号的情况 不允许: 去哪儿网 应该: 去哪儿网 ### 5.嵌套 所有元素必须正确嵌套 * 不允许交叉; 不允许: 交叉嵌套 应该: 交叉嵌套 * 不允许非法的子元素嵌套。 不允许:

    xx列表

  • asdasdsdasd
  • asdasdsdasd
应该:

xx列表

  • asdasdsdasd
  • asdasdsdasd
* 不推荐inline元素包含block元素; 不推荐:

这是一个块级h1元素

这是一个块级p元素

推荐:

这是一个块级h1元素

这是一个块级p元素

> 规则可参考: > HTML4/XHTML1.0 Strict: [嵌套规则](http://www.cs.tut.fi/~jkorpela/html/strict.html)。 > > HTML5: [嵌套规则](http://www.w3.org/TR/html5/) > > 举个例子,在HTML5中,a元素同时属于 Flow content, Phrasing content, Interactive content, Palpable content 4个分类,那些子元素是 phrasing 元素的元素可以是 a 的父元素,a 允许的子元素是以它的父元素允许的子元素为准,但不能包含 interactive 元素。 ### 6.标签闭合 所有标签必须闭合 不允许:
balabala... 应该:
balabala...
> 虽然有些标记没有要求必须关闭,但是为了避免出错的几率,要求必须全部关闭,省去判断某标记是否需要关闭的时间 ### 7.多媒体替代方案 * 为img元素加上alt属性; * 为视频内容提供音轨替代; * 为音频内容提供字母替代等等。 不推荐: 推荐: 520即将到来,爱就大声说出来 > alt属性的内容为对该图片的简要描述,这对于盲人用户和图像损毁都非常有意义,即无障碍。对于纯粹的装饰性图片,alt属性值可以留空,如 alt="" ### 8.有效操作 为表单元素label加上for属性 不允许: 应该: > for属性能让点击label标签的时候,同时focus到对应的 input 和 textarea上,增加响应区域 ### 9.按模块添加注释 在每个模块开始和结束的地方添加注释
> 注释内容左右两边保留和注释符号有1个空格位,在注释内容内不允许再出现中划线“-”,某些浏览器会报错。 > > 注释风格保持与原生HTML的语法相似:成对出现 `` ### 10.格式 * 将每个块元素、列表元素或表格元素都放在新行; * inline元素视情况换行,以长度不超过编辑器一屏为宜; * 每个子元素都需要相对其父级缩进(参见[缩进约定](#indentation))。 不推荐:

asdas

dffasdasdasdsdasdasd

推荐:

asdas

dffasdasdasdsdasdasd

### 11.语义化标签 * 根据HTML元素的本身用途去使用它们; * 禁止使用被废弃的用于表现的标签,如 center, font 等; * 部分在XHTML1中被废弃的标签,在HTML5中被重新赋予了新的语义,在选用时请先弄清其语义,如:b, i, u等。 不允许:

标题

应该:

标题

> 虽然使用p标签,也可以通过CSS去定义它的外观和标题相同,但p标签本身的并不是表示标题,而是表示文本段落 > 参阅:[HTML5 Elements](http://www.w3.org/TR/html5/) ### 12.模块化 * 每个模块必须有一个模块名; * 每个模块的基本组成部分应该一致; * 模块的子节点类名需带上模块名(防止模块间嵌套时产生不必要的覆盖); * 孙辈节点无需再带模块名。 代码如:

模块标题

一些实际内容

> 其中 `.m-detail-hd`, `.m-detail-bd`, `.m-detail-ft` 为可选,视具体模块情况决定是否需要抽象为这种 **头,中,尾** 的结构 ## CSS约定 ### 1.文件引用 * 一律使用link的方式调用外部样式 * 不允许在页面中使用 `