简朴明白带你相识CSS Modules(2)

很遗憾,CSS Modules官方的例子,也是这个意思:要利用CSS Modules,必需想步伐把变量气势气魄的class名注入到html中。也就是说,html模板系统是必须的,也正是如此,对比普通css的环境,CSS Modules的html写起来要更为费劲。

假如你搜一下CSS Modules的demo,可以发明大部门都是基于React的。显然,虚拟DOM气势气魄的React,搭配CSS Modules会很容易(ES6):

import styles from './ScopedSelectors.css'; import React, { Component } from 'react'; export default class ScopedSelectors extends Component { render() { return ( <div className={ styles.root }> <p className={ styles.text }>Scoped Selectors</p> </div> ); } };

假如不利用React,照旧那句话,只要有步伐把变量气势气魄的class名注入到html中,就可以用CSS Modules。原始的字符串拼接的写法显然很糟糕,但我们可以借助各类模板引擎和编译东西做一些改造。下面请看一个用Jade的参考示例。

想象一下你有一个用普通css的页面,但你想在一小块区域利用CSS Modules。这一块区域在一个容器元素里:

<div></div>

后用jade来写html(关联的css文件为module_sp.css):

- styles = require("./module_sp.css"); h2(class=styles.title) a title for CSS Modules

接下来,仍然是在javascript里添加这段jade生成的html:

var el = document.getElementById("module_sp_container"); var template = require("./main.jade"); el.innerHTML = template();

最后,记得在css-loader启用CSS Modules的同时,增加jade-loader:

{ test: /\.jade$/, loader: 'jade' }

编译运行,就可以获得想要的功效。除Jade以外,尚有些其他CSS Modules的html应用方案,推荐参考github上的这篇issue

今朝CSS Modules还在成长中,并且也在思量改造CSS Modules下的html写作体验。CSS Modules团队成员有提到一个叫CSS Modules Injector的将来筹划项目,目标是让开拓者不消javascript也可以利用CSS Modules(这就很靠近原生html + css的组合了)。

CSS Modules下的样式复用

“样式都是独一的了,怎么复用?”

我们已经说了挺多普通css单个全局浸染域的弊端。但对应的,这也有一个很大的长处,就是便于实现样式的复用。css理论OOCSS也是在追求这一点。

CSS Modules提供一个composes要领用于样式复用。譬喻,你有一个btn.css里有一条:

.btn{ display: inline-block; }

然后,你在另一个CSS Module的module_sp.css里可以这样引入它:

.btn-sp{ composes: btn from "./btn.css"; font-size: 16px; }

那么,这个div.btn-sp的DOM元素将会是:

简单大白带你领会CSS Modules

可以看到,composes的用法较量雷同sass的@extend,但差异于@extend的是,composes并不增加css里的选择符总量,而是回收组合多个class名的形式。在这个例子里,原本仅有1个class的div.btn-sp,酿成了2个class。

因此,CSS Modules发起只利用1个class就界说好对应元素所需的全部样式。它们会再由CSS Modules转换为适当的class组合。

CSS Modules团队成员认为composes是CSS Modules里最强大的成果:

For me, the most powerful idea in CSS Modules is composition, where you can deconstruct your visual inventory into atomic classes, and assemble them at a module level, without duplicating markup or hindering performance.

更具体的composes的用法及其领略,推荐阅读CSS Modules: Welcome to the Future

其他大概有用的增补

和已有的普通css共存

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsjyyw.html