Skip to main content

Créer des composants Vue 3 avec Tailwind CSS

Écrit par
Headshot of Mary Gathoni

Mary Gathoni

feature api

21 février 2023

0 minutes de lecture

Vue est un framework JavaScript populaire qui permet de créer des interfaces web polyvalentes. Parmi ses fonctionnalités les plus intéressantes figurent son intégration facile aux bases de code existantes et sa légèreté, qui permettent aux développeurs de l’adopter facilement dans leurs projets front-end.

Au cœur de Vue se trouve une approche de création d’interfaces web fondée sur des composants composables. Les composants sont des fragments de code réutilisables qui servent de briques de base à vos applications. Le modèle de composants de Vue vous permet de créer des composants autonomes regroupant logique, contenu et styles en un même endroit.

Pour styliser ces composants, vous pouvez utiliser un framework comme Tailwind CSS afin d’intégrer directement les styles au balisage et d’encapsuler encore davantage le composant. Tailwind CSS est un framework CSS qui regroupe des classes réutilisables pour styliser les éléments d’interface utilisateur (UI). Vous pouvez utiliser ces classes pour appliquer des styles aux polices, aux couleurs, aux marges intérieures et extérieures, aux animations et aux transitions. Par exemple, l’attribut text-black affiche en noir tout le texte d’un élément. Ces classes sont composables et peuvent être combinées pour mettre en œuvre n’importe quel design.

Dans ce tutoriel, vous apprendrez à créer des composants Vue 3 avec Tailwind CSS en réalisant une carte d’article adaptative. Le code complet du projet est disponible ici.

Prérequis

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

  • Une version à jour de Node.js et npm installés

  • Un éditeur de texte comme Visual Studio Code (VS Code)

  • Une connaissance de la ligne de commande

  • Une familiarité avec Vue et CSS

Créer vos propres composants Vue 3 avec Tailwind

Pour commencer, créez un nouveau projet Vue 3. Exécutez la commande suivante dans votre terminal pour installer et lancer create-vue, l’outil officiel de création de projets Vue permettant de générer des projets basés sur vite :

npm init vue@latest

Une invite s’affiche avec une liste de fonctionnalités facultatives. Nommez le projet vue-tailwindcss et choisissez No pour toutes les autres options.

√ Project name: ... vue-tailwindcss
√ Add TypeScript? ... No / Yes
√ Add JSX Support? ... No / Yes
√ Add Vue Router for Single Page Application development? ... No / Yes
√ Add Pinia for state management? ... No / Yes
√ Add Vitest for Unit Testing? ... No / Yes
√ Add an End-to-End Testing Solution? » No
√ Add ESLint for code quality? ... No / Yes
√ Add Prettier for code formatting? ... No / Yes

Accédez ensuite au dossier du projet à l’aide de cd vue-tailwindcss, puis exécutez npm install pour installer depuis npm les dépendances open source du projet.

Exécutez npm run dev pour lancer l’application dans un environnement de développement.

Cette commande devrait lancer l’application sur le serveur localhost :

Sortie du terminal indiquant que Vite v4.0.4 s’exécute en local à l’adresse http://localhost:5173/

Accédez à l’URL locale indiquée pour afficher l’application :

Page d’accueil sombre d’un projet Vue affichant le logo Vue, le message « Vous l’avez fait ! », des liens de navigation et des sections consacrées à la documentation, aux outils, à l’écosystème, à la communauté et à

Il est maintenant temps de configurer Tailwind CSS dans l’application Vue.

Configurer Tailwind avec Vue

Pour commencer, exécutez la commande suivante dans le terminal :

npm install -D tailwindcss@latest postcss@latest autoprefixer@latest

Cette commande installe Tailwind CSS et ses dépendances associées (autoprefixer et postcss) via npm.

Générez ensuite les fichiers tailwind.config.js et postcss.config.js en exécutant la commande ci-dessous. Vous utiliserez ces fichiers pour configurer et personnaliser Tailwind :

npx tailwindcss init -p

Cette commande devrait créer le fichier tailwind.config.js à la racine du projet avec les paramètres suivants :

   module.exports = {
   content: [],
   theme: {
     extend: {},
   },
   plugins: [],
 }

