DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Web Dev Zone»Style dynamique dans Vue.js
    Web Dev Zone

    Style dynamique dans Vue.js

    octobre 30, 2021
    Style dynamique dans Vue.js
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Lorsque j’ai commencé à utiliser Vue.js comme framework frontal, j’ai immédiatement apprécié la facilité avec laquelle je peux configurer et gérer mes composants. L’utilisation de composants à fichier unique me permet de me concentrer sur tous les aspects concernant la façon dont je les construis : j’ai simplement besoin de mettre 3 balises dans un fichier .vue et je peux commencer à façonner à la fois l’aspect visuel et toute la logique derrière le composant lui-même. En parlant de style, la première chose que la doc officielle vous dit est de savoir comment styler un composant : insérez simplement une balise de style (généralement à la fin du fichier) et le tour est joué.

    Mais lorsque vous avancez et commencez à créer des interfaces complexes, vous devez immédiatement effectuer un style qui va au-delà de la simple composition de classes CSS. Ainsi, au cours de mon parcours, j’ai découvert plusieurs façons d’effectuer un style dynamique, et cet article vise à être une brève référence pour les personnes qui ont d’abord ce besoin.
    Afin de vous montrer les différentes techniques, je vais utiliser un composant bouton super simple qui doit utiliser une valeur de couleur d’arrière-plan spécifique si une prop booléenne est vraie (d’accord, c’est peut-être trop simple, mais vous comprendrez donc rapidement les concepts) .
    Commençons par le code du composant :

    <template>
      <button class="my-button">
        {{ text }}
      </button>  
    </template>
    
    <script>
    export default {
      props: {
        text: {
          type: String,
          default: ""
        },
        isWarning: {
          type: Boolean,
          default: false
        }
      }
    }
    </script>
    
    <style lang="scss">
    .my-button {
      padding: 10px 20px;
      border-radius: 8px;
      border: 0;
    }
    </style>

    et nous appelons le composant comme ceci :

    <my-button text="Attention!" :is-warning="true"/>

    1 style de reliure

    C’est la solution la plus simple, utilisez simplement la liaison de style Vue.js et modifiez la propriété CSS background-color :

    <template>
      <button 
        class="my-button"
        :style="{'background-color': isWarning ? '#FC4': '#CCC'}"
      >
        {{ text }}
      </button>  
    </template>

    Reliure à 2 classes

    Avec la liaison de classe, nous ajoutons une classe spécifique uniquement si la prop isWarning est vrai :

    <template>
      <button 
        :class="['my-button', {'warning': isWarning}]"
      >
        {{ text }}
      </button>  
    </template>

    et ci-dessous dans la balise de style :

    <style lang="scss">
    .my-button {
      padding: 10px 20px;
      border-radius: 8px;
      border: 0;
      &.warning {
        background-color: #FC4;
      }
    }
    </style>

    3 Classe calculée

    Avec cette technique, on définit simplement un classes la valeur calculée qui renvoie une chaîne de noms de classe CSS basée sur la propriété du composant isWarning valeur:

    computed: {
      classes () {
        if (this.isWarning) {
          return 'my-button warning';
        }
    
        return 'my-button';
      }
    }

    puis nous utilisons la liaison de classe que nous avons utilisée ci-dessus, en ne passant que la valeur calculée :

    <template>
      <button :class="classes">
        {{ text }}
      </button>
    </template> 

    4 Style calculé avec variable CSS

    Ahh, c’est la technique que j’aime le plus. C’est une variante de la précédente mais nous utilisons une liaison de style et une variable CSS afin de changer la couleur de fond.
    Commençons par utiliser une variable CSS pour background-color biens:

    <style lang="scss">
    .my-button {
      padding: 10px 20px;
      border-radius: 8px;
      border: 0;
      background-color: var(--button-bg-color)
    }
    </style>

    puis nous ajoutons une valeur calculée qui définit la valeur finale de notre --button-bg-color variable:

    computed: {
      cssVars () {
        return {
          '--button-bg-color': this.isWarning ? '#FC4' : '#CCC'
        }
      }
    }

    et enfin, nous ajoutons une liaison de style à la balise button :

    <template>
      <button 
        class="my-button"
        :style="cssVars"
      >
        {{ text }}
      </button>
    </template>

    5 composants stylisés

    Styled-components est une célèbre bibliothèque CSS-in-JS utilisée notamment par les développeurs React… et vous pouvez également l’utiliser avec Vue.js. Vous pouvez trouver le package ici, veuillez noter qu’il n’est compatible qu’avec Vue 2.x.

    Installez le package (en utilisant fils comme gestionnaire de packages) :

    yarn add vue-styled-components

    En raison de la simplicité du composant, nous le définissons à l’intérieur du composant parent à l’intérieur du script étiqueter. Tout d’abord, nous devons importer la bibliothèque :

    import styled from 'vue-styled-components';

    puis nous définissons le composant (un bouton stylisé) et sa propriété isWarning:

    const btnProps = {
      isWarning: Boolean
    }
    const MyButton = styled('button', btnProps)`
      padding: 10px 20px;
      border-radius: 8px;
      border: 0;
      background-color: ${props => props.isWarning ? '#FC4' : '#CCC'};
    `;

    Noter la background-color: ${props => props.isWarning ? '#FC4' : '#CCC'};, ici, nous disons à la bibliothèque de modifier la propriété CSS en fonction de la prop isWarning valeur.

    La dernière étape consiste à enregistrer le composant nouvellement créé et à l’utiliser dans le modèle :

    ....
      components: {
        MyButton
      }
    ...

    <my-button :is-warning="true">
      Attention!
    </my-button>

    Outre la bibliothèque styled-components, il existe également d’autres bibliothèques CSS-in-JS utilisables pour Vue.js, par exemple Emotion via le package vue-emotion.

    C’est tout, j’espère que cet article vous sera utile. Si vous connaissez d’autres techniques n’hésitez pas à m’écrire et je mettrai à jour l’article !

    Merci d’avoir lu!

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.