css的命名冲突目前有几种解决方法:

1.命名约定

人为的制定一下命名规则以避免冲突,例如前缀,嵌套等

2.CSS in JS

在JavaScript中写CSS,使用工具编译为css,最常见的是styled-components

3.使用编译工具改变css类名

最常见的是CSS Modules

4.HTML5的style scoped

可以部分解决css重名问题,缺陷很多

1. CSS Modules

CSS Modules只转换 class 和 id 选择器。在 js 中 styles 就像一个对象一样使用,因此如果样式名为 .site-wrapper,那么在使用时应该写成 styles['site-wrapper']。我们可以设置 css-loader 的 camelCase 参数为 true 来启动自动转换,这样在 js 中就可以通过 styles.siteWrapper 使用

支持的工具有webpack的css-loader和postcss的postcss-modules

例如css-loader:

module: {
loaders: [
// ...
{
test: /\.css$/,
loader: "style-loader!css-loader?modules&localIdentName=[path][name]---[local]---[hash:base64:5]"
},
]
}

1. CSS Modules支持全局和局部作用域

:local(.title) {
color: red;
} :global(.title) {
color: green;
}

2.CSS Modules在vue组件中可以直接使用,方式如下

<template>
<p :class="$style.gray">
Im gray
</p>
</template> <style module>
.gray {
color: gray;
}
</style>

编译为:

<p class="gray_3FI3s6uz">Im gray</p>

.gray_3FI3s6uz {
color: gray;
}

由此可见,css module直接替换了类名,排除了用户设置类名影响组件样式的可能性。

这样$style.red就可以当做一个变量,并且可以在js中使用,如下:

<script>
export default {
created () {
console.log(this.$style.gray)
// -> "gray_3FI3s6uz"
// 一个基于文件名和类名生成的标识符
}
}
</script>

我们可以看到,module在使用时多出了绑定和$style,如果你想更优雅,可以看一下这个vue-css-modules

2. css scoped

<style scoped>
.example {
color: red;
}
</style> <template>
<div class="example">hi</div>
</template>

会转换为:

<style>
.example[data-v-f3f3eg9] {
color: red;
}
</style> <template>
<div class="example" data-v-f3f3eg9>hi</div>
</template>

1. scoped在DOM中添加了一个唯一的属性data-v-f3f3eg9,在css中也添加了一个属性.example[data-v-f3f3eg9]
来保证唯一性,这样如果外部使用了同名的class,依然有可能影响组件的样式
2. scoped使用了属性选择器,会使得选择的效率降低
3. scoped在html和css中都添加了哈希值,会使得两者的提交都变大,降低加载速度,影响渲染效率
4. scoped修改子组件的样式,必须使用深度选择器,形式如下:

<template>
<div id="app">
<gHeader></gHeader>
</div>
</template> <style lang="css" scoped>
.gHeader /deep/ .name{ //第一种写法
color:red;
}
.gHeader {
/deep/ .name{
color:red;
}
}
.gHeader >>> .name{ //第二种写法
color:red;
}
</style> <div class="gHeader">
<div class="name"></div>
</div>

总体而言,CSS Modules优于scoped,提倡使用CSS Modules。

参考:https://www.cnblogs.com/macq/archive/2018/05/17/9051097.html
   https://blog.csdn.net/hezh1994/article/details/78899641
         http://www.ruanyifeng.com/blog/2016/06/css_modules.html

