Chargement…

Tailwindcss et Classnames en un seul package

Tailwindcss et Classnames en un seul package

Pourquoi Tailwindcss ? 🤔

Il existe déjà des librairies CSS tels que Bootstrap, Bulma, Ui-kit etc... Ces librairies ont apporté leur lots de nouveautés notamment le passage à la grille de N colonne pour organiser ses vues de manière horizontale.

Mais ces librairies ont déjà une d'identité visuelle forte et lorsque l'on veut créer quelque chose de personnalisé, il faut souvent importer ces librairies (qui sont déjà lourdes), puis les personnaliser (ajouter un custom CSS qui alourdi d'autant plus notre projet).

Tailwindcss propose une approche de compilation à la volée qui va garder uniquement l'essentiel de ce que nous utilisons dans le projet. Cette approche permet d'optimiser la taille de nos livrables, de plus Tailwind est une alternative qui laisse place à notre créativité en matière de design car cette librairie ne fourni que les outils. C'est à vous de créer vos composants etc...

A quoi sert Classnames ? 🧐

Classnames est un paquet qui permet les classes d'un composant de manière très simple. Cette librairie permet d'ajouter les classes conditionnellement et de concaténer, etc....

import cn from 'classnames'

type ComponentProps = {
  bold: boolean
}

const Component = ({  bold }: ComponentProps) => {
  return (
    <div className={cn('rounded-lg', 'bg-white', { 'font-bold': bold, 'font-semibold': !bold })}>
      // contenu...
    </div>
  )
}

Dans cet exemple, la classe au moment du rendu sera 'rounded-lg bg-white font-semibold' ou 'rounded-lg bg-white font-bold' en fonction de la valeur de la propriété bold. Et on peut continuer à mixer les propriétés en ce sens.

D'ailleurs, il n'est pas obligatoire de passer une seule classe par argument, on aurait très bien pu mettre ensemble les deux premiers arguments : 'rounded-lg bg-white'.

Faire aussi bien que Tailwindcss et Classnames réunis 🤝

Le paquet twind prend le meilleur des deux mondes. Et c'est littéralement la révolution !

Commencez par installer le paquet :

yarn add twid

Puis vous pouvez vous en servir comme ceci :


const Title = () => {
  return (
    <h1 class="${tw`font-bold text(center 5xl white sm:gray-800 md:pink-700)`}">
      This is Twind!
    </h1>
  ) 
}

Remarquez que dans cet exemple qui vient de la documentation de twind, on utilise text(...) comme une fonction. Tout ce qui se trouve entre les parenthèses seront concaténés par text-. Le code est donc encore plus court à écrire pour un résultat similaire.

Pratique non ?

En n'oubliant pas d'installer l'extension vscode pour avoir l'intellisense :

twind-extension-vscode ><

Vous pourrez bénéficier ensuite de l'auto-complétion avec le raccourci "CTRL + Space" (sous linux)

twind-intellisense-usage ><

En tout cas, cette librairie m'a convaincu et j'ai fait le choix de m'en servir pour mes projets futurs. 😃

FAQ

Quelle est la différence entre twind et l'utilisation séparée de Tailwindcss et Classnames ?

twind regroupe les fonctionnalités des deux outils en un seul package, ce qui évite de gérer deux dépendances distinctes. Il ajoute en plus une syntaxe groupée comme text(...) qui rend le code encore plus concis.

Est-ce que twind fonctionne avec n'importe quel framework JavaScript ?

L'article présente twind dans un contexte React, mais le package npm est indépendant du framework. Il est donc utilisable dans d'autres environnements JavaScript selon votre projet.

Comment obtenir l'autocomplétion des classes twind dans VS Code ?

Il suffit d'installer l'extension twind disponible sur le marketplace de VS Code, puis d'utiliser le raccourci CTRL + Espace sous Linux pour déclencher les suggestions.

Pourquoi préférer Tailwindcss à Bootstrap ou Bulma ?

Contrairement à Bootstrap ou Bulma, Tailwindcss n'impose pas de style visuel prédéfini et ne garde dans le livrable final que les classes réellement utilisées dans le projet. Cela allège considérablement le poids du CSS en production.

Peut-on appliquer des classes conditionnelles avec twind comme avec Classnames ?

twind intègre nativement cette capacité, ce qui permet d'éviter d'installer Classnames séparément. Vous pouvez donc gérer dynamiquement vos classes selon l'état de vos composants directement via twind.


Poursuivre la lecture

Un template frontend React Typescript Dev
#react#template#typescript

Un template frontend React Typescript

Je vous donne mon template perso pour déployer un projet React Typescript en moins de temps qu'il ne faut pour lire le nombre de techno que ça embarque. 😂

Alexandre P.
Conseil clean code React Dev
#react#clean code#conseil

Conseil clean code React

Aujourd'hui, je veux vous parler d'une habitude ou bonne pratique que je mets en place dans mes projets React, afin d'éviter de me perdre et afin de respecter les règles du clean code.

Alexandre P.