Vue 中使用 CSS Modules优雅方法
作者:fjc0k 发布时间:2024-04-30 10:23:39
CSS Modules:局部作用域 & 模块化
CSS Modules 为每一个局部类赋予全局唯一的类名,这样组件样式间就不会相互影响了。如:
/* button.css */
.button {
font-size: 16px;
}
.mini {
font-size: 12px;
}它会被转换为类似这样:
/* button.css */
.button__button--d8fj3 {
font-size: 16px;
}
.button__mini--f90jc {
font-size: 12px;
}
当导入一个 CSS 模块文件时,它会将局部类名到全局类名的映射对象提供给我们。就像这样:
import styles from './button.css'
// styles = {
// button: 'button__button--d8fj3',
// mini: 'button__mini--f90jc'
// }
element.innerHTML = '<button class="' + styles.button + ' ' + styles.mini + '" />'
vue-css-modules :简化类名映射
下面是一个使用了 CSS Modules 的按钮组件:
<template>
<button :class="{
'global-button-class-name': true,
[styles.button]: true,
[styles.mini]: mini
}">点我</button>
</template>
<script>
import styles from './button.css'
export default {
props: { mini: Boolean },
data: () => ({ styles })
}
</script>
的确,CSS Modules 对于 Vue 组件是一个不错的选择。但也存在以下几点不足:
你必须在 data 中传入 styles
你必须使用 styles.localClassName 导入全局类名
如果有其他全局类名,你必须将它们放在一起
如果要和组件的属性值绑定,就算局部类名和属性名一样,也要显式指定
对于上面的按钮组件,使用 vue-css-modules 后:
<template>
<button
class="global-button-class-name"
styleName="button :mini">
点我
</button>
</template>
<script>
import CSSModules from 'vue-css-modules'
import styles from './button.css'
export default {
mixins: [CSSModules(styles)],
props: { mini: Boolean }
}
</script>
现在:
你不必在 data 中传入 styles ,但得在 mixins 中传入 styles :full_moon_with_face:
你可以跟 styles.localClassName 说拜拜了
将局部类名放在 styleName 属性,全局类名放在 class 属性,规整了许多
局部类名绑定组件同名属性,只需在其前面加上 : 修饰符
修饰符
@button
<button styleName="@button">按钮</button>
这等同于:
<button styleName="button" data-component-button="true">按钮</button>
这让你能在外部重置组件的样式:
.form [data-component-button] {
font-size: 20px;
}
$type
<button styleName="$type">按钮</button>
这等同于:
<button :styleName="type">按钮</button>
:mini
<button styleName=":mini">按钮</button>
这等同于:
<button :styleName="mini ? 'mini' : ''">按钮</button>
disabled=isDisabled
<button styleName="disabled=isDisabled">按钮</button>
这等同于:
<button :styleName="isDisabled ? 'disabled' : ''">按钮</button>
使用方法
在 Vue 模板中使用
引入模板外部的 CSS 模块
<template>
<button
class="global-button-class-name"
styleName="button :mini">
点我
</button>
</template>
<script>
import CSSModules from 'vue-css-modules'
import styles from './button.css'
export default {
mixins: [CSSModules(styles)],
props: { mini: Boolean }
}
</script>
使用模板内部的 CSS 模块
<template>
<button
class="global-button-class-name"
styleName="button :mini">
点我
</button>
</template>
<script>
import CSSModules from 'vue-css-modules'
export default {
mixins: [CSSModules()],
props: { mini: Boolean }
}
</script>
<style module>
.button {
font-size: 16px;
}
.mini {
font-size: 12px;
}
</style>
在 Vue JSX 中使用
import CSSModules from 'vue-css-modules'
import styles from './button.css'
export default {
mixins: [CSSModules(styles)],
props: { mini: Boolean },
render() {
return (
<button styleName="@button :mini">点我</button>
)
}
}
在 Vue 渲染函数中使用
import CSSModules from 'vue-css-modules'
import styles from './button.css'
export default {
mixins: [CSSModules(styles)],
props: { mini: Boolean },
render(h) {
return h('button', {
styleName: '@button :mini'
}, '点我')
}
}
总结
以上所述是小编给大家介绍的Vue 中使用 CSS Modules优雅方法网站的支持!
来源:https://juejin.im/post/5ac5fd7f5188257cc20d854e
猜你喜欢
- 生成txt文件:mesg = "hello world"with open("test.txt",
- 将VS2017上配置OpenCV4.1.0的过程记录于此。准备工具:OpenCV:4.1.0IDE:VS2017安装环境:Win10 &nb
- 如果值没有重复的情况,可以先用array_flip()来交换键和值,然后krsort(),最后再array_flip()交换回来,就可以比较
- 最近在学习MySQL优化方面的知识。本文就数据类型和schema方面的优化进行介绍。1. 选择优化的数据类型MySQL支持的数据类型有很多,
- 在一个网页中,不仅仅只有一个html骨架,还需要css样式文件,js执行文件以及一些图片等。因此在DTL中加载静态文件是一个必须要解决的问题
- 身为一名小小的程序猿,在日常开发中不可以避免的要和where in和like打交道,在大多数情况下我们传的参数不多简单做下单引号、敏感字符转
- 前言本文主要给大家介绍了关于python用队列asyncio.Queue通讯的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详
- 简单说明这个算法主要工作是测量不同特征值之间的距离,有个这个距离,就可以进行分类了。简称kNN。已知:训练集,以及每个训练集的标签。接下来:
- 问:怎样实现ORACLE中用一条SQL实现其它进制到十进制的转换?答:具体示例如下:-----二进制转换十进制---------------
- 首先,我们知道一副牌里有54张牌,然后牌里的数字是从 3 - 2 的里面总共有13张牌,然后 4 中花色 分别是 ♠?
- <!doctype><html><head><title>新闻图片轮换类</title
- 1、说明Tasks用于并发调度协程,通过asyncio.create_task(协程对象)创建Task对象,使协程能够加入事件循环,等待调度
- 都知道django每次请求都会连接数据库和释放数据库连接。Django为每个请求使用新的数据库连接。一开始这个方法行得通。然而随着服务器上的
- 1.第一种方法<table><tr><td>当前时间:</td><td id=&quo
- 本文实例讲述了python实现web方式logview的方法。分享给大家供大家参考。具体如下:这里用Python实现web方式查看日志的一个
- Python实战系列用于记录实战项目中的思路,代码实现,出现的问题与解决方案以及可行的改进方向本文为第2篇–200行Python代码实现20
- 一、查看實例名時可用1、服务—SQL Server(实例名),默认实例为(MSSQLSERVER)或在连接企业管理时-查看本地实例2、通過注
- PDOStatement::rowCountPDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数(PHP
- 读写中文需要读取utf-8编码的中文文件,先利用sublime text软件将它改成无DOM的编码,然后用以下代码:with codecs.
- 又遇到与pycharm配置有关的问题。pycharm无法import自己安装的第三方库,好神奇啊,这个可是在pycharm下安装的地三方mo