# vue-css-modules **Repository Path**: mirrors_fjc0k/vue-css-modules ## Basic Information - **Project Name**: vue-css-modules - **Description**: Seamless mapping of class names to CSS Modules inside of Vue components. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-25 - **Last Updated**: 2026-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 🇨🇳中文 | [English](./README.md) # Vue CSS Modules [![Travis](https://img.shields.io/travis/fjc0k/vue-css-modules.svg)](https://travis-ci.org/fjc0k/vue-css-modules) [![minified size](https://img.shields.io/badge/minified%20size-2.14%20KB-blue.svg?MIN)](https://github.com/fjc0k/vue-css-modules/blob/master/dist/vue-css-modules.min.js) [![minzipped size](https://img.shields.io/badge/minzipped%20size-1.05%20KB-blue.svg?MZIP)](https://github.com/fjc0k/vue-css-modules/blob/master/dist/vue-css-modules.min.js) 顺滑地将 Vue 组件内的 CSS Modules 转换为全局类名。 ```shell yarn add vue-css-modules ``` CDN:[jsDelivr](//www.jsdelivr.com/package/npm/vue-css-modules) | [UNPKG](//unpkg.com/vue-css-modules/) (可通过 `window.VueCSSModules` 使用) ## CSS Modules:局部作用域 & 模块化 [`CSS Modules`](https://github.com/css-modules/css-modules) 为每一个局部类赋予全局唯一的类名,这样组件样式间就不会相互影响了。如: ```css /* button.css */ .button { font-size: 16px; } .mini { font-size: 12px; } ``` 它会被转换为类似这样: ```css /* button.css */ .button__button--d8fj3 { font-size: 16px; } .button__mini--f90jc { font-size: 12px; } ``` 当导入一个 CSS 模块文件时,它会将局部类名到全局类名的映射对象提供给我们。就像这样: ```javascript import styles from './button.css' // styles = { // button: 'button__button--d8fj3', // mini: 'button__mini--f90jc' // } element.innerHTML = ' ``` 这等同于: ```html ``` 这让你能在外部重置组件的样式: ```css .form [data-component-button] { font-size: 20px; } ``` ### $type ```html ``` 这等同于: ```html ``` ### :mini ```html ``` 这等同于: ```html ``` ### disabled=isDisabled ```html ``` 这等同于: ```html ``` ## 使用方法 ### 在 Vue 模板中使用 #### 引入模板外部的 CSS 模块 ```html ``` #### 使用模板内部的 CSS 模块 ```html ``` ### 在 Vue JSX 中使用 ```javascript import CSSModules from 'vue-css-modules' import styles from './button.css' export default { mixins: [CSSModules(styles)], props: { mini: Boolean }, render() { return ( ) } } ``` ### 在 Vue 渲染函数中使用 ```javascript 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` 注册了 [`beforeCreate`](https://cn.vuejs.org/v2/api/#beforeCreate) 钩子,在钩子中劫持了组件的渲染函数。对于传给渲染函数的参数,将会解析其 `data` 或 `data.attrs` 中的 `styleName` 属性生成全局类名字符串,并将它附着在 `data.staticClass` 值的后面。