2828 * [按模块添加注释](#html-comment)
2929 * [格式](#format)
3030 * [语义化标签](#semantic)
31+ * [模块化](#html-module)
31325 . [ CSS约定] ( #css )
3233 * [文件引用](#link)
3334 * [命名-组成元素](#element)
3435 * [命名-词汇规范](#word)
3536 * [命名-缩写规范](#abbr)
3637 * [命名-前缀规范](#prefix)
37- * [复用与重写](#reuse)
3838 * [id与class](#id)
3939 * [书写格式](#packaging)
4040 * [规则与分号](#semicolon)
4747 * [hack规范](#hack)
4848 * [避免类型选择器](#type-selector)
4949 * [属性缩写与分拆](#override)
50+ * [模块化](#css-module)
50516 . [ 图像约定] ( #img )
5152 * [图像压缩](#img-compress)
5253 * [背景图](#background-image)
460461
461462> 参阅:[ HTML5 Elements] ( http://www.w3.org/TR/html5/ )
462463
464+ <a name =" html-module " ></a >
463465### 12.模块化
464466
465467* 每个模块必须有一个模块名;
466- * 每个模块的基本组成部分应该一致。
468+ * 每个模块的基本组成部分应该一致;
469+ * 模块的子节点类名需带上模块名(防止模块间嵌套时产生不必要的覆盖);
470+ * 孙辈节点无需再带模块名。
467471
468472代码如:
469473
479483 </footer>
480484 </section>
481485
486+ > 其中 ` .m-detail-hd ` , ` .m-detail-bd ` , ` .m-detail-ft ` 为可选,试具体模块情况决定是否需要抽象为这种 ** 头,中,尾** 的结构
487+
482488<a name =" css " ></a >
483489## CSS约定
484490
@@ -577,18 +583,13 @@ js-|所有用于纯交互的命名,不涉及任何样式规则。JSer拥有全
577583
578584js- 这种级别的className完全交由JSer自定义,但是命名的规则也可以保持跟重构一致,比如说不能使用拼音之类的
579585
580- <a name =" reuse " ></a >
581- ### 6.复用与重写
582-
583- 参见模块化设计
584-
585586<a name =" id " ></a >
586- ### 7 .id与class
587+ ### 6 .id与class
587588
588589重构工程师只允许使用class(因历史原因及大家的习惯做出妥协)。
589590
590591<a name =" packaging " ></a >
591- ### 8 .书写格式
592+ ### 7 .书写格式
592593
593594* 选择器与大括号之间不需要空格;
594595* 属性值之前保留一个空格;
@@ -614,7 +615,7 @@ js- 这种级别的className完全交由JSer自定义,但是命名的规则也
614615 }
615616
616617<a name =" semicolon " ></a >
617- ### 9 .规则与分号
618+ ### 8 .规则与分号
618619
619620每条规则结束后都必须加上分号
620621
@@ -635,7 +636,7 @@ js- 这种级别的className完全交由JSer自定义,但是命名的规则也
635636 }
636637
637638<a name =" unit " ></a >
638- ### 10 .0与单位
639+ ### 9 .0与单位
639640
640641如果属性值为0,则不需要为0加单位
641642
@@ -654,7 +655,7 @@ js- 这种级别的className完全交由JSer自定义,但是命名的规则也
654655 }
655656
656657<a name =" decimal " ></a >
657- ### 11 .0与小数
658+ ### 10 .0与小数
658659
659660如果是0开始的小数,前面的0可以省略不写
660661
@@ -673,7 +674,7 @@ js- 这种级别的className完全交由JSer自定义,但是命名的规则也
673674 }
674675
675676<a name =" non-quotes " ></a >
676- ### 12 .去掉uri中引用资源的引号
677+ ### 11 .去掉uri中引用资源的引号
677678
678679不要在url()里对引用资源加引号
679680
@@ -688,7 +689,7 @@ js- 这种级别的className完全交由JSer自定义,但是命名的规则也
688689 @import url(global.css);
689690
690691<a name =" hex " ></a >
691- ### 13 .HEX颜色值写法
692+ ### 12 .HEX颜色值写法
692693
693694* 将所有的颜色值小写;
694695* 可以缩写的缩写至3位。
@@ -702,7 +703,7 @@ js- 这种级别的className完全交由JSer自定义,但是命名的规则也
702703 body{ background-color: #f00; }
703704
704705<a name =" order " ></a >
705- ### 14 .属性书写顺序
706+ ### 13 .属性书写顺序
706707
707708* 遵循先布局后内容的顺序。
708709
@@ -762,7 +763,7 @@ js- 这种级别的className完全交由JSer自定义,但是命名的规则也
762763> 当有一天你的浏览器升级后,可能不再支持私有写法,那么这时写在后面的标准写法将生效,避免无法向后兼容的情况发生。
763764
764765<a name =" css-comment " ></a >
765- ### 15 .注释规范
766+ ### 14 .注释规范
766767
767768保持注释内容与星号之间有一个空格的距离
768769
@@ -782,7 +783,7 @@ js- 这种级别的className完全交由JSer自定义,但是命名的规则也
782783> 应用了高级技巧的地方一定要注释说明
783784
784785<a name =" hack " ></a >
785- ### 16 .hack规范
786+ ### 15 .hack规范
786787
787788* 尽可能的减少对Hack的使用和依赖,如果在项目中对Hack的使用太多太复杂,对项目的维护将是一个巨大的挑战;
788789* 使用其它的解决方案代替Hack思路;
@@ -826,7 +827,7 @@ if条件共包含6种选择方式:是否、大于、大于或等于、小于
826827```
827828
828829<a name =" type-selector " ></a >
829- ### 17 .避免类型选择器
830+ ### 16 .避免类型选择器
830831
831832* 避免出现标签名与ID或class组合的选择器
832833* 太多这种写法会让你的CSS效率变得糟糕
@@ -842,7 +843,7 @@ if条件共包含6种选择方式:是否、大于、大于或等于、小于
842843 .first{ sRules; }
843844
844845<a name =" override " ></a >
845- ### 18 .属性缩写与分拆
846+ ### 17 .属性缩写与分拆
846847
847848* 无继承关系时,使用缩写;
848849* 存在继承关系时,使用分拆方式;
@@ -917,6 +918,58 @@ body{
917918}
918919```
919920
921+ <a name =" css-module " ></a >
922+ ### 18.模块化
923+
924+ * 每个模块必须是一个独立的样式文件,文件名与模块名一致;
925+ * 模块样式的选择器必须以模块名开头以作范围约定;
926+
927+ 假定有一个模块如前文 [ HTML模块化] ( #html-module ) ,那么 ` m-detail.scss ` 的写法大致如下:
928+
929+ .m-detail{
930+ background: #fff;
931+ color: #333;
932+ @at-root{
933+ &-hd{
934+ padding: 5px 10px;
935+ background: #eee;
936+ .title{background: #eee;}
937+ }
938+ &-bd{
939+ padding: 10px;
940+ .info{
941+ font-size: 14px;
942+ text-indent: 2em;
943+ }
944+ }
945+ &-ft{
946+ text-align: center;
947+ .more{color: blue;}
948+ }
949+ }
950+ }
951+
952+ 编译之后代码如下:
953+
954+ .m-detail{
955+ background: #fff;
956+ color: #333;
957+ }
958+ .m-detail-hd{
959+ padding: 5px 10px;
960+ background: #eee;
961+ }
962+ .m-detail-hd .title{ background: #eee; }
963+ .m-detail-bd{ padding: 10px; }
964+ .m-detail-bd .info{
965+ font-size: 14px;
966+ text-indent: 2em;
967+ }
968+ .m-detail-ft{ text-align: center; }
969+ .m-detail-ft .more{ color: blue; }
970+
971+ > 任何超过3级的选择器,需要思考是否必要,是否有无歧义的,能唯一命中的更简短的写法
972+
920973<a name =" img " ></a >
921974## 图像约定
922975
0 commit comments