Vous avez également créé le fichier postcss.config.js et configuré les plugins tailwindcss et autoprefixer :

  module.exports = {
   plugins: {
     tailwindcss: {},
     autoprefixer: {},
   },
 }

Dans tailwind.config.js, modifiez le tableau content pour y inclure tous les chemins vers vos pages et composants. Tailwind pourra ainsi supprimer les classes CSS inutilisées du résultat final et réduire la taille du fichier. 

Votre fichier tailwind.config.js devrait maintenant ressembler à ceci :

  module.exports = {
   content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"],
   theme: {
     extend: {},
   },
   plugins: [],
  };

Créez ensuite un fichier nommé index.css dans le dossier src du projet, puis ajoutez le contenu suivant :

@tailwind base;
@tailwind components;
@tailwind utilities;

Vous avez utilisé la directive @tailwind pour inclure dans votre projet les styles de base, de composants et d’utilitaires de Tailwind. Plus tard, lors de la compilation du projet, Tailwind remplacera automatiquement ces directives par les styles que vous lui aurez indiqués.

Importez maintenant index.css dans notre fichier ./src/main.js pour commencer à l’utiliser :

import './index.css'

Notez que vous devez supprimer la ligne qui importe le fichier assets/main.css. Cela vous empêchera d’utiliser du CSS natif.

Vous pouvez maintenant créer des composants avec Tailwind.

Créer des composants Vue

Pour apprendre à utiliser Tailwind dans les composants Vue, créez un composant carte pour un article.

Créez ensuite un fichier nommé ArticleCard.vue dans le dossier src/components. Ajoutez le code suivant :

<template>
  <div>
    <div>
      <img src="../assets/coverimage.jpg" alt="Close-up of code" />
    </div>
    <div>
      <div>Vue</div>
      <a href="#">Building Vue 3 Components With Tailwind CSS</a>
      <p>
        Learn how to create visually stunning Vue components using the popular
        utility-first CSS framework Tailwind.
      </p>
    </div>
  </div>
</template>

Le code ci-dessus crée un modèle nommé ArticleCard, qui définit un composant carte composé d’une image et d’un résumé de l’article.

Pour l’afficher dans le navigateur, nettoyez la page d’accueil en supprimant tout le contenu du fichier App.vue. Importez ensuite le composant ArticleCard dans la section script de App.vue :

<script setup>
import ArticleCard from "./components/ArticleCard.vue";
</script>

Utilisez-le ensuite dans le modèle :

<template>
  <ArticleCard />
</template>

L’étape suivante consiste à styliser la carte à l’aide des classes utilitaires de Tailwind CSS.

Explication des classes utilitaires

Avec du CSS natif — et quelques autres frameworks CSS —, vous pouvez utiliser des classes CSS personnalisées pour styliser les éléments d’une page.

Voici un exemple d’élément de lien stylisé à l’aide des classes link-wrapper et link :

<template>
  <div class="link-wrapper">
    <a href="#" class="link">Building Vue 3 Components With Tailwind CSS</a>
  </div>
</template>
<style>
.link-wrapper {
  padding: 8px;
}
.link {
  font-weight: 500;
  font-size: 1.125rem;
  line-height: 1.75rem;
  color: #000;
}
</style>

Pourquoi utiliser Tailwind CSS ?

Le problème avec cette approche, c’est que vous devez trouver des noms de classes pertinents chaque fois que vous souhaitez styliser un élément. Vous devez aussi mémoriser des noms extrêmement longs et descriptifs dès que vous voulez réutiliser une classe. En outre, vous devez écrire beaucoup de CSS, car chaque nom de classe ajouté à une page s’accompagne de styles. Ainsi, à mesure que votre application se développe, vos fichiers CSS s’alourdissent, ce qui augmente la taille du bundle et ralentit le chargement.

Avec Tailwind CSS, en revanche, vous pouvez utiliser des classes CSS prédéfinies appelées classes utilitaires. Elles proposent des options de style courantes, comme flex, l’alignement du texte, les bordures, les marges, les espacements intérieurs et les couleurs. Vous pouvez ainsi styliser des pages sans écrire de CSS.

