为什么要模块化?

  • 分治和复用
  • 封装,不污染全局,不被全局污染。
  • 继承

BEM(block:块,Element:元素,Modifier:修饰符)策略

  1. .block__Element--Modifier
  2. .块__元素--修饰

封装靠人为约定。

继承靠层叠特性。

基础组件样式

分治性强,复用性强。

  1. .Button { /* Button通用样式 */ }
  2. .Button--disabled { }
  3. .Button--error { }
  4. .Button--in-progress { }
  1. <button class="Button Button--in-progress">Processing...</button>

缺点

人为约定总是不靠谱,有人覆盖了就呵呵哒。

业务组件样式

分治性强,复用性弱。

  1. .product-details {}
  2. .product-details__price {}
  3. .product-details__price__num {}
  4. .product-details__price__icon {}
  5. .product-details__price--sale {}
  1. <!-- product/details.html -->
  2. <div name="price" class="product-details__price"></div>

缺点

需求肯定会变,万一目录(或者DOM上下级结构)调整了就嘿嘿嘿。

我想product/intro.html也要用到.product-details__price__icon{}样式咋办。

还有,代码冗余了。

Less的策略

跨文件继承

使用@import引入文件,再调用变量或者mixins。

缺点

变量命名冲突

css in js策略(限于React)

  • 独一无二的命名,保证了封装。
  • js映射文件,保证了开发的便利。
  • 继承方式,还是利用层叠特性。

封装和继承

css原文件

  1. .common { /* font-sizes, padding, border-radius */ }
  2. .normal { composes: common; /* blue color, light blue background */ }
  3. .error { composes: common; /* red color, light red background */ }

html原文件

  1. <button class="normal">
  2. Submit
  3. </button>

生成的的css文件

  1. .components_submit_button__common__abc5436 { /* font-sizes, padding, border-radius */ }
  2. .components_submit_button__normal__def6547 { /* blue color, light blue background */ }
  3. .components_submit_button__error__1638bcd { /* red color, light red background */ }

生成的js映射文件

  1. styles: {
  2. common: "components_submit_button__common__abc5436",
  3. normal: "components_submit_button__common__abc5436 components_submit_button__normal__def6547",
  4. error: "components_submit_button__common__abc5436 components_submit_button__error__1638bcd"
  5. }

编译后的html文件

  1. /*html*/
  2. <button class="components_submit_button__common__abc5436 components_submit_button__normal__def6547">
  3. Submit
  4. </button>

跨文件继承

colors.css

  1. .primary {
  2. color: #720;
  3. }
  4. .secondary {
  5. color: #777;
  6. }

submit-button.css

  1. .common { /* font-sizes, padding, border-radius */ }
  2. .normal {
  3. composes: common;
  4. composes: primary from "./colors.css";
  5. }

编译后的colors.css

  1. .shared_colors__primary__fca929 {
  2. color: #720;
  3. }
  4. .shared_colors__secondary__acf292 {
  5. color: #777;
  6. }

编译后的submit-button.css

  1. .components_submit_button__common__abc5436 { /* font-sizes, padding, border-radius */ }
  2. .components_submit_button__normal__def6547 {}
  3. <button class="shared_colors__primary__fca929
  4. components_submit_button__common__abc5436
  5. components_submit_button__normal__def6547">
  6. Submit
  7. </button>

总结

规范是人工约定的模块化,CSS in js是机器制定的模块化。

