Módulos CSS

Requer versão ^9.8.0

Módulos CSS é um sistema popula para modularização e composição de CSS. vue-loader fornece integração de alto nível com módulos CSS como uma alternativa para simular escopo CSS.

Uso

Basta adicionar o atributo module ao seu <style>;

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

Isto ativará o modo Módulo CSS para css-loader, e a classe resultante que identifica o objeto será injetada dentro do componente como uma propriedade computada com o nome $style. Você pode usá-lo em seus templates com uma ligação de classe dinâmica.

<template>
  <p :class="$style.red">
    Isto deve ser vermelho
  </p>
</template>

Uma vez que a propriedade é computada, ela também funciona com a sintaxe object/array de :class:

<template>
  <div>
    <p :class="{ [$style.red]: isRed }">
      Eu sou vermelho?
    </p>
    <p :class="[$style.red, $style.bold]">
      Vermelho e negrito
    </p>
  </div>
</template>

E você também pode acessá-la com JavaScript:

<script>
  export default {
    created () {
      console.log(this.$style.red)
      // -> "_1VyoJ-uZOjlOxP7jWUy19_0"
      // identificador gerado baseado no nome do arquivo e nome da classe.
    }
  }
</script>

Consulte a especificação do Módulo CSS para detalhes como modo exceções globais e composição.

Nome de Injeção Personalizado

Você pode ter mais de uma tag <style> em um único componente *.vue. Para evitar que estilos injetados substitua um ao outro, você pode personalizar o nome da propriedade computada injetada fornecendo um valor para o atributo module:

<style module="a">
  /* identificadores injetado como a */
</style>

<style module="b">
  /* identificadores injetados como b */
</style>

Configurando consulta css-loader

Módulos CSS são processados via css-loader. Com <style module>, a consulta padrão usada para css-loader é:

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

Você pode usar as opções cssModules do vue-loader para fornecer opções de consulta adicionais para css-loader:

// webpack 1
vue: {
  cssModules: {
    // sobrescreve o localIdentName
    localIdentName: '[path][name]---[local]---[hash:base64:5]',
    // Ativa camelCase
    camelCase: true
  }
}

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

results matching ""

    No results matching ""