Voyons à quoi ressemblerait l’exemple de lien précédent s’il était stylisé avec Tailwind CSS :

<div class="p-8">
    <a href="#" class="font-medium text-lg text-black">Vue + TailwindCSS</a>
</div>

Vous avez remplacé l’objet de styles et les classes personnalisées par les classes utilitaires suivantes :

  • p-8 définit l’espacement intérieur sur 8 px.

  • font-medium définit l’épaisseur de la police sur 500.

  • text-xl définit la taille de police sur 1.125rem et la hauteur de ligne sur 1.75rem.

  • text-black définit la couleur du texte sur noir.

L’utilisation de classes utilitaires réduit la quantité de CSS et permet à toute personne qui consulte le code de comprendre facilement l’intention derrière le style des éléments, sans avoir à consulter une feuille de style.

Tailwind propose de nombreuses classes utilitaires, que vous trouverez dans sa documentation sur les utilitaires.

Styliser un composant carte avec Tailwind CSS

Maintenant que vous connaissez les classes utilitaires, il est temps de styliser le composant carte.

Commencez par modifier le fichier src/components/ArticleCard.vue pour utiliser les classes utilitaires de Tailwind :

<template>
  <div class="flex max-w-2xl mx-auto bg-white rounded-sm shadow-md">
    <div>
      <img
        class="h-full w-full object-cover"
        src="../assets/coverimage.jpg"
        alt="Closeup code"
      />
    </div>
    <div class="p-8">
      <div class="uppercase tracking-wide text-sm text-violet-500 font-medium">
        Vue
      </div>
      <a
        href="#"
        class="mt-1 text-lg tracking-tight font-medium text-black hover:underline"
        >Building Vue 3 Components With Tailwind CSS
      </a>
      <p class="mt-2 text-sm text-slate-500">
        Learn how to create visually stunning Vue components using the popular
        utility-first CSS framework Tailwind.
      </p>
    </div>
  </div>
</template>

Avec ces nouveaux styles, le composant carte devrait ressembler à ceci :

Éditeur de code à côté d’une carte intitulée « Créer des composants Vue 3 avec Tailwind CSS », qui décrit la création de composants Vue avec Tailwind.

En plus des classes utilitaires, vous avez utilisé des modificateurs pour styliser la carte. Notez la classe hover:underline de la balise <a/> : hover est le modificateur.

Dans Tailwind, placez les modificateurs au début du nom d’une classe utilitaire pour indiquer l’état à cibler. Dans l’exemple ci-dessus, vous avez ciblé le survol, mais vous pourriez aussi cibler l’état de focus avec la classe focus:text-violet-200, ou l’état actif avec active:text-violet-600. 

Vous pouvez utiliser différents modificateurs Tailwind CSS selon la condition à cibler. Pour consulter la liste complète, rendez-vous dans la documentation Tailwind CSS.

Jusqu’ici, le composant carte s’affiche très bien sur les grands écrans. Mais à mesure que la taille de l’écran diminue, la mise en page devient de plus en plus encombrée :

Carte d’article intitulée « Créer des composants Vue 3 avec Tailwind CSS », avec du code flouté visible à gauche

Heureusement, vous pouvez modifier la mise en page de la carte en fonction de la largeur de l’écran.

Gérer les points de rupture dans Tailwind CSS

Tailwind CSS vous permet d’appliquer conditionnellement une classe utilitaire à différents points de rupture. Par défaut, il en existe cinq, chacun prenant effet à partir d’une largeur minimale donnée :

  • sm — 640 px

  • md — 768 px

  • lg — 1 024 px

  • xl — 1 280 px

  • 2xl — 1 536 px

Pour gérer un point de rupture, ajoutez-le en préfixe à la classe utilitaire, suivi de deux-points (:).

breakpoint:utility-class

Prenons le bouton suivant :

<button class="w-16 md:w-32 lg:w-48">
  Submit
</button>

Tailwind applique la classe w-16 aux petits écrans, w-32 aux écrans moyens et w-48 aux grands écrans.

Vous pouvez utiliser les points de rupture pour modifier la mise en page, la taille, la couleur ou toute autre propriété sans recourir aux media queries. Vous pouvez également personnaliser les tailles d’écran dans tailwind.config.js si les valeurs par défaut ne répondent pas à vos besoins en matière de design.

