CSS модули

требуется версия 9.8.0 или выше

CSS модули — это популярная система для модульности и компоновки CSS. vue-loader предоставляет первоклассную интеграцию с CSS модулями как возможную альтернативу эмулируемого scoped CSS.

Использование

Просто добавьте атрибут module к тегу <style>:

<style module>
.red {
  color: red;
}
.bold {
  font-weight: bold;
}
</style>

Это включит режим CSS-модулей в css-loader, и полученный индентификатор объекта класса будет внедрен в компонент как вычисляемое свойство с именем $style. Вы можете использовать его в своих шаблонах для динамического добавления классов:

<template>
  <p :class="$style.red">
    Этот текст будет красным
  </p>
</template>

Поскольку это вычисляемое свойство, оно также будет работать с объектом/массивом в :class:

<template>
  <div>
    <p :class="{ [$style.red]: isRed }">
      Буду ли я красным?
    </p>
    <p :class="[$style.red, $style.bold]">
      Красный и жирный
    </p>
  </div>
</template>

Вы также можете получить доступ в JavaScript:

<script>
export default {
  created () {
    console.log(this.$style.red)
    // -> "_1VyoJ-uZOjlOxP7jWUy19_0"
    // идентификатор генерируется на основе имени файла и className.
  }
}
</script>

Обратитесь к спецификации CSS-модулей для получения информации о глобальных исключениях и композиции.

Указание внедряемого имени модуля

У вас может быть более одного <style> тега в одном *.vue компоненте. Во избежание перезаписи внедряемых стилей вы можете указать имя внедряемого вычисляемого свойства в значении атрибута module:

<style module="a">
  /* идентификатор будет внедрён как a */
</style>

<style module="b">
  /* идентификатор будет внедрён как b */
</style>

Настройка параметров css-loader

CSS-модули обрабатываются с помощью css-loader. При использовании <style module> настройки css-loader по умолчанию будут такими:

{
  modules: true,
  importLoaders: 1,
  localIdentName: '[hash:base64]'
}

Вы можете использовать в vue-loader опцию cssModules чтобы добавить дополнительные параметры для css-loader:

module: {
  rules: [
    {
      test: '\.vue$',
      loader: 'vue-loader',
      options: {
        cssModules: {
          localIdentName: '[path][name]---[local]---[hash:base64:5]',
          camelCase: true
        }
      }
    }
  ]
}

results matching ""

    No results matching ""