分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

CSS Modules使用方法

发布时间:2023-09-06 01:26责任编辑:沈小雨关键词:CSS

css modules调研

css模块化解决方案

  • 抛弃css (Radium,jsxstyle,react-style)
  • 利用js来管理样式依赖(css Modules)

css模块化面临的问题

  • 全局污染
  • 命名混乱
  • 依赖管理不彻底
  • 无法共享变量
  • 代码压缩不彻底

启用CSS Modules,webpack配置

...{ ???test: /\.css$/, ???use: [ ???????{ ???????????loader: ‘style-loader‘ ???????}, ???????{ ???????????loader: ‘css-loader?modules&localIdentName=[name]-[hash:base64:5]‘ ???????} ???]},...

在项目当中使用

Test.jsx

import React, { Component } from ‘react‘;// 将样式文件当成模块引入import styles from "./test.css";export default class Test extends Component { ???render() { ???????return ( ???????????<div> ???????????????<div className={styles.test}>测试</div> ???????????</div> ???????) ???}}

test.css

.test { ???color: red;}

以上就是CSS Modules的基本用法

用法进阶

全局样式和局部样式

开启CSS Modules之后默认的样式都为局部样式

// css 样式(:global)(.test1) { ???color: blue;}或者如下(定义多个全局样式):global { ???.test1 { ???????color: blue; ???} ???.test2 { ???????color: red; ???}}// 全局样式写法和之前一样import React, { Component } from ‘react‘;import styles from "./test.css";export default class Test extends Component { ???render() { ???????return ( ???????????<div> ???????????????<div className="test1">测试</div> ???????????</div> ???????) ???}}

Compose 组合样式

// 样式文件.base { ????font-size: 20px; }.normal { ?composes: base; ?color: #333;}.disabled { ?composes: base; ?color: #ddd;}// 组件中import React, { Component } from ‘react‘;import styles from "./test.css";export default class Test extends Component { ???render() { ???????return ( ???????????<div> ???????????????<div className="normal">测试</div> ???????????</div> ???????) ???}}// 编译后的html文件<d class="div--base-daf62 div--normal-abc53">测试</div>// 由于在 .normal 中 composes 了 .base,编译后会 normal 会变成两个 class。

CSS Modules 使用技巧

  • 不使用选择器,只使用class名来定义样式
  • 不叠加多个class
  • 所有样式通过composes组合来实现复用
  • 不嵌套

CSS Modules React 项目实践

import classNames from ‘classnames‘;import styles from ‘./dialog.css‘;export default class Dialog extends React.Component { ?render() { ???const cx = classNames({ ?????[styles.confirm]: !this.state.disabled, ?????[styles.disabledConfirm]: this.state.disabled ???}); ???return <div className={styles.root}> ?????<a className={cx}>Confirm</a> ?????... ???</div> ?}}

关于样式覆盖问题

因为CSS Modules 不会覆盖属性选择器,所以可以利用属性选择器来解决这个问题

// 组件中...return ( ???<div data-role=‘test‘> ???????测试 ???</div>)...// 样式[data-role="test"] { ???color: red;}

如何与全局样式共存

import Component from ‘./view/Component‘// 全局样式import ‘./styles/app.scss‘;// 以下为组件相关样式(局部样式)import ‘./Component.scss‘;

SASS与CSS Modules配合使用

module: { ?loaders: [{ ???test: /\.jsx?$/, ???loader: ‘babel‘ ?}, { ???test: /\.scss$/, ???exclude: path.resolve(__dirname, ‘src/styles‘), ???loader: ‘style-loader!css-loader?modules&localIdentName=[name]__[local]!sass?sourceMap=true‘ ?}, { ???test: /\.scss$/, ???include: path.resolve(__dirname, ‘src/styles‘), ???loader: ‘style-loader!css-loader!sass-loader?sourceMap=true‘ ?}]}

CSS Modules使用方法

原文地址:http://www.cnblogs.com/kugeliu/p/7889018.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved