Да, Vue.js полностью поддерживает CSS-модули (CSS Modules), что предоставляет мощный механизм изоляции стилей на уровне компонентов.
<template>
<div :class="$style.myClass">Элемент с модульным стилем</div>
</template>
<style module>
.myClass {
color: #42b983;
font-size: 16px;
}
</style>
Можно задать кастомное имя для объекта классов:
<style module="classes">
.myClass {
/* ... */
}
</style>
<template>
<div :class="classes.myClass"></div>
</template>
<style module lang="scss">
.$primaryColor: #42b983;
.myClass {
color: $primaryColor;
}
</style>
Для кастомной настройки в vue.config.js
:
module.exports = {
css: {
modules: {
localIdentName: '[path][name]__[local]--[hash:base64:5]',
// Другие параметры
}
}
}
<style module>
.base {
padding: 1rem;
}
.primary {
composes: base;
background-color: var(--primary);
}
</style>
Для автодополнения и проверки типов:
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
computed: {
$style: {
get(): { myClass: string } {
return {}
}
}
}
})
</script>
Характеристика | CSS-модули | Scoped CSS |
---|---|---|
Изоляция | Полная | Частичная |
Глобальные стили | Через :global() | Отдельный тег style |
Динамические классы | Через объект $style | Стандартный синтаксис |
Поддержка в JS/TS | Отличная | Ограниченная |