# CSS

O CSS no Vue não se diferencia muito do CSS utilizado normalmente, apenas com algumas modificações.

# Scoped

Quando uma tag <style> tem o atributo scoped (<style scoped>), o seu CSS irá ser aplicado apenas no componente atual de uma forma parecida com o Shadow DOM.

<style scoped>
.container {
  display: flex;
  height: 100%;
  justify-content: center;
  align-items: center;
}
</style>

<template>
  <section class="container">
    <p>He4rt Developers</p>
  </section>
</template>

Dessa forma, irá ser feito um "hash" do componente para o DOM final (ou seja, depois de ser transformado pelo Virtual DOM).

Exemplo:

.container[data-v-f84hf]
  • Você consegue observar isso facilmente olhando o html final no console de desenvolvedor.

# Module

Módulos CSS é um sistema para modularização e composição de CSS no Vue. O vue-loader fornece integração de alto nível com módulos CSS como uma alternativa para parecida com a de escopos CSS.

<style module>
.container {
  display: flex;
  height: 100%;
  justify-content: center;
  align-items: center;
}
</style>

<template>
  <section :class="$style.container">
    <p>He4rt Developers</p>
  </section>
</template>

Por conta da propriedade ser computada, é possível utilizar usando o v-bind

<button :class="[$style.button, $style.button--red]">
  Botão vermelho
</button>

# Estilos anexados

Existe outras formas de utilziar o v-bind para anexar nossos estilos:

Objeto:

<template>
  <div v-bind:style="{ color: cor }"></div>
</template>

<script>
export default {
  data() {
    return {
      cor: 'yellow',
    }
  }
};
</script>

Array(mostrado anteriormente em module):

<div v-bind:style="[button, button--red]"></div>

Valores múltiplos(Vue v2.3.0+):

<div v-bind:style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>

Próxima Seção