每日一译系列-模块化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 ...
随机推荐
- Python笔记_第三篇_面向对象_1.面向对象的基本概念和作用域
1. 软件编程的实质: 软件编程就是将我们的思维转变成计算机能够识别语言的一个过程.重要的是思想,代码技术反而次要.因此思想也是最难的,突破固定的思想是关键 2. 什么是面向过程: * 自上而下顺序执 ...
- HDU - 1754 线段树
#include <algorithm> #include <iostream> #include<sstream> #include<cstring> ...
- ubuntu16.04更换 apt-get 阿里源
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties deb ht ...
- Spring Boot从入门到放弃-Spring Boot 整合测试
站长资讯摘要:使用Spring Boot 整合测试,对Controller 中某个方法进行测试或者对Service,Mapper等进行测试,不需要运行项目即可查看运行结果是否和期望值相同,Spring ...
- Solving ordinary differential equations I(Nonstiff Problems),Exercise 1.2:A wrong solution
(Newton 1671, “Problema II, Solutio particulare”). Solve the total differential equation $$3x^2-2ax+ ...
- 基础篇四:Ngnix安装
然后直接 yum install nginx 安装nginx
- vue实现动态绑定class--多个按钮点击一个有一个
<template> //v-for循环出来多个按钮,便于获取index <span v-for="(item,index) in list" : ...
- linux 有了源码创建git版本库(coding)
进入目录,比如ewei_shop 执行 git init 瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),当前目录下多了一个.git的目录,如果没有看到 ...
- StartDT_AI_Lab | 开启“数据+算法”定义的新世界
继「数据中台技术汇」栏目推出以来,获得了不少技术极客的喜爱.作为AI驱动的数据中台创导者,深度关注核心算法技术的自研创新.融合探索,故推出全新AI算法栏目「StartDT_AI_Lab」,主要介绍算法 ...
- 106)PHP,缩略图代码和结果展示
首先是 代码展示: <?php class CImage { /** * 生成保持原图纵横比的缩略图,支持.png .jpg .gif * 缩略图类型统一为.png格式 *@param $src ...