css命名冲突解决方法的更多相关文章

  1. 一种比css_scoped和css_module更优雅的避免css命名冲突小妙招

    css_scoped 与 css_module 我们知道,简单的class名称容易造成css命名重复,比如你定义一个class: <style> .main { float: left; ...

  2. Jquery库及其他库之间的$命名冲突解决办法

    首先我们应该知道,在jquery中,$(美元符号)就是jquery的别名,也就是说使用$和使用jquery是一样的,在很多时候我们命名空间时,正是因为这个$而产生的冲突的发生.比如说:$('#xmla ...

  3. css 命名冲突 & solution

    css 命名冲突 & solution 类似这样,为了解决模块间可能存在的 css 命名冲突问题,需要单独提供给模块开发者一套模块开发环境:同时,文档上要有如何使用的规范说明. CSS 建议: ...

  4. IIS上虚拟站点的web.config与主站点的web.config冲突解决方法 分类: ASP.NET 2015-06-15 14:07 60人阅读 评论(0) 收藏

    IIS上在主站点下搭建虚拟目录后,子站点中的<system.web>节点与主站点的<system.web>冲突解决方法: 在主站点的<system.web>上一级添 ...

  5. IIS上虚拟目录下站点的web.config与根站点的web.config冲突解决方法

    IIS7.5上在站点下部署虚拟目录,访问虚拟目录下的项目提示与父节点配置冲突.,节点与的<system.web>节点与主站点的<system.web>冲突解决方法: 在站点下的 ...

  6. 转:git合并冲突解决方法

    git合并冲突解决方法 1.git merge冲突了,根据提示找到冲突的文件,解决冲突 如果文件有冲突,那么会有类似的标记 2.修改完之后,执行git add 冲突文件名 3.git commit注意 ...

  7. apache与IIS共用80端口冲突解决方法

    如果同一台电脑安装了apache和iis,会提示80端口冲突,如何解决apache与iis 80端口冲突的问题呢,并且同时使用apache和iis 将apache设为使用80端口,IIS使用其它端口, ...

  8. 汇总Anaconda与ROS冲突解决方法

    汇总一下在网上找到的Anaconda与ROS冲突解决方法,如果还有其他人找到其他方法,欢迎留言. anaconda和ros的安装就不介绍了. 1. 在某视频网站上一个印度小哥提出的方法 安装完成后,在 ...

  9. tornado和vue的模板冲突解决方法

    tornado和vue的模板冲突解决方法 Vue的插值表达式和tornado的模板都为一对花括号,可以通过修改vue的插值表达式的符号来解决这个问题,具体方法如下: var vm = new Vue( ...

随机推荐

  1. 「专题训练」Boredom(CodeForces Round #260 Div.1 A)

    题意(Codeforces-455A) 给你\(n\)个数,你每次可以选择删除去一个数\(x\)获得\(x\)分,但是所有为\(x+1\)和\(x-1\)的数都得删去.问最大获得分数. 分析 这是一条 ...

  2. 聊聊Bug引发事故该不该追求责任

    最近读极客时间朱赟的一篇文章有感,在这也聊一下,在互联网的公司大多数以迭代的方式上线需求,节奏一般都比较快,经常会一个需求当天来了第二天就上线,开发和测试时间总共就两天,中间还穿插着别的需求测试,不像 ...

  3. Python 发邮件例子

    Python 发邮件例子 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12:33 # @Autho ...

  4. python程序设计——文件操作

    分类 1.文本文件 存储常规字符串,由若干文本行组成,每行以换行符'\n'结尾 2.二进制文件 把对象以字节串存储,常见的图形图像.可执行文件.数据库文件office文档等 #创建文件 >> ...

  5. Java基础知识:Java实现Map集合二级联动3

    * Returns an image stored in the file at the specified path * @param path String The path to the ima ...

  6. Log Files

    Description Nikolay has decided to become the best programmer in the world! Now he regularly takes p ...

  7. 软件工程第四周作业-PSP

    psp表格 类别 内容 开始时间 结束时间 中断时间 delta时间 学习 学习C# 10.6下午7:00 10.6下午8:00 - 60min 写代码 写主函数以及一些小的方法 10.7下午2:00 ...

  8. Thunder团队第一周 - Scrum会议5

    本节内容: 工作照片 会议时间 会议地点 会议内容 Todo list 燃尽图 Scrum会议5 小组名称:Thunder 项目名称:爱阅app Scrum Master:邹双黛 工作照片: 参会成员 ...

  9. 寒假学习计划——MOOC

    课程 西安交通大学[https://www.icourse163.org/course/XJTU-46006?tid=1002265006] 理由 本身中国大学mooc里c++课程不多,完结了能够有很 ...

  10. freefcw/hustoj Install Guide

    First of all, this version hustoj is a skin and improved for https://code.google.com/p/hustoj/. So t ...