IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 重要:CSS Modules -> 正文阅读

[JavaScript知识库]重要: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、会带来代码的冗余
四、与scope比较

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

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

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

3.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 与 scope 只能用一个

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

参考文献:

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文件夹 · 日常内容小结 · 看云

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:46:34  更:2021-11-26 08:48:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:04:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码