Gérer le CSS avec Vue.js

Voir la vidéo
Description Sommaire

Dans ce chapitre, je vous propose de découvrir comment gérer les styles au niveau de vos composants Vue.js. Par défaut, lorsque le code est compilé, le CSS dans les balises <style> va être placé dans un fichier CSS séparé. Dans ces conditions, il est important de faire en sorte que les classes que l'on utilise soient uniques, mais Vue.js offre des mécaniques qui vont nous permettre de gérer automatiquement l'isolation des styles.

Style "scoped"

La première mécanique est la mise en place d'un attribut scoped au niveau de notre balise style. Cet attribut va permettre de rajouter une condition lorsque les sélecteurs CSS vont être générés.

<style scoped>
.container {}
</style>

Une fois compilé le sélecteur deviendra

.container[v-data-a6737]

Vue.js va rajouter un attribut sur l'ensemble des éléments injectés dans le DOM. Cet attribut permettra au sélecteur CSS de n'impacter que les éléments qui correspondent à ce composant directement.

Vous pouvez contrôler la portée d'un sélecteur à l'aide de la pseudo class :deep() :

<style scoped>
.container p{} /* deviendra ".container p[data-v-a6737]" */
.container :deep(p) {} /* deviendra ".container[data-v-a6737] p" */
</style>

Pour plus d'informations, vous pouvez vous rendre sur la page de la documentation.

Modules CSS

Afin de limiter la portée des sélecteurs CSS, il est aussi possible d'utiliser le système de module CSS.

<template>
  <p :class="$style.red">This should be red</p>
</template>

<style module>
.red {
  color: red;
}
</style>

Style dynamique

Si votre style dépend d'une variable d'un composant, vous avez la possibilité d'utiliser v-bind au niveau de la partie style.

<script setup>
import { ref } from 'vue'
const theme = ref({
    color: 'red',
})
</script>

<template>
  <p>Bonjour</p>
</template>

<style scoped>
p {
  color: v-bind('theme.color');
}
</style>

Vue.js va générer une variable CSS qui sera changée lorsque la valeur à l'intérieur de la ref change.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager