Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

  • JavaScript

  • 工具

  • Vue

    • vue批量引入组件
    • vue中watch用法
    • vue使用基础JSX语法
    • vue首页白屏
    • vue长列表优化
    • 模板文件中script、template、style存在必要性
    • popup弹窗组件
    • 使用$mount和extend扩展vue
    • 扩展toast合并popup(按需加载)
    • canvas实现弧形进度条
    • vue中使用CSS Modules
    • vue实现无限轮播图
    • vue半圆形菜单
    • 纯CSS实现圆形进度条
    • v-model简单实现
    • vue带箭头下拉框
    • vue事件修饰符
    • vue鼠标悬浮显示提示文字
    • vue添加发布版本号方法
    • vue配置全局样式文件
    • vue在env development中设置全局变量不生效
    • vue引入less或scss全局变量
    • vue中使用Keepalive
    • vue2为什么只支持一个根节点
    • vue打包优化分析工具—webpack-bundle-analyzer
    • vue使用echarts(按需加载)
    • echarts柱形图重合堆叠
    • vue使用draggable实现多列拖拽(解决空列不能拖拽问题)
    • vue禁止三方库打包到bundle中
    • npm run serve运行背后的思考
    • vxe-table树结构不允许insert
    • vue组件延迟加载
    • 多页面应用配置
    • vue项目常用优化
    • vue实现拖动拼图验证码
    • vue虚拟dom
    • canvas心形动画
    • canvas绘制玫瑰曲线
    • element表单validateField验证部分字段
    • element日期选择限制今天以后并精确到小时
    • 前端使用JSEncrypt和node-rsa进行rsa加密传输和接收解密
    • elementui日期选择器生日只选择月和日不选择年并隐藏年份
    • el-upload组件第二次点击手动submit时不生效
    • element表单内输入框使用@keyup enter native回车时会刷新页面
  • antdv踩坑记录

  • Vue3

  • 前端
  • Vue
kros
2021-01-05

vue中使用CSS Modules

为了保证全局css不被污染,现在有很多方案来限制css的使用。

# 多重css选择器

	<style>
		.container {
			background-color: #F8F8F8;
		}
		
		.container .header {
			height: 60px;
		}
		
		.container .header .top {
			display: flex;
		}
		
		.container .header .top .bar {}
		.container .header .top .bar ul{}
		.container .header .top .bar ul li{}
		.container .header .top .bar ul li .content{}
		.container .header .top .bar ul li .content .image-group{}
		.container .header .top .bar ul li .content .image-group image{}
	</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

如上所示,如果嵌套过深选择器会使代码异常繁琐且不易维护。

# css预处理器

现在基于webpack的应用中已经很少使用最基础的css写法,取而代之的是功能强大的css预处理器。使用预处理器会使css层级显示明显但同时嵌套层级写法,不过预处理器的主要作用是在提供变量、函数、mixin等写法而不是限制css使用 使用scss替换上述css如下:

	<style lang="scss">
		.container {
			background-color: #F8F8F8;
			.header {
				height: 60px;
				.top {
					display: flex;
					.bar {
						ul {
							li {
								.content {
									.image-group {
										image {
											
										}
									}
								}
							}
						}
					}
				}
			}
		}
	</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# scoped作用域

当 <style> 标签有scoped属性时,它的CSS只作用于当前组件中的元素。这类似于Shadow DOM中的样式封装。它有一些注意事项,但不需要任何 polyfill。它通过使用 PostCSS 来实现以下转换:

<style scoped>
.example {
  color: red;
}
</style>
1
2
3
4
5

转换结果:

<style>
.example[data-v-f3f3eg9] {
  color: red;
}
</style>

<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>
1
2
3
4
5
6
7
8
9

# css Modules

在<style>上添加module属性,打开CSS Modules模式。官方文档

<style module>
.red {
  color: red;
}
.bold {
  font-weight: bold;
}
</style>
1
2
3
4
5
6
7
8

如果有定义多个module。module="modulea"、module="moduleb",它会生成多个计算属性(modulea、moduleb),使用modulea.red可达到同样效果。

#vue
上次更新: 2025/09/05, 8:09:00
canvas实现弧形进度条
vue实现无限轮播图

← canvas实现弧形进度条 vue实现无限轮播图→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev