CSS:CSS Modules

简介: CSS:CSS Modules

一、背景

在编写代码的时候,经常会出现同名而被覆盖样式的可能,特别是大量使用组件的项目,添加css Modules可以减少这样的冲突。

二、什么是CSS Modules

根据CSS Modules的repo上的话来说是这样的:

CSS files in which all class names and animation names are scoped locally by default.

所以CSS Modules并不是一个正式的声明或者是浏览器的一个实现,而是通过构建工具(webpack or Browserify)来使所有的class达到scope的一个过程。

三、使用css modules会带来:

2.1、解决全局样式冲突带来的问题

2.2、解决嵌套层次过深的选择器带来的问题

2.3、会带来代码的冗余

四、与scoped比较

4.1、scoped可以隔离本页面的样式,但是如何引入的子组件依然会收到覆盖样式的影响。

4.2、css modules即使引入组件也不会相互影响。

4.3、scoped可以嵌套的写样式,逻辑层次更加清晰。

4.4、css modules通常是没有嵌套的,写在了最外层。

五、定制哈希类名

webpack.config.js里面可以定制哈希字符串的格式。

css:{

       modules:{

         localIdentName: '[path][name]__[local]_[hash:base64:16]'

       },

     }

六、其他

6.1、一个选择器可以继承另一个选择器的规则,这称为"组合"("composition")。

6.2、选择器也可以继承其他CSS文件里面的规则。

6.3、CSS Modules 支持使用变量,不过需要安装 PostCSS 和 postcss-modules-values。

七、实例

// id class 都有使用
<div :class="$style.nav">
    <router-link :class="$style.item" to="/">首页</router-link>
    <a :class="$style.item" href="https://www.toutiao.com/">头条</a>
    <a :class="$style.item" href="https://www.bilibili.com/">哔哩</a>
    <a :class="$style.item" href="https://weibo.com/">微博</a>
    <a :class="$style.item" href="https://ip138.com/">查询</a>
    <router-link :class="$style.item" to="/about/index">我的</router-link>
  </div>
<style lang="scss" module>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
.nav {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;
  display: flex;
  justify-content: space-around;
  background: #e6e6e6;
  z-index: 1;
}
.item {
  padding: 20px 10px;
}
</style>

八、局部作用域:local、全局作用域:global

局部作用域:local

:global()修饰的样式是不会被重命名的,使用全局样式时直接赋值给class就行了,不需要进行类绑定。

九、webpack配置,配合scss得心应手应用在生产环境

配置是重点,有问题请留言。

css: {
    // 是否使用css分离插件 ExtractTextPlugin
    extract: true,
    // 开启 CSS source maps?
    sourceMap: false,
    requireModuleExtension: true,
    // css预设器配置项
    // 启用 CSS modules for all css / pre-processor files.
    loaderOptions: {
      sass: {
        prependData: `
        @import "@/assets/scss/reset.scss";
        @import "@/assets/scss/variable.scss";`,
        sassOptions: {
          modules: true,
          exclude: [
            path.resolve(__dirname, "node_modules")
          ],
        }
      },
      css:{
        modules:{
          localIdentName: '[path][name]__[local]_[hash:base64:16]'
        },
      }
    },
  },

十、注意:

CSS Modules 与 scoped只能用一个

十一、欢迎留言指正,有问必回。

相关文章
|
6月前
|
前端开发 JavaScript
webpack成长指北第8章---webpack的CSS Modules打包
webpack成长指北第8章---webpack的CSS Modules打包
67 0
|
5月前
|
前端开发 JavaScript 开发者
CSS进阶 - CSS Modules与预处理器简介
【6月更文挑战第17天】前端开发中,CSS Modules和预处理器(如Sass、Less)解决了大规模项目中CSS的管理难题,提升代码复用和维护性。CSS Modules提供局部作用域的类名,避免全局冲突,而预处理器扩展CSS功能,使代码更像编程语言。常见问题包括命名冲突和过度嵌套,可通过自动哈希、少嵌套、合理变量规划来解决。结合两者使用,遵循模块化和适度预处理原则,集成到构建工具中,能优化开发流程。这些技术是现代前端不可或缺的工具。
67 2
|
3月前
|
前端开发 JavaScript API
Vue 3 新特性:在 Composition API 中使用 CSS Modules
Vue 3 新特性:在 Composition API 中使用 CSS Modules
|
3月前
|
前端开发 JavaScript 开发工具
CSS Modules与Styled Components:提升CSS可维护性
CSS Modules与Styled Components皆提升了现代Web开发中的CSS可维护性。前者通过本地作用域限制CSS选择器范围,生成唯一类名防止全局样式冲突;后者采用CSS-in-JS方式,在JavaScript中定义样式,实现样式与组件的紧密耦合,并支持动态样式。两者各有优势:CSS Modules适合习惯CSS的开发者,提供了局部作用域和导入机制;Styled Components则适用于需要复杂样式逻辑的场景,利用JavaScript的强大功能。选择哪一种取决于项目需求和个人偏好,也可以根据情况将两者结合使用,以充分利用它们的优点。
43 0
|
6月前
|
前端开发 JavaScript UED
【专栏】CSS Modules是一种将CSS与模块系统结合的技术,解决传统CSS管理中的全局样式污染和可维护性问题
【4月更文挑战第29天】CSS Modules是一种将CSS与模块系统结合的技术,解决传统CSS管理中的全局样式污染和可维护性问题。它提供局部作用域、模块隔离和自动生成唯一类名,保证样式安全性。与现有CSS语法兼容,且与React、Vue等现代框架集成良好,支持动态样式和主题切换。通过引入CSS Modules,开发者能提升代码的可维护性、可读性和稳定性。了解和使用CSS Modules对于前端开发至关重要。
231 2
好客租房162-css modules在项目中的应用
好客租房162-css modules在项目中的应用
143 0
好客租房162-css modules在项目中的应用
|
前端开发
好客租房161-css modules的说明
好客租房161-css modules的说明
76 0
好客租房161-css modules的说明
|
前端开发 JavaScript 编译器
什么是CSS Modules ?我们为什么需要他们
原文地址:https://css-tricks.com/css-mo... 最近我对CSS Modules比较好奇。如果你曾经听说过他们,那么这篇博客正适合你。我们将去探索它的目的和主旨。如果你同样很好奇,敬请关注,在下一篇博文中我们将介绍如何使用CSS Modules。如果你想亲自尝试并且掌握如何使用,第三部分将会很适合你,这一部分剖析了如何在React环境中使用。
什么是CSS Modules ?我们为什么需要他们
|
Web App开发 前端开发 JavaScript
中后台 CSS Modules 最佳实践
中后台 CSS Modules 最佳实践
565 0
中后台 CSS Modules 最佳实践
|
前端开发
Webpack 2 视频教程 012 - 理解Webpack 中的 CSS 作用域与 CSS Modules
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」。 Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲解的。
1149 0

热门文章

最新文章