css模块化策略的更多相关文章

  1. 谈 CSS 模块化

    以前看过模块化的相关资料以及解释,对模块化有了一个表皮的了解,自己也做了一些相关的实践,由于接触到的项目交小,所以也没能更好的去体现和理解模块化,但总体还是有那么一些感悟,但是如果要说怎么才能算是好的 ...

  2. css模块化思想(一)--------命名是个技术活

    引子: 女孩子都喜欢买衣服,而我也不例外,奈何钱包太瘦,买不起高大上的定制,只能买撞衫率极高的休闲衣,不过对于我来说,我还是开心的,毕竟买衣服买的不仅是衣服,更是一种心情.在web前端的世界里,css ...

  3. 谈CSS模块化【封装-继承-多态】

    第一次听到“CSS模块化”这个词是在WebReBuild的第四届“重构人生”年会上,当时我还想,“哈,CSS也有模块化,我没听错吧?”事实上,我没听错,你也没看错,早就有CSS模块化这个概念了.之所以 ...

  4. 浅谈CSS模块化

    为什么要CSS模块化? 你是否为class命名而感到苦恼? 你是否有怕跟别人使用同样class名而感到担忧? 你是否因层级结构不清晰而感到烦躁? 你是否因代码难以复用而感到不爽? 你是否因为commo ...

  5. css模块化及CSS Modules使用详解

    什么是css模块化? 为了理解css模块化思想,我们首先了解下,什么是模块化,在百度百科上的解释是,在系统的结构中,模块是可组合.分解和更换的单元.模块化是一种处理复杂系统分解成为更好的可管理模块的方 ...

  6. React(八)样式及CSS模块化

    (1)内联样式 注:样式要采用驼峰命令发,如果非要使用原生css样式写法,需加引号 缺点:一些动画,伪类不能使用 class App extends Component { constructor(p ...

  7. Vue中CSS模块化最佳实践

    Vue风格指南中介绍了单文件组件中的Style是必须要有作用域的,否则组件之间可能相互影响,造成难以调试. 在Vue Loader Scope CSS和Vue Loader CSS Modules两节 ...

  8. css模块化思想(一)

    什么是css模块化思想?(what) 为了理解css模块化思想,我们首先了解下,什么是模块化,在百度百科上的解释是,在系统的结构中,模块是可组合.分解和更换的单元.模块化是一种 处理复杂系统分解成为更 ...

  9. CSS模块化思想-----命名是个技术活

    CSS模块化思想(一)--------命名是个技术活 引子: 女孩子都喜欢买衣服,而我也不例外,奈何钱包太瘦,买不起高大上的定制,只能买撞衫率极高的休闲衣,不过对于我来说,我还是开心的,毕竟买衣服买的 ...

随机推荐

  1. DS实验题 PlayGame Kruskal(UnionFindSet)

    题目: 思路: 有两种做法,一种是Prim算法,另外一种则是我所使用的Kruskal算法,Kruskal的算法实现可以参考:最小生成树-Prim算法和Kruskal算法,讲的已经是十分清楚了. 具体算 ...

  2. 使用 JavaScript 实现基本队列、优先队列和循环队列

    1.基本队列的实现 基本队列的方法中,包含了 ①向队列(尾部)中添加元素(enqueue).②(从队列头部)删除元素(dequeue).③查看队列头部的元素(front).④查看队列是否为空(isEm ...

  3. DDoS deflate+iptables防御轻量级ddos攻击

    一.查看攻击者ip #netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 二.安装ddos deflate ...

  4. Android中Parcelable接口用法

    from: http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html Interface for classes wh ...

  5. 接口测试从未如此简单 - Postman (Chrome插件)

    接口测试从未如此简单 - Postman (Chrome插件) 一个非常有力的Http Client工具用来测试Web服务的, 我这里来介绍如何用它测试restful web service 注:转载 ...

  6. 【C51】UART串口通信

    我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑,  单片机<-->单片机之间通信. 串行通信 versus 并行通信 并 ...

  7. ios开发xcode中设置代码块

    在开发中有很多重复的代码,很多开发者把常用的代码做成代码块提高开发效率. 在xcode里选中代码块的时候总是很不容易,点击选中的代码(文字),不要移动和松开鼠标左键,当竖线变成像拉长了的x(我也不知道 ...

  8. Git branch 和 Git checkout常见用法

    git branch 和 git checkout经常在一起使用,所以在此将它们合在一起 1.Git branch 一般用于分支的操作,比如创建分支,查看分支等等, 1.1 git branch 不带 ...

  9. IAP的几个问题

    IAP是(In-APP Purchase),苹果商店内购.先来看看它的流程:   而实际运营过程中,经常会遇到这二个问题: 只要应用玩的人比较多,基本上都会遇到过此类问题,下面是来自搜索引擎的结果: ...

  10. css布局之左侧固定右侧自适应布局

    参考代码如下: <form id="form1" style="height:100%; overflow:hidden;"> <div st ...