Par exemple, le code suivant remplacera la taille d’écran lg :

module.exports = {
  theme: {
    extend: {
      screens: {
        'lg': '960px',
      },
    },
  },
}

Dans votre composant carte d’article, utilisez les points de rupture pour modifier sa mise en page et ajuster la taille de l’image :

Voici le code modifié. Notez les premières balises <div/> et <img/> :

<template>
  <div
    class="md:flex md:max-w-2xl max-w-md mx-auto bg-white rounded-sm shadow-md overflow-hidden"
  >
    <div>
      <img
        class="h-48 w-full object-cover md:h-full"
        src="../assets/coverimage.jpg"
        alt="Closeup code"
      />
    </div>
    <div class="p-8">
      <div class="uppercase tracking-wide text-sm text-violet-500 font-medium">
        Vue
      </div>
      <a
        href="#"
        class="mt-1 text-lg tracking-tight font-medium text-black hover:underline"
        >Building Vue 3 Components With Tailwind CSS</a
      >
      <p class="mt-2 text-sm text-slate-500">
        Learn how to create visually stunning Vue components using the popular
        utility-first CSS framework Tailwind.
      </p>
    </div>
  </div>
</template>

Voici les modifications apportées :

  • Les modificateurs md:flex et md:max-w-2xl transforment le composant carte en conteneur flex d’une largeur maximale de 48 rem sur les écrans moyens et grands. Sur les petits écrans, la classe max-w-md définit une largeur de 28 rem.

  • Dans l’élément <img/>, md:h-full affiche l’image en pleine hauteur sur les écrans moyens et grands, tandis que la classe h-48 définit une hauteur de 12 rem sur les petits écrans.

Voici le résultat du composant sur un petit écran :

Carte d’article de blog montrant du code CSS au-dessus du titre « Créer des composants Vue 3 avec Tailwind CSS » et une description de la création de composants Vue.

Et voilà ! Vous pouvez maintenant créer des composants Vue avec Tailwind CSS.

Une fois votre application Vue terminée, découvrez comment la déployer sur Netlify avec les mises à jour de sécurité automatiques de Snyk. Créez un compte gratuit et importez votre projet dans Snyk dès aujourd’hui pour détecter et corriger les vulnérabilités susceptibles de se cacher dans ses dépendances, et protéger votre application contre les attaques XSS et autres menaces de sécurité.

Conclusion

Ce tutoriel vous a montré comment créer un composant Vue 3 avec Tailwind CSS. Tailwind CSS est un framework utilitaire qui rend le processus de création de composants UI plus efficace et plus fluide. Vous pouvez utiliser des classes utilitaires pour créer des designs adaptatifs sans consulter de feuilles de style externes ni mémoriser des dizaines de noms de classes. Tailwind vous permet de créer votre propre système de design en personnalisant les classes par défaut. De plus, il supprime automatiquement toutes les classes inutilisées lors de la compilation de production, ce qui réduit la quantité de code dans le produit final.

Publié dans:

Lire la suite

Blog

Stadium Summer : la tournée Fan Zone de Snyk Connect

La tournée Fan Zone de Snyk a proposé des ateliers sur la sécurité de l’IA, des occasions de réseauter et une compétition amicale dans 8 villes et lors de 3 sessions virtuelles. Les participants ont développé leurs compétences, échangé des idées et progressé ensemble.

Blog

Snyk VulnBench JS 1.0 : les LLM peuvent-ils détecter deux fois les mêmes bugs ?

Snyk VulnBench JS 1.0 : 300 analyses répétées montrent que les résultats de sécurité des LLM varient d’une exécution à l’autre, tandis que SAST et modèles détectent différentes vulnérabilités.

feature insights context
Blog

Construire la sécurité de l’IA avec nos clients : 5 leçons du programme de partenaires de conception d’Evo

Découvrez 5 leçons clés tirées du programme de partenaires de conception d’Evo de Snyk. Découvrez comment la découverte de l’IA, le renseignement sur les risques et l’automatisation des politiques aident les équipes à sécuriser l’IA générative et à maîtriser la prolifération de l’IA à grande échelle.