最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Vue中如何使用CSSModules

来源:动视网 责编:小采 时间:2020-11-27 19:34:47
文档

Vue中如何使用CSSModules

Vue中如何使用CSSModules:这篇文章主要介绍了Vue 中使用 CSS Modules优雅方法,本文文字结合实例代码的形式给大家介绍的非常详细,需要的朋友可以参考下CSS Modules:局部作用域 & 模块化CSS Modules 为每一个局部类赋予全局唯一的类名,这样组件样式间就不会相互影响了。如:/*
推荐度:
导读Vue中如何使用CSSModules:这篇文章主要介绍了Vue 中使用 CSS Modules优雅方法,本文文字结合实例代码的形式给大家介绍的非常详细,需要的朋友可以参考下CSS Modules:局部作用域 & 模块化CSS Modules 为每一个局部类赋予全局唯一的类名,这样组件样式间就不会相互影响了。如:/*


这篇文章主要介绍了Vue 中使用 CSS Modules优雅方法,本文文字结合实例代码的形式给大家介绍的非常详细,需要的朋友可以参考下

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中如何使用CSSModules

    Vue中如何使用CSSModules:这篇文章主要介绍了Vue 中使用 CSS Modules优雅方法,本文文字结合实例代码的形式给大家介绍的非常详细,需要的朋友可以参考下CSS Modules:局部作用域 & 模块化CSS Modules 为每一个局部类赋予全局唯一的类名,这样组件样式间就不会相互影响了。如:/*
    推荐度:
    标签: 使用 如何 VUE
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top