​一、背景

在编写代码的时候,经常会出现同名而被覆盖样式的可能,特别是大量使用组件的项目,添加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分离插件 ExtractTextPluginextract: 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只能用一个

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

参考文献:

CSS Modules 用法教程 - 阮一峰的网络日志

https://segmentfault.com/a/1190000014722978

js,ts配置css Modules_Dilomen的博客-CSDN博客

CSS Modules | Vue Loader

http://139.217.113.113:8090/pages/viewpage.action?pageId=11982531

在vue中使用css modules替代scroped - 小火柴的蓝色理想 - 博客园

关于CSS Modules全局污染解决_让优秀成为一种习惯-CSDN博客

webpack4配置之——26:postcss-loader遇到的坑_kevin的博客-CSDN博客

vue cli 3.0 + vant 过滤node_modules文件夹 · 日常内容小结 · 看云

CSS:CSS Modules相关推荐

  1. html右侧浮动菜单,HTML+CSS:css元素浮动详解,使用浮动制作导航栏菜单

    原标题:HTML+CSS:css元素浮动详解,使用浮动制作导航栏菜单 今天这篇文章我们来说一下css的浮动属性(float),给块状元素添加float属性可以使其转变为行内元素,也就是我们所说标签对象 ...

  2. html类选择器和id选择器,HTML+CSS:css选择器介绍之标签选择器、类选择器以及ID选择器...

    原标题:HTML+CSS:css选择器介绍之标签选择器.类选择器以及ID选择器 上篇文章给大家说了css的三种不同的引入方式,今天给大家说一下css的三种选择器:标签选择器.类选择器和ID选择器. 那 ...

  3. CSS:CSS+DIV布局网页

    现代网页布局:CSS+DIV: 一般的网页都是顺序布局的,很难达到我们需要的网页布局格式,此时使用DIV进行分层布局,类似于盒子,对每一部分内容进行设计.这是现在主流的网页布局方式,使用DIV+CSS ...

  4. CSS:CSS定位和浮动

    CSS2.1规定了3种定位方案 1.Normal flow:普通流(相对定位 position relative.静态定位 position static) 普通流(normal flow,国内有人翻 ...

  5. css:css样式背景图片设置透明度,css如何设置背景图片的透明度

    1. 了解css如何设置背景图片的透明度 注意: css中无法直接给背景图片加 opacity 属性,可以使用下面的方法来给background-image加上我们想要的透明度opacity. 2. ...

  6. CSS:CSS概述与引用

    CSS概述 CSS,全称"Cascading Style Sheets",用于设置HTML标签的样式,它的基本结构如下: CSS引用方式 CSS引用方式主要有四种:行内样式.内嵌样 ...

  7. CSS:CSS层叠样式表的概述

    CSS层叠样式表:Cascading Style Sheets 介绍: 现代网页的设计原则是内容和样式分离,降低它们之间的直接相互依存关系,解耦性,同时,同样的内容,可以通过不同的CSS样式表现出来. ...

  8. CSS:CSS 在工程中改变——面向对象的CSS (OO CSS)

    一.OO  CSS 的概念解读 (一)众多开发者忽视了CSS的表现,认为其太过简单,是一种机械的工作,而把更多关注在JS的性能或者其他方面. (二)OO CSS 将页面可重用元素抽象成一个类,用cla ...

  9. html css圆角按钮,CSS:CSS使用滑动门技术实现圆角按钮

    使用滑动门技术实现圆角按钮,如图所示,背景图和效果图. 所谓滑动门,就是当按钮的状态改变时,移动背景图,显示不同的状态.此法简单有效,但缺点是不能纵向扩展.要处理纵向扩展,就要使用复杂的圆解技术,如4 ...

最新文章

  1. MDNN:一种用于药物-药物反应预测的多模态深度神经网络
  2. 亚马逊专家揭秘:如何建立自动检测乳腺癌的深度学习模型
  3. 技术面试时该反问面试官什么问题?小伙整理了灵魂50问,GitHub日入2500星
  4. leetcode 636. Exclusive Time of Functions | 636. 函数的独占时间(Stack)
  5. 圣诞节,程序员应该给女朋友送一个线上圣诞树
  6. gradle下载及配置
  7. xargs命令和find的-exec
  8. 乐视网被列入经营异常名录 因登记经营场所无法联系
  9. Redis 持久化(学习笔记五)
  10. 求给定数组中两数和为给定值的数量
  11. Linux学习第一篇之Linux系统安装——系统分区
  12. python绘制曲线y=2x+5_Python Matplotlib 简易教程
  13. 创建一个Django项目
  14. 在android下使用i2c tools
  15. 5. DICOM图像层级分类-DCMTK-压缩图像PixelData读取
  16. android浏览器病毒,2018安卓手机杀毒软件排行榜
  17. 单模光纤最大传输距离为多少_单模光缆的传输距离是多少?
  18. pcre c语言,pcre函数详细解析
  19. Pega How To系列之一:如何在页面上动态显示/隐藏内容 ----by Cheney Wang
  20. 无法将“obj\Debug\net6.0\MvcMovie.dll”复制到“bin\Debug\net6.0\MvcMovie.dll

热门文章

  1. Windows API一日一练(55)FlushFileBuffers和SetFilePointer函数
  2. office(word、powerpoint、excel、outlook、onenote、publisher、access)下载安装(由于卡顿打不开重装,已激活)
  3. ARM单片机与ARM内核
  4. @Target注解详解
  5. 手把手教你定义一个UDF
  6. 2020第十一届至2022年第十三届蓝桥杯单片机开放与设计省赛第二批客观题及简解整理
  7. Linux内核及系统日志
  8. java面试场景问题,Java面试问题汇总
  9. 黑马程序员之手机卫士第四天
  10. 宁波银行$电信云计算笔试