npm install --save-dev css-loader
通过 webpack 配置,CLI或内联使用 loader。
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
}
]
}
}
在你的程序中
import css from 'file.css';
webpack --module-bind 'css=style-loader!css-loader'
在你的程序中
import css from 'file.css';
在你的程序中
import css from 'style-loader!css-loader!./file.css';
@import
和 url()
被当做成 import
并且会被 css-loader 解析.
比较好的 loaders 对于请求你的生产资源是 file-loader 和 url-loader 并且指定相应的配置 (见下文).
兼容现有的 css 文件 (当不是在 css 模块模式):
url(image.png)
=> require('./image.png')
url(~module/image.png)
=> require('module/image.png')
名称 | 默认值 | 描述 |
---|---|---|
root
|
/
|
解析 URLs 路径, URLs 以 / 开头将不会被翻译
|
modules
|
false
|
启用/禁用 css-modules 模式 |
import
|
true
|
启用/禁用 @import 处理 |
url
|
true
|
启用/禁用 url() 处理
|
minimize
|
true
|
启用/禁用 压缩 |
sourceMap
|
false
|
启用/禁用 Sourcemaps |
camelCase
|
false
|
导出以驼峰化命名的类名 |
importLoaders
|
0
|
在 css-loader 前应用的 loader 的数 |
此 webpack 配置可以加载 CSS 文件,嵌入小的 png 图像数据的 url 和 JPG 图像文件。
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
},
{
test: /\.png$/,
use: { loader: 'url-loader', options: { limit: 100000 } },
},
{
test: /\.jpg$/,
use: [ 'file-loader' ]
}
]
}
};
对于以一个 /
开头的 URLs,默认行为是不翻译:
url(/image.png)
=> url(/image.png)
如果设置了 root 参数,那么 root 参数将被添加到 URL 前面,然后被翻译:
webpack.config.js
rules: [
{
test: /\.css$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: { root: '.' }
}
]
}
]
url(/image.png)
=> require('./image.png')
不建议使用 'Root-relative' urls,您应该只将其用于旧版 CSS 文件。
默认情况下,CSS将所有的类暴露到全局的选择器作用域中。样式可以在局部作用域中,避免全局作用域的样式。
语法 :local(.className)
可以被用来在局部作用域中声明 className
。局部的作用域标识符会以模块形式暴露出去。
使用 :local
(无括号)可以为此选择器启用局部模式。 :global(.className)
可以用来声明一个明确的全局选择器。使用:global
(无括号)可以为此选择器打开全局模式。
加载器会用唯一的标识符来替换局部选择器。所选择的唯一标识符以模块形式暴露出去。
app.css
:local(.className) { background: red; }
:local .className { color: green; }
:local(.className .subClass) { color: green; }
:local .className .subClass :global(.global-class-name) { color: blue; }
app.bundle.css
._23_aKvs-b8bW2Vg3fwHozO { background: red; }
._23_aKvs-b8bW2Vg3fwHozO { color: green; }
._23_aKvs-b8bW2Vg3fwHozO ._13LGdX8RMStbBE9w-t0gZ1 { color: green; }
._23_aKvs-b8bW2Vg3fwHozO ._13LGdX8RMStbBE9w-t0gZ1 .global-class-name { color: blue; }
注意: 标识符被输出
exports.locals = {
className: '_23_aKvs-b8bW2Vg3fwHozO',
subClass: '_13LGdX8RMStbBE9w-t0gZ1'
}
建议本地选择器使用驼峰化。它们在导入 JS 模块中更容易使用。
url()
URLs 在块作用域 (:local .abc
) 规则中的表现像模块中的请求。
./file.png
instead of file.png
module/file.png
instead of ~module/file.png
你可以使用 :local(#someId)
,但它不被推荐。推荐用 class 代替 id。
你可以使用 localIdentName
查询参数(默认 [hash:base64]
)来配置生成的 ident。
webpack.config.js
{
test: /\.css$/,
use: [
{
loader: 'css-loader',
options: {
modules: true,
localIdentName: '[path][name]__[local]--[hash:base64:5]'
}
}
]
}
您还可以指定自定义 getLocalIdent
函数的绝对路径,以根据不同的模式生成类名。注意这需要 webpack >= v2.x.
因为能够传递函数。示例:
{
test: /\.css$/,
use: [
{
loader: 'css-loader',
options: {
modules: true,
localIdentName: '[path][name]__[local]--[hash:base64:5]',
getLocalIdent: (context, localIdentName, localName, options) => {
return 'whatever_random_class_name'
}
}
}
]
}
注意: 对于使用extract-text-webpack-plugin预呈现,你应该在 在预渲染 bundle 中 使用css-loader / locals而不是style-loader!css-loader。它不嵌入CSS,但只导出标识符映射。
查询参数模块启用 CSS 模块 规范。
这将默认启用本地作用于 CSS。(您可以使用:global(...)
或 :global
选择器或/和规则将其关闭。)
当声明一个本地类名时,你可以从另一个本地类名组合成一个本地类。
:local(.className) {
background: red;
color: yellow;
}
:local(.subClass) {
composes: className;
background: blue;
}
这不会更改 CSS 本身,但可以导出更多的类名。
exports.locals = {
className: '_23_aKvs-b8bW2Vg3fwHozO',
subClass: '_13LGdX8RMStbBE9w-t0gZ1 _23_aKvs-b8bW2Vg3fwHozO'
}
._23_aKvs-b8bW2Vg3fwHozO {
background: red;
color: yellow;
}
._13LGdX8RMStbBE9w-t0gZ1 {
background: blue;
}
从其他模块导入本地类名:
:local(.continueButton) {
composes: button from 'library/button.css';
background: red;
}
:local(.nameEdit) {
composes: edit highlight from './edit.css';
background: red;
}
要从多个模块导入,请使用多个 composes:
规则。
:local(.className) {
composes: edit hightlight from './edit.css';
composes: button from 'module/button.css';
composes: classFromThisModule;
background: red;
}
包含 Sourcemaps 的,设置 sourceMap
查询参数。
即 extract-text-webpack-plugin 可以处理它们。
默认情况下不启用它们,因为它们暴露了运行时的开销并增加了 bundle 的大小 (JS SourceMap 不会)。此外,相对路径是错误的,您需要使用包含服务器 URL 的绝对公用路径。
webpack.config.js
{
test: /\.css$/,
use: [
{
loader: 'css-loader',
options: {
sourceMap: true
}
}
]
}
应用于 @import
资源的 loaders 的查询参数 importLoaders
允许配置。
importLoaders
: 在 css-loader 之后的许多 loaders 用于导入资源。
webpack.config.js
{
test: /\.css$/,
use: [
{
loader: 'css-loader',
options: {
importLoaders: 1
}
},
'postcss-loader'
]
}
当模块系统 (即 webpack) 支持通过源的 loader 匹配时,这可能在将来会改变。
默认情况下,css-loader 是通过特定的模块系统来进行压缩 css 的。
某种情况下,压缩 css 是具有破坏性的,所以可以提供一些可选项。cssnano 被用来进行压缩,并且它具有一个可配置项列表.
也可以通过设置 查询参数minimize
的禁用或者启用来进行压缩。
webpack.config.js
{
test: /\.css$/,
use: [
{
loader: 'css-loader',
options: {
minimize: true || {/* CSSNano Options */}
}
}
]
}
默认情况下,导出 JSON 键值对形式的类名。如果想要 camelize 类名(在 JS 中应用),通过设置 css-loader 的查询参数 camelCase 即可实现。
webpack.config.js
{
test: /\.css$/,
use: [
{
loader: 'css-loader',
options: {
camelCase: true
}
}
]
}
.class-name {}
import { className } from 'file.css';
Tobias Koppers |