每日一译系列-模块化css怎么玩(译文)
原文链接:How Css Modules Work
原文作者是Preact的作者
这是一篇关于如何使用Css Modules的快速介绍,使用到的工具是Webpack吊炸的css-loader
首先,我们明确一下本文的目标。我们想要和我们的组件一起使用css,因为在某种程度上他们已经耦合在一起了。我今天会用less,但是用单纯的css,或者Scss等等也是一样的。
文件结构
- components/
- foo/
- index.js
- style.less
- foo/
样式
首先,我们来写点less
1 |
.foo {
|
…非常常见的less代码。类名也是很通用的那种,看起来不是很差,但是Css Modules要给每个样式规则都加上命名空间来让规则冲突几乎不可能发生。
引入 CSS Modules
为了使用模块化的CSS,我们得引入样式。这个过程会将所有的样式规则从less翻译到css,给所有的类加上命名空间。就像通常的引入一样,css-loader会把样式注入到组件文件中。最重要的一个不同点在于从import返回了一个值,这个值是一个对象,里面存储着本地的css类名和他们的带有命名空间的版本。
1 |
import style from './style.less';
export default class extends Component {
|
如果你想输出这个style,也就是console.log(style),除了把css注入到你的文件之外,import语句会返回 一个存储着类名和本地类名映射的对象。
1 |
console.log(style); |
这是怎么工作的:当你引入less/css/scss文件的时候,它会被当做一个样式文件添加到当前组件(当然啦,这事有css-loader内部处理的)。你的类名会被翻译成本地的带有命名空间的类名。你可以控制这个过程,最常见的方法就是把
.class转换成filename_clas_[hash:0:5]。这回让命名空间按照文件名分类,按照hash区分版本,而且还是可读的,因为原始的类名也还在。
总结起来意思就是说当你在你的JSX(或者其他形式的标记语言)中设置了class={style.foo}实际上你是添加一个本地的类名class="foo_foo_abcde"。
想让这一切都工作起来,你得告诉css-loader你想使用Css Modules:
1 |
module: {
|
如果你想定制引入的本地的名称,你可以提供一个简单的模板字符串给localIdentName选项:
1 |
css?modules&importLoaders=1&localIdentName=[local]_[hash:base64:5] |
想想看是不是真的这么做?
每日一译系列-模块化css怎么玩(译文)的更多相关文章
- 顽石系列:CSS实现垂直居中的五种方法
顽石系列:CSS实现垂直居中的五种方法 在开发过程中,我们可能沿用或者试探性地去使用某种方法实现元素居中,但是对各种居中方法的以及使用场景很不清晰.参考的内容链接大概如下: 行内元素:https:// ...
- 【03】emmet系列之CSS语法
[01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 单位: 有几个常用值别 ...
- webpack学习2.1 模块化开发(JS模块化&CSS模块化)
一.JS模块化 命名空间,COMMONJS,AMD/CMD/UMD,ES6 module 1.什么是命名空间 库名.类别名.方法名 弊端:在命名空间重复生命,要记住完整的路径名(而且很长) var N ...
- css如何玩转有序无序列表项list样式
在无序列表ul>li中,无线列表的标志是出现在各列表前面的圆点.在有序列表ol>li中,前面默认带有数字,如何修改列表前面的项目符号,只需要通过list-style调整就好,常见的符号有( ...
- css3系列-2.css中常见的样式属性和值
css3系列-2.css中常见的样式属性和值 继续上一篇文章的继续了解css的基础知识,关注我微信公众号:全栈学习笔记 css中常见的样式属性和值 字体与颜色 背景属性 文本属性 边框属性 内外边距 ...
- css3笔记系列-3.css中的各种选择器详解,不看后悔系列
点击上方蓝色字体,关注我 最详细的css3选择器解析 选择器是什么? 比较官方的解释:在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. 最常见的 CSS 选择器是元素选择器.换句话说 ...
- 每日一个知识点系列:volatile的可见性原理
每日一个知识点系列的目的是针对某一个知识点进行概括性总结,可在一分钟内完成知识点的阅读理解,此处不涉及详细的原理性解读. img 看图说话 关键点1: 总线嗅探器(MESI 缓存一致性原理 ) 关键点 ...
- 前端系列之CSS基础知识概述
1.什么是DIV (1).div就是html一个普通标签,进行区域划分.特性:独自占一行.独自不能实现复杂效果.必须结合css样式进行渲染. (2).div通常其是块级元素 (3).div是定义文档中 ...
- CSS系列:CSS常用样式
1. 通用样式 Base.css * { margin:; padding:; } body { width: 1000px; margin: 0 auto; font-size: 12px; fon ...
随机推荐
- Ubuntu16装Flash
第一种方法: 1)下载flash的tar.gz压缩包.(以·tar.gz为后缀的文件是一种压缩文件,在Linux和macOS下常见,Linux和macOS都可以直接解压使用这种压缩文件) https: ...
- cocoaPods安装使用亲体验
一. cocoaPods的安装. 终端中输入: $ sudo gem install cocoapods 注意:直接在terminal中输入这个是安装不成功的,因此,我们可以通过淘宝的Ruby镜像来访 ...
- iOS开发-消息初认识
一.消息循环(runLoop)的作用 1,防止程序退出, 2,接受事件 3,如果没有事件,让程序自动休眠 二.消息源 1, 输入源:键盘.鼠标.NSBoard.NSPort 2,定时源 ...
- 14)PHP,系统错误
E_ERROR:系统严重错误 一发生,程序立即停止执行. 该错误一般希望马上. E_WARNING:系统警告 一发生,提示错误,并继续执行. 通常该错误希望能够在“下一工作日”去处理掉(解决). E_ ...
- C#通过窗体应用程序操作数据库(增删改查)
为了体现面向对象的思想,我们把“增删改查”这些函数封装到一个数据库操作类里: 为了便于窗体程序与数据库之间进行数据交互,我们建一个具有数据库行数据的类,通过它方便的在窗体程序与数据库之间传输数据: 我 ...
- Codeforces Round #517 (Div. 2)(1~n的分配)
题:https://codeforces.com/contest/1072/problem/C 思路:首先找到最大的x,使得x*(x+1)/2 <= a+b 那么一定存在一种分割使得 a1 &l ...
- E. Arson In Berland Forest(思维,找二维阵列中的矩阵,二分)
题:https://codeforces.com/contest/1262/problem/E 分析:预处理出阵列中的矩阵,然后二分答案还原题目的烧火过程,判断是否满足要求 #include<b ...
- vbox NAT 设置端口映射(NAT+8080端口转发)
VirtualBox的提供了四种网络接入模式,它们分别是: 1.NAT 网络地址转换模式(NAT,Network Address Translation) 2.Bridged Adapter 桥接模式 ...
- idea发布web项目在tomcat位置问题
(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布. (2)war exploded模式是直接把文件夹.jsp页面 .classes等等移到Tomcat 部署文件夹里面 ...
- [LC] 151. Reverse Words in a String
Given an input string, reverse the string word by word. Example 1: Input: "the sky is blue" ...