每日一译系列-模块化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 ...
随机推荐
- Sublime Text 3 快捷键的汇总
Sublime Text 3非常实用,但是想要用好,一些快捷键不可或缺,所以转了这个快捷键汇总. 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按 ...
- 论文翻译——Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank
Abstract Semantic word spaces have been very useful but cannot express the meaning of longer phrases ...
- 通过TleChat插件一键Getshell
TleChat网站插件是一个发布到wordpress,typecho和emlog社区上的站长聊天插件,站长聊天室插件为站长和用户提供聊天室功能,让站长与用户之间的联系更加友爱,支持文本.长文本.语音聊 ...
- Codeforces Round #606 E
题:https://codeforces.com/contest/1277/problem/E 题意:给定无向图,求有多少个pair之间的简单路径一定要经过给定的点a和b(pair中任何一个都不是a或 ...
- php先响应后处理
php响应异步请求或者返回时效要求高的接口中,可以先响应输出,再执行逻辑处理保存数据等任务 ob_end_clean(); ob_start(); echo '{"data":&q ...
- PictureService
package me.zhengjie.tools.service; import me.zhengjie.tools.domain.Picture; import org.springframewo ...
- 吴裕雄--天生自然 JAVA开发学习:Applet 基础
import java.applet.*; import java.awt.*; public class HelloWorldApplet extends Applet { public void ...
- 吴裕雄--天生自然C语言开发:函数指针
#include <stdio.h> int max(int x, int y) { return x > y ? x : y; } int main(void) { /* p 是函 ...
- linux安装源码包报错
报错代码1如下: [root@xiaoming nginx-]# ./configure --prefix=/soft/nginx- checking for OS + Linux -.el7.x86 ...
- android愤怒小鸟游戏、自定义View、掌上餐厅App、OpenGL自定义气泡、抖音电影滤镜效果等源码
Android精选源码 精练的范围选择器,范围和单位可以自定义 自定义View做的小鸟游戏 android popwindow选择商品规格颜色尺寸效果源码 实现Android带有锯齿背景的优惠样式源码 ...