Tailwind et le CSS fonctionnel ont énormément gagné en popularité ces dernières années. Quelles opportunités cela nous offre en tant que designers et développeurs ? Comment intégrer ça à notre workflow ?
On va rapidement introduire Tailwind; ses concepts, son utilisation. Puis voir comment l’intégrer de façon optimale dans une application JavaScript. Et enfin, faire un retour sur expérience de l’approche présenté après une petite année d’exploration.
Ce talk s’adresse à tous ceux aussi bien aux personnes qui ne connaisse pas Tailwind, que ceux qui l’utilise depuis longtemps. Et pas besoin d’être un développeur chevronné pour suivre
7. 👶 Au commencement
<div>
<img src="/avatar.jpg" alt="Adam Wathan's portrait">
<div>
<h2>Adam Wathan</h2>
<p>
Adam is a rad dude who likes TDD,
Active Record, and garlic bread with cheese.
He also hosts a decent podcast and has never
had a really great haircut.
</p>
</div>
</div>
<div class="author-bio">
.author-bio {
background-color: white;
border: 1px solid hsl(0,0%,85%);
border-radius: 4px;
overflow: hidden;
> img {
display: block;
width: 100%;
height: auto;
}
> div {
padding: 1rem;
> h2 {
font-size: 1.25rem;
}
> p {
font-size: 1rem;
line-height: 1.5;
}
}
}
8. 🧒 Approche sémantique
<div class="media-card">
<img
class="media-card__image"
src="/avatar.jpg"
alt="Adam Wathan's portrait" />
<div class="media-card__content">
<h2 class="media-card__title">Adam Wathan</h2>
<p class="media-card__body">
Adam is a rad dude who likes TDD,
Active Record, and garlic bread with cheese.
He also hosts a decent podcast and has never
had a really great haircut.
</p>
</div>
</div>
.media-card {
background-color: white;
border: 1px solid hsl(0,0%,85%);
border-radius: 4px;
overflow: hidden;
}
.media-card__image {
display: block;
width: 100%;
height: auto;
}
.media-card__content {
padding: 1rem;
}
.media-card__title {
font-size: 1.25rem;
}
.media-card__body {
font-size: 1rem;
line-height: 1.5;
}
9. Et si j’ai un nouveau composant qui utilise les
mêmes styles que .media-card ?
• On duplique le CSS ?
• @extend ?
• On refactor en classes plus générales ?
• On réutilise .media-card hors contexte ?
• … 🤕
10. Quand on parle de separation of concerns avec HTML
et CSS, il s’agit de définir le sens de la relation.
• Le CSS dépend de l’HTML : HTML indépendant
fournit les classes dont dépend le CSS
(ex .author-bio).
• L’HTML dépend du CSS : CSS indépendant
fournit des classes que l’HTML utilise pour
construire l’interface (ex .btn).
12. 🧑🎤 Functional CSS
<div class="md:flex">
<div class="md:flex-shrink-0">
<img class="rounded-lg md:w-56" src="/picture.jpg" alt="Woman paying for a purchase">
</div>
<div class="mt-4 md:mt-0 md:ml-6">
<div class="uppercase tracking-wide text-sm text-indigo-600 font-bold">
Marketing
</div>
<a href="#" class="block mt-1 text-lg leading-tight font-semibold text-gray-900 hover:underline">
Finding customers for your new business
</a>
<p class="mt-2 text-gray-600">
Getting a new business off the ground is a lot of hard work.
Here are five ideas you can use to find your first customers.
</p>
</div>
</div>
13. En résumé, c’est juste des styles inlines 😏
— Captain sceptique, 2020
• Les styles inlines définissent les valeurs à l’usage.
• Les utility classes assurent la consistance des valeurs.
<article>
<h1 class="text-h1">My article</h1>
<h2 class="text-lg">Intro</h2>
<p>Lorem ipsum dolor sit amet...</p>
<h2 class="text-lg">First thing first</h2>
<p>Eiuro, inquit adridens iniquum...</p>
</article>
<article>
<h1 style="font-size: 30px">My article</h1>
<h2 style="font-size: 22px">Intro</h2>
<p>Lorem ipsum dolor sit amet...</p>
<h2 style="font-size: 23px">First thing first</h2>
<p>Eiuro, inquit adridens iniquum...</p>
</article>
≠
🙈
14. 👍 Les avantages
• Consistance des styles
• Grande flexibilité
• DX, rapidité de développement (+ design in browser)
• Handover et maintenance facilités
• Target agnostic (JavaScript ou non, frameworks,…)
• Scalability
15. 👎 Les inconvénients
• Code HTML “pollué”
• Expérience de debug; inspection DevTools
• Nom des classes sémantiques
21. 👯 Twin ?
• Macro Babel
• Transforme les utility classes en CSS-in-JSS
• Fonctionne avec la plupart des libraries (styled-
components, Emotion,…)
• Suggestions lors de fautes de frappe
33. Chez Antistatique, nous utilisons Tailwind de
plus en plus et Twin pour nos projets React
depuis ~1 an. #happySoFar
34. ♥ J’aime le functional CSS et Tailwind
parce que
• Mettre en place de nouveaux composants est plus rapide
• Revenir sur un vieux projet pour modifier les “styles” est
moins pénible
• Plus besoin de savoir le nom des classes et variables
Bootstrap
35. 💔 J’aime moins le functional CSS et Tailwind
parce que
• Je n’écris plus de CSS…
• Il faut quand même savoir le nom des classes Tailwind
(tailwind intellisense ne marche pas avec Twin), mais la
doc est cool