css-loader 笔记 (局部、全局样式 webpack 配置)React 中应用

没配置 modules 和 localIdentName 时

// webpack.config.dev.js
{
  loader: require.resolve('css-loader'),
  options: {
    importLoaders: 1,
  },
},
/* ./src/components/Greeting/index.css */
:local(.red) { color: red; }

/*
 * When declaring a local classname you can
 * compose a local class from another local classname.
 * <https://github.com/webpack-contrib/css-loader>
 */
:local(.green) {
  composes: red;
  color: green;
}

:local(.btnGoodbye) {
  composes: bye hi from '../Goodbye/index.css';
  color: crimson;
}

:local(h2) {
  color: chocolate;
}

.blue {
  color: blue;
}

/* styles.css */
.App {
  font-family: sans-serif;
  text-align: center;
}
12334242-6b11dbf67b3796a4.png
css-loader without modules localIdentName

配置了 modules 和 localIdentName 时

{
  loader: require.resolve('css-loader'),
  options: {
    importLoaders: 1,
    modules: true,
    localIdentName: '[path][name]__[local]--[hash:base64:5]',
    camelCase: true //  Export Classnames in CamelCase
  },
},
/* ./src/components/Greeting/index.css */
:local(.red) { color: red; }

/*
 * When declaring a local classname you can
 * compose a local class from another local classname.
 * <https://github.com/webpack-contrib/css-loader>
 */
:local(.green) {
  composes: red;
  color: green;
}

:local(.btnGoodbye) {
  composes: bye hi from '../Goodbye/index.css';
  color: crimson;
}

:local(h2) {
  color: chocolate;
}

/* 全局样式需要 + :global,否则不起作用 */
:global(.blue) {
  color: blue;
}

/* nested */
:local(.about > a:nth-last-child(1)) {
  float: right;
  margin-right: 0;
}

/* styles.css */
:global(.App) {
  font-family: sans-serif;
  text-align: center;
}
12334242-c7b78e215c34ebee.gif
css-loader config modules localIdentName
12334242-e9301baa9db33684.png
css-loader config modules localIdentName-02.png

camelCase

12334242-703c19fe3a4a467b.png
camelCase-01
12334242-95a708774c79eb32.png
camelCase-02
12334242-a00597d2a7254cb3.png
camelCase-03

其它:

/* :local 对“标签选择器”不起作用,标签选择器定义的样式仍旧是全局的 */
:local(ul > li) {
  height: 1.4rem;
  color: #555;
  line-height: 1.4rem;
  text-align: left;
  border-bottom: 1px solid #CCC;
}

codesandbox 不起作用

12334242-75c261314927e981.png
sandbox

本地起作用

12334242-3a04cfc8c30e3acb.png
本地

codesandbox vanilla parcel

12334242-0c5dcadbfa2208ea.gif
将 CSS 文件以模块的形式导入,样式即按模块化处理
12334242-3be5b84b90e4193d.png
parcel css modules.png
12334242-0802307ba49a2335.png
:global(类名) 对模块化形式导入的样式文件中的样式转换成全局样式的操作是合法的
12334242-4777dfd085c32655.png
非模块化形式导入的样式文件用冒号local无法将样式转成局部作用域的

应使用 className

12334242-c88ae48c027ca562.png
id VS class

仓库地址:
https://github.com/MonguDykrai/React-LocalStyle-DEMO
https://codesandbox.io/s/yq7lxrvo49

参考资料:
https://github.com/webpack-contrib/css-loader

猜你喜欢

转载自blog.csdn.net/weixin_34117211/article/details/87641889