The css-loader
interprets @import
and url()
like import/require()
and will resolve them.
⚠ To use css-loader, webpack@5 is required
To begin, you'll need to install css-loader
:
npm install --save-dev css-loader
Then add the plugin to your webpack
config. For example:
file.js
import css from "file.css";
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: ["style-loader", "css-loader"],
},
],
},
};
And run webpack
via your preferred method.
If, for one reason or another, you need to extract CSS as a file (i.e. do not store CSS in a JS module) you might want to check out the recommend example.
Name | Type | Default | Description |
---|---|---|---|
url |
{Boolean|Object} |
true |
Allows to enables/disables url() /image-set() functions handling |
import |
{Boolean|Object} |
true |
Allows to enables/disables @import at-rules handling |
modules |
{Boolean|String|Object} |
{auto: true} |
Allows to enables/disables or setup CSS Modules options |
sourceMap |
{Boolean} |
compiler.devtool |
Enables/Disables generation of source maps |
importLoaders |
{Number} |
0 |
Allows enables/disables or setups number of loaders applied before CSS loader for @import /CSS Modules and ICSS imports |
esModule |
{Boolean} |
true |
Use ES modules syntax |
exportType |
{'array' | 'string' | 'css-style-sheet'} |
array |
Allows exporting styles as array with modules, string or constructable stylesheet (i.e. CSSStyleSheet ) |
url
Type: Boolean|Object
Default: true
Allow to enable/disables handling the CSS functions url
and image-set
.If set to false
, css-loader
will not parse any paths specified in url
or image-set
.A function can also be passed to control this behavior dynamically based on the path to the asset.Starting with version 4.0.0, absolute paths are parsed based on the server root.
Examples resolutions:
url(image.png) => require('./image.png')
url('image.png') => require('./image.png')
url(./image.png) => require('./image.png')
url('./image.png') => require('./image.png')
url('http://dontwritehorriblecode.com/2112.png') => require('http://dontwritehorriblecode.com/2112.png')
image-set(url('image2x.png') 1x, url('image1x.png') 2x) => require('./image1x.png') and require('./image2x.png')
To import assets from a node_modules
path (include resolve.modules
) and for alias
, prefix it with a ~
:
url(~module/image.png) => require('module/image.png')
url('~module/image.png') => require('module/image.png')
url(~aliasDirectory/image.png) => require('otherDirectory/image.png')
Boolean
Enable/disable url()
resolving.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
url: true,
},
},
],
},
};
Object
Allow to filter url()
. All filtered url()
will not be resolved (left in the code as they were written).
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
url: {
filter: (url, resourcePath) => {
// resourcePath - path to css file
// Don't handle `img.png` urls
if (url.includes("img.png")) {
return false;
}
return true;
},
},
},
},
],
},
};
import
Type: Boolean|Object
Default: true
Allows to enables/disables @import
at-rules handling.Control @import
resolving. Absolute urls in @import
will be moved in runtime code.
Examples resolutions:
@import 'style.css' => require('./style.css')
@import url(style.css) => require('./style.css')
@import url('style.css') => require('./style.css')
@import './style.css' => require('./style.css')
@import url(./style.css) => require('./style.css')
@import url('./style.css') => require('./style.css')
@import url('http://dontwritehorriblecode.com/style.css') => @import url('http://dontwritehorriblecode.com/style.css') in runtime
To import styles from a node_modules
path (include resolve.modules
) and for alias
, prefix it with a ~
:
@import url(~module/style.css) => require('module/style.css')
@import url('~module/style.css') => require('module/style.css')
@import url(~aliasDirectory/style.css) => require('otherDirectory/style.css')
Boolean
Enable/disable @import
resolving.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
import: true,
},
},
],
},
};
Object
Name | Type | Default | Description |
---|---|---|---|
filter |
{Function} |
undefined |
Allow to filter @import |
filter
Type: Function
Default: undefined
Allow to filter @import
. All filtered @import
will not be resolved (left in the code as they were written).
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
import: {
filter: (url, media, resourcePath) => {
// resourcePath - path to css file
// Don't handle `style.css` import
if (url.includes("style.css")) {
return false;
}
return true;
},
},
},
},
],
},
};
modules
Type: Boolean|String|Object
Default: undefined
Allows to enable/disable CSS Modules or ICSS and setup configuration:
undefined
- enable CSS modules for all files matching /\.module\.\w+$/i.test(filename)
and /\.icss\.\w+$/i.test(filename)
regexp.true
- enable CSS modules for all files.false
- disables CSS Modules for all files.string
- disables CSS Modules for all files and set the mode
option, more information you can read hereobject
- enable CSS modules for all files, if modules.auto
option is not specified, otherwise the modules.auto
option will determine whether if it is CSS modules or not, more information you can read hereThe modules
option enables/disables the CSS Modules specification and setup basic behaviour.
Using false
value increase performance because we avoid parsing CSS Modules features, it will be useful for developers who use vanilla css or use other technologies.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: true,
},
},
],
},
};
Features
Scope
Using local
value requires you to specify :global
classes.Using global
value requires you to specify :local
classes.Using pure
value requires selectors must contain at least one local class or id.
You can find more information here.
Styles can be locally scoped to avoid globally scoping styles.
The syntax :local(.className)
can be used to declare className
in the local scope. The local identifiers are exported by the module.
With :local
(without brackets) local mode can be switched on for this selector.The :global(.className)
notation can be used to declare an explicit global selector.With :global
(without brackets) global mode can be switched on for this selector.
The loader replaces local selectors with unique identifiers. The chosen unique identifiers are exported by the module.
:local(.className) {
background: red;
}
:local .className {
color: green;
}
:local(.className .subClass) {
color: green;
}
:local .className .subClass :global(.global-class-name) {
color: blue;
}
._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;
}
ℹ️ Identifiers are exported
exports.locals = {
className: "_23_aKvs-b8bW2Vg3fwHozO",
subClass: "_13LGdX8RMStbBE9w-t0gZ1",
};
CamelCase is recommended for local selectors. They are easier to use within the imported JS module.
You can use :local(#someId)
, but this is not recommended. Use classes instead of ids.
Composing
When declaring a local classname you can compose a local class from another local classname.
:local(.className) {
background: red;
color: yellow;
}
:local(.subClass) {
composes: className;
background: blue;
}
This doesn't result in any change to the CSS itself but exports multiple classnames.
exports.locals = {
className: "_23_aKvs-b8bW2Vg3fwHozO",
subClass: "_13LGdX8RMStbBE9w-t0gZ1 _23_aKvs-b8bW2Vg3fwHozO",
};
._23_aKvs-b8bW2Vg3fwHozO {
background: red;
color: yellow;
}
._13LGdX8RMStbBE9w-t0gZ1 {
background: blue;
}
Importing
To import a local classname from another module.
i We strongly recommend that you specify the extension when importing a file, since it is possible to import a file with any extension and it is not known in advance which file to use.
:local(.continueButton) {
composes: button from "library/button.css";
background: red;
}
:local(.nameEdit) {
composes: edit highlight from "./edit.css";
background: red;
}
To import from multiple modules use multiple composes:
rules.
:local(.className) {
composes: edit hightlight from "./edit.css";
composes: button from "module/button.css";
composes: classFromThisModule;
background: red;
}
Values
You can use @value
to specific values to be reused throughout a document.
We recommend use prefix v-
for values, s-
for selectors and m-
for media at-rules.
@value v-primary: #BF4040;
@value s-black: black-selector;
@value m-large: (min-width: 960px);
.header {
color: v-primary;
padding: 0 10px;
}
.s-black {
color: black;
}
@media m-large {
.header {
padding: 0 20px;
}
}
Boolean
Enable CSS Modules features.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: true,
},
},
],
},
};
String
Enable CSS Modules features and setup mode
.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
// Using `local` value has same effect like using `modules: true`
modules: "global",
},
},
],
},
};
Object
Enable CSS Modules features and setup options for them.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
mode: "local",
auto: true,
exportGlobals: true,
localIdentName: "[path][name]__[local]--[hash:base64:5]",
localIdentContext: path.resolve(__dirname, "src"),
localIdentHashSalt: "my-custom-hash",
namedExport: true,
exportLocalsConvention: "camelCase",
exportOnlyLocals: false,
},
},
},
],
},
};
auto
Type: Boolean|RegExp|Function
Default: undefined
Allows auto enable CSS modules/ICSS based on filename when modules
option is object.
Possible values:
undefined
- enable CSS modules for all files.true
- enable CSS modules for all files matching /\.module\.\w+$/i.test(filename)
and /\.icss\.\w+$/i.test(filename)
regexp.false
- disables CSS Modules.RegExp
- enable CSS modules for all files matching /RegExp/i.test(filename)
regexp.function
- enable CSS Modules for files based on the filename satisfying your filter function check.Boolean
Possible values:
true
- enables CSS modules or interoperable CSS format, sets the modules.mode
option to local
value for all files which satisfy /\.module(s)?\.\w+$/i.test(filename)
condition or sets the modules.mode
option to icss
value for all files which satisfy /\.icss\.\w+$/i.test(filename)
conditionfalse
- disables CSS modules or interoperable CSS format based on filenamewebpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
auto: true,
},
},
},
],
},
};
RegExp
Enable css modules for files based on the filename satisfying your regex check.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
auto: /\.custom-module\.\w+$/i,
},
},
},
],
},
};
Function
Enable css modules for files based on the filename satisfying your filter function check.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
auto: (resourcePath) => resourcePath.endsWith(".custom-module.css"),
},
},
},
],
},
};
mode
Type: String|Function
Default: 'local'
Setup mode
option. You can omit the value when you want local
mode.
Controls the level of compilation applied to the input styles.
The local
, global
, and pure
handles class
and id
scoping and @value
values.The icss
will only compile the low level Interoperable CSS
format for declaring :import
and :export
dependencies between CSS and other languages.
ICSS underpins CSS Module support, and provides a low level syntax for other tools to implement CSS-module variations of their own.
String
Possible values - local
, global
, pure
, and icss
.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
mode: "global",
},
},
},
],
},
};
Function
Allows set different values for the mode
option based on a filename
Possible return values - local
, global
, pure
and icss
.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
// Callback must return "local", "global", or "pure" values
mode: (resourcePath) => {
if (/pure.css$/i.test(resourcePath)) {
return "pure";
}
if (/global.css$/i.test(resourcePath)) {
return "global";
}
return "local";
},
},
},
},
],
},
};
localIdentName
Type: String
Default: '[hash:base64]'
Allows to configure the generated local ident name.
For more information on options see:
Supported template strings:
[name]
the basename of the resource[folder]
the folder the resource relative to the compiler.context
option or modules.localIdentContext
option.[path]
the path of the resource relative to the compiler.context
option or modules.localIdentContext
option.[file]
- filename and path.[ext]
- extension with leading .
.[hash]
- the hash of the string, generated based on localIdentHashSalt
, localIdentHashFunction
, localIdentHashDigest
, localIdentHashDigestLength
, localIdentContext
, resourcePath
and exportName
[<hashFunction>#⃣<hashDigest>:<hashDigestLength>]
- hash with hash settings.[local]
- original class.Recommendations:
'[path][name]__[local]'
for development'[hash:base64]'
for productionThe [local]
placeholder contains original class.
Note: all reserved (<>:"/\|?*
) and control filesystem characters (excluding characters in the [local]
placeholder) will be converted to -
.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
localIdentName: "[path][name]__[local]--[hash:base64:5]",
},
},
},
],
},
};
localIdentContext
Type: String
Default: compiler.context
Allows to redefine basic loader context for local ident name.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
localIdentContext: path.resolve(__dirname, "src"),
},
},
},
],
},
};
localIdentHashSalt
Type: String
Default: undefined
Allows to add custom hash to generate more unique classes.For more information see output.hashSalt.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
localIdentHashSalt: "hash",
},
},
},
],
},
};
localIdentHashFunction
Type: String
Default: md4
Allows to specify hash function to generate classes .For more information see output.hashFunction.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
localIdentHashFunction: "md4",
},
},
},
],
},
};
localIdentHashDigest
Type: String
Default: hex
Allows to specify hash digest to generate classes.For more information see output.hashDigest.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
localIdentHashDigest: "base64",
},
},
},
],
},
};
localIdentHashDigestLength
Type: Number
Default: 20
Allows to specify hash digest length to generate classes.For more information see output.hashDigestLength.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
localIdentHashDigestLength: 5,
},
},
},
],
},
};
localIdentRegExp
Type: String|RegExp
Default: undefined
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
localIdentRegExp: /page-(.*)\.css/i,
},
},
},
],
},
};
getLocalIdent
Type: Function
Default: undefined
Allows to specify a function to generate the classname.By default we use built-in function to generate a classname.If the custom function returns null
or undefined
, we fallback to thebuilt-in function to generate the classname.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
getLocalIdent: (context, localIdentName, localName, options) => {
return "whatever_random_class_name";
},
},
},
},
],
},
};
namedExport
Type: Boolean
Default: false
Enables/disables ES modules named export for locals.
⚠ Names of locals are converted to camelcase, i.e. theexportLocalsConvention
option hascamelCaseOnly
value by default.
⚠ It is not allowed to use JavaScript reserved words in css class names.
styles.css
.foo-baz {
color: red;
}
.bar {
color: blue;
}
index.js
import { fooBaz, bar } from "./styles.css";
console.log(fooBaz, bar);
You can enable a ES module named export using:
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
esModule: true,
modules: {
namedExport: true,
},
},
},
],
},
};
To set a custom name for namedExport, can use exportLocalsConvention
option as a function.Example below in the examples
section.
exportGlobals
Type: Boolean
Default: false
Allow css-loader
to export names from global class or id, so you can use that as local name.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
exportGlobals: true,
},
},
},
],
},
};
exportLocalsConvention
Type: String|Function
Default: based on the modules.namedExport
option value, if true
- camelCaseOnly
, otherwise asIs
Style of exported class names.
String
By default, the exported JSON keys mirror the class names (i.e asIs
value).
⚠ OnlycamelCaseOnly
value allowed if you set thenamedExport
value totrue
.
Name | Type | Description |
---|---|---|
'asIs' |
{String} |
Class names will be exported as is. |
'camelCase' |
{String} |
Class names will be camelized, the original class name will not to be removed from the locals |
'camelCaseOnly' |
{String} |
Class names will be camelized, the original class name will be removed from the locals |
'dashes' |
{String} |
Only dashes in class names will be camelized |
'dashesOnly' |
{String} |
Dashes in class names will be camelized, the original class name will be removed from the locals |
file.css
.class-name {
}
file.js
import { className } from "file.css";
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
exportLocalsConvention: "camelCase",
},
},
},
],
},
};
Function
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
exportLocalsConvention: function (name) {
return name.replace(/-/g, "_");
},
},
},
},
],
},
};
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
exportLocalsConvention: function (name) {
return [
name.replace(/-/g, "_"),
// dashesCamelCase
name.replace(/-+(\w)/g, (match, firstLetter) =>
firstLetter.toUpperCase()
),
];
},
},
},
},
],
},
};
exportOnlyLocals
Type: Boolean
Default: false
Export only locals.
Useful when you use css modules for pre-rendering (for example SSR).For pre-rendering with mini-css-extract-plugin
you should use this option instead of style-loader!css-loader
in the pre-rendering bundle.It doesn't embed CSS but only exports the identifier mappings.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
exportOnlyLocals: true,
},
},
},
],
},
};
importLoaders
Type: Number
Default: 0
Allows to enables/disables or setups number of loaders applied before CSS loader for @import
at-rules, CSS modules and ICSS imports, i.e. @import
/composes
/@value value from './values.css'
/etc.
The option importLoaders
allows you to configure how many loaders before css-loader
should be applied to @import
ed resources and CSS modules/ICSS imports.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: [
"style-loader",
{
loader: "css-loader",
options: {
importLoaders: 2,
// 0 => no loaders (default);
// 1 => postcss-loader;
// 2 => postcss-loader, sass-loader
},
},
"postcss-loader",
"sass-loader",
],
},
],
},
};
This may change in the future when the module system (i. e. webpack) supports loader matching by origin.
sourceMap
Type: Boolean
Default: depends on the compiler.devtool
value
By default generation of source maps depends on the devtool
option. All values enable source map generation except eval
and false
value.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
sourceMap: true,
},
},
],
},
};
esModule
Type: Boolean
Default: true
By default, css-loader
generates JS modules that use the ES modules syntax.There are some cases in which using ES modules is beneficial, like in the case of module concatenation and tree shaking.
You can enable a CommonJS modules syntax using:
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
esModule: false,
},
},
],
},
};
exportType
Type: 'array' | 'string' | 'css-style-sheet'
Default: 'array'
Allows exporting styles as array with modules, string or constructable stylesheet (i.e. CSSStyleSheet
).Default value is 'array'
, i.e. loader exports array of modules with specific API which is used in style-loader
or other.
webpack.config.js
module.exports = {
module: {
rules: [
{
assert: { type: "css" },
loader: "css-loader",
options: {
exportType: "css-style-sheet",
},
},
],
},
};
src/index.js
import sheet from "./styles.css" assert { type: "css" };
document.adoptedStyleSheets = [sheet];
shadowRoot.adoptedStyleSheets = [sheet];
'array'
The default export is array of modules with specific API which is used in style-loader
or other.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/i,
use: ["style-loader", "css-loader", "postcss-loader", "sass-loader"],
},
],
},
};
src/index.js
// `style-loader` applies styles to DOM
import "./styles.css";
'string'
⚠ You don't needstyle-loader
anymore, please remove it.⚠ TheesModules
option should be enabled if you want to use it withCSS modules
, by default for locals will be used named export.
The default export is string
.
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/i,
use: ["css-loader", "postcss-loader", "sass-loader"],
},
],
},
};
src/index.js
import sheet from "./styles.css";
console.log(sheet);
'css-style-sheet'
⚠ @import
rules not yet allowed, more information⚠ You don't needstyle-loader
anymore, please remove it.⚠ TheesModules
option should be enabled if you want to use it withCSS modules
, by default for locals will be used named export.⚠ Source maps are not currently supported inChrome
due bug
The default export is a constructable stylesheet (i.e. CSSStyleSheet
).
Useful for custom elements and shadow DOM.
More information:
webpack.config.js
module.exports = {
module: {
rules: [
{
assert: { type: "css" },
loader: "css-loader",
options: {
exportType: "css-style-sheet",
},
},
// For Sass/SCSS:
//
// {
// assert: { type: "css" },
// rules: [
// {
// loader: "css-loader",
// options: {
// exportType: "css-style-sheet",
// // Other options
// },
// },
// {
// loader: "sass-loader",
// options: {
// // Other options
// },
// },
// ],
// },
],
},
};
src/index.js
// Example for Sass/SCSS:
// import sheet from "./styles.scss" assert { type: "css" };
// Example for CSS modules:
// import sheet, { myClass } from "./styles.scss" assert { type: "css" };
// Example for CSS:
import sheet from "./styles.css" assert { type: "css" };
document.adoptedStyleSheets = [sheet];
shadowRoot.adoptedStyleSheets = [sheet];
For migration purposes, you can use the following configuration:
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
oneOf: [
{
assert: { type: "css" },
loader: "css-loader",
options: {
exportType: "css-style-sheet",
// Other options
},
},
{
use: [
"style-loader",
{
loader: "css-loader",
options: {
// Other options
},
},
],
},
],
},
],
},
};
For production
builds it's recommended to extract the CSS from your bundle being able to use parallel loading of CSS/JS resources later on.This can be achieved by using the mini-css-extract-plugin, because it creates separate css files.For development
mode (including webpack-dev-server
) you can use style-loader, because it injects CSS into the DOM using multiple <style></style> and works faster.
i Do not use together
style-loader
andmini-css-extract-plugin
.
webpack.config.js
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const devMode = process.env.NODE_ENV !== "production";
module.exports = {
module: {
rules: [
{
test: /\.(sa|sc|c)ss$/i,
use: [
devMode ? "style-loader" : MiniCssExtractPlugin.loader,
"css-loader",
"postcss-loader",
"sass-loader",
],
},
],
},
plugins: [].concat(devMode ? [] : [new MiniCssExtractPlugin()]),
};
/* webpackIgnore: true */
commentWith the help of the /* webpackIgnore: true */
comment, it is possible to disable sources handling for rules and for individual declarations.
/* webpackIgnore: true */
@import url(./basic.css);
@import /* webpackIgnore: true */ url(./imported.css);
.class {
/* Disabled url handling for the all urls in the 'background' declaration */
color: red;
/* webpackIgnore: true */
background: url("./url/img.png"), url("./url/img.png");
}
.class {
/* Disabled url handling for the first url in the 'background' declaration */
color: red;
background:
/* webpackIgnore: true */ url("./url/img.png"), url("./url/img.png");
}
.class {
/* Disabled url handling for the second url in the 'background' declaration */
color: red;
background: url("./url/img.png"),
/* webpackIgnore: true */ url("./url/img.png");
}
/* prettier-ignore */
.class {
/* Disabled url handling for the second url in the 'background' declaration */
color: red;
background: url("./url/img.png"),
/* webpackIgnore: true */
url("./url/img.png");
}
/* prettier-ignore */
.class {
/* Disabled url handling for third and sixth urls in the 'background-image' declaration */
background-image: image-set(
url(./url/img.png) 2x,
url(./url/img.png) 3x,
/* webpackIgnore: true */ url(./url/img.png) 4x,
url(./url/img.png) 5x,
url(./url/img.png) 6x,
/* webpackIgnore: true */
url(./url/img.png) 7x
);
}
The following webpack.config.js
can load CSS files, embed small PNG/JPG/GIF/SVG images as well as fonts as Data URLs and copy larger files to the output directory.
For webpack v5:
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: ["style-loader", "css-loader"],
},
{
test: /\.(png|jpe?g|gif|svg|eot|ttf|woff|woff2)$/i,
// More information here https://webpack.js.org/guides/asset-modules/
type: "asset",
},
],
},
};
For production builds it's recommended to extract the CSS from your bundle being able to use parallel loading of CSS/JS resources later on.
This can be achieved by using the mini-css-extract-plugin to extract the CSS when running in production mode.
As an alternative, if seeking better development performance and css outputs that mimic production. extract-css-chunks-webpack-plugin offers a hot module reload friendly, extended version of mini-css-extract-plugin. HMR real CSS files in dev, works like mini-css in non-dev
When you have pure CSS (without CSS modules), CSS modules and PostCSS in your project you can use this setup:
webpack.config.js
module.exports = {
module: {
rules: [
{
// For pure CSS - /\.css$/i,
// For Sass/SCSS - /\.((c|sa|sc)ss)$/i,
// For Less - /\.((c|le)ss)$/i,
test: /\.((c|sa|sc)ss)$/i,
use: [
"style-loader",
{
loader: "css-loader",
options: {
// Run `postcss-loader` on each CSS `@import` and CSS modules/ICSS imports, do not forget that `sass-loader` compile non CSS `@import`'s into a single file
// If you need run `sass-loader` and `postcss-loader` on each CSS `@import` please set it to `2`
importLoaders: 1,
},
},
{
loader: "postcss-loader",
options: { plugins: () => [postcssPresetEnv({ stage: 0 })] },
},
// Can be `less-loader`
{
loader: "sass-loader",
},
],
},
// For webpack v5
{
test: /\.(png|jpe?g|gif|svg|eot|ttf|woff|woff2)$/i,
// More information here https://webpack.js.org/guides/asset-modules/
type: "asset",
},
],
},
};
index.css
.class {
background: url(/assets/unresolved/img.png);
}
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: ["style-loader", "css-loader"],
},
],
},
resolve: {
alias: {
"/assets/unresolved/img.png": path.resolve(
__dirname,
"assets/real-path-to-img/img.png"
),
},
},
};
webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: "css-loader",
options: {
modules: {
namedExport: true,
exportLocalsConvention: function (name) {
return name.replace(/-/g, "_");
},
},
},
},
],
},
};
Interoperable CSS
-only and CSS Module
featuresThe following setup is an example of allowing Interoperable CSS
features only (such as :import
and :export
) without using further CSS Module
functionality by setting mode
option for all files that do not match *.module.scss
naming convention. This is for reference as having ICSS
features applied to all files was default css-loader
behavior before v4.Meanwhile all files matching *.module.scss
are treated as CSS Modules
in this example.
An example case is assumed where a project requires canvas drawing variables to be synchronized with CSS - canvas drawing uses the same color (set by color name in JavaScript) as HTML background (set by class name in CSS).
webpack.config.js
module.exports = {
module: {
rules: [
// ...
// --------
// SCSS ALL EXCEPT MODULES
{
test: /\.scss$/i,
exclude: /\.module\.scss$/i,
use: [
{
loader: "style-loader",
},
{
loader: "css-loader",
options: {
importLoaders: 1,
modules: {
mode: "icss",
},
},
},
{
loader: "sass-loader",
},
],
},
// --------
// SCSS MODULES
{
test: /\.module\.scss$/i,
use: [
{
loader: "style-loader",
},
{
loader: "css-loader",
options: {
importLoaders: 1,
modules: {
mode: "local",
},
},
},
{
loader: "sass-loader",
},
],
},
// --------
// ...
],
},
};
variables.scss
File treated as ICSS
-only.
$colorBackground: red;
:export {
colorBackgroundCanvas: $colorBackground;
}
Component.module.scss
File treated as CSS Module
.
@import "variables.scss";
.componentClass {
background-color: $colorBackground;
}
Component.jsx
Using both CSS Module
functionality as well as SCSS variables directly in JavaScript.
import svars from "variables.scss";
import styles from "Component.module.scss";
// Render DOM with CSS modules class name
// <div className={styles.componentClass}>
// <canvas ref={mountsCanvas}/>
// </div>
// Somewhere in JavaScript canvas drawing code use the variable directly
// const ctx = mountsCanvas.current.getContext('2d',{alpha: false});
ctx.fillStyle = `${svars.colorBackgroundCanvas}`;
Please take a moment to read our contributing guidelines if you haven't yet done so.
前言 大家伙都清楚在使用webpack构建前端项目时都会使用到sass-loader、less-loader、postcss-loader、css-loader、style-loader,但这些loader在其中起到什么作用呢?本篇主要阐述css-loader与style-loader的作用和实现,加深对loader的理解。 css-loader css-loader 会对 @import 和 u
问题详细 *!!vue-style-loader!css-loader?{“sourceMap”:true}!../…/…/…/vue-loader/lib/style-compiler/index?{“vue”:true,”id”:”data-v-570115ee”,”scoped”:false,”hasInlineConfig”:false} !../…/…/…/vux-loader/src/
npm run dev 报错 These dependencies were not found: * !!vue-style-loader!css-loader?{"sourceMap":true}!../../node_modules/vue-loader/lib/style-compiler/index?{"vue":true,"id":"data-v-858b20d4","scoped"
本文讲解css-loader、style-loader和isomorphic-style-loader的实现原理,而不会讲解它们的具体用法,具体用法请参考其他文档。我是如何知道它们是这么实现的呢?我没有看它们的源代码,而是通过查看webpack打包后生成的代码。为了留下更深刻的印象,就写下了本文。 css-loader原理 有个很奇怪的事情,在JS文件中竟然能够导入CSS文件(通过impo
继续我们上一篇的webpack学习,现在我们进一步学习 其他的配置 css-loader:用于让webpack加载这个css文件 安装:npm install css-loader -D / npm install style-loader -D 配置: package.config.js const path = require('path'); module.exports = { m
简单记录一下webpack对css样式进行打包的三个插件 按照顺序 less-loader 当项目中使用less时需要同时引入less-loader,浏览器不能直接编译less,需要less-loader将less语法转化为css css-loader css-loader作用是解析css文件的@import和url语句,处理css模块,并将处理的结果以js模块返回 经过css-loader的处理
描述 (Description) 防护用于匹配简单值或表达式上的许多参数。 它适用于CSS选择器。 它是声明mixin并立即调用它的语法。 要成功显示if类型语句; 加入这个功能& ,它允许您分组多个警卫。 例子 (Example) 以下示例演示了在LESS文件中使用css guard - css_guard.htm <!doctype html> <head> <link re
在上一个章节中我们学习了混合守卫,但是在某些场景下我们不只是需要对 Mixin 进行条件判断,css 的样式类也是需要进行条件判断的,此时我们就需要使用到 CSS 守卫了。注意,该语法是在 v1.5.0 版本之后添加的,建议大家跟我下载同样的版本进行学习。 1. 语法定义 官方定义: “if”'s around selectors. 慕课解释: 类似与 Mixins 守卫,在选择器中使用类似于 “
下面是 jQuery UI 使用的 Class 名称列表。这些 Class 用来创建跨应用程序的视觉一致性,且允许组件通过 jQuery UI ThemeRoller 进行主题化。下面的 CSS 类根据样式是否是固定的结构化的,或者是否是可主题化的(颜色、字体、背景等),分别定义在 ui.core.css 和 ui.theme.css 两个文件中。 布局助手 .ui-helper-hidden:对
目录 文档流 盒模型 包含块 视口 格式化上下文 块格式化上下文(Block Formatting Context,BFC) 行格式化上下文(Inline Formatting Context,IFC) 网格格式化上下文(Grid Formatting Context,GFC) 伸缩格式化上下文(Flex Formatting Context,FFC) 层叠上下文 定位 浮动 资料 MDN
jQuery库支持Cascading Style Sheet(CSS)规范1到3中包含的几乎所有选择器,如万维网联盟网站所述。 只要浏览器启用了JavaScript,使用JQuery库开发人员就可以增强他们的网站,而无需担心浏览器及其版本。 大多数JQuery CSS方法不修改jQuery对象的内容,它们用于在DOM元素上应用CSS属性。 应用CSS属性 使用JQuery方法css( Proper
描述 (Description) @import (css) keyword将文件作为常规CSS导入,而不管文件扩展名如何。 这是在version 1.4.0中发布的。 例子 (Example) 以下示例演示了在LESS文件中使用css关键字 - <html> <head> <link rel = "stylesheet" href = "style.css" type = "t
CSS 简介 CSS (Cascading Stylesheet) 它用于设置页面的表现。CSS3 并不是一个完整的独立版本而是将不同的功能拆分成独立模块(例如,选择器模块,盒模型模块),这有利于不同功能的及时更新与发布也利于浏览器厂商的实习。 CSS 引入方法 // 外部样式表 <head> <link rel="stylesheet" type="text/css" href="style
CSS 是浏览器中用来指定文档如何展示给用户的一门语言——如网页的样式、布局、等等,不仅限于浏览器,它也被其它的一些 UI 开发库所支持,而出于研发和学习成本上的考虑,LCUI 也选择采用 CSS 来控制界面样式。 LCUI 将 CSS 引擎划分为数据库和解析器两模块,前者用于将 CSS 数据以便于操作和查询的数据结构存储在内存中,而后者则负责将包含 CSS 代码的字符串解析成适合读写的数据结构并