Les slides sont disponibles :
https://tzi.fr/slides/riviera2018-cmp
https://tzi.fr/slides/riviera2018-cmp.pdf
Des éléments à assembler pour créer votre site
1 site = Σ composants
Maintenir un site au global :
Maintenir un composant :
Un bon composant est un composant autonome
Isolation
The more I’ve worked/matured, the more I view modularity as a way of facilitating code deletion rather than code reuse.
Le cycle de vie d'un composant :
Le composant tout terrain
Les rôles d'un composant réutilisé :
Un composant :
Thomas Zilliox, expert CSS freelance.
Découvre le CSS depuis 12 ans maintenant.
Je suis un fan de BEM, OOCSS, des classes atomiques
Architecture React, des chaînes, des pays.
Migration en cours sur du CSS-in-JS.
On peut faire des CSS orientés composants
avec toutes les méthodologies !
Isolation
Un exemple de style en fonction du contexte :
.button { ... }
#contactPage .button { ... } /* invalid */
Le risque est de casser :
Pas de classe étrangère à notre composant dans nos sélecteurs
CSS-in-JS n'est pas immunisés.
const Icon = styled.svg`
transition: fill 0.25s;
${Link} & {
fill: rebeccapurple;
}
`;
Isolation
Pourquoi un composant non-documenté n'est pas valide ?
.account-button { ... }
.account-content-button { ... }
.auth-content-form__input--submit { ... }
Le risque est de casser :
Le composant est dans la documentation
ou respecte une convention commune
En CSS-in-JS le problème est double:
Un exemple de sélecteur contenant de la logique sur le positionnement du composant dans le DOM :
.card { ... }
.card:first-child { ... } /* invalid */
.card + .card { ... } /* invalid */
Le risque est de casser :
Pas d'opérateurs ou pseudo-classes qui conditionnent les styles à une position spécifique de l'élément racine dans le DOM
CSS-in-JS n'est pas immunisés.
Il vaut mieux utiliser une variance qu'une règle auto-magique.
.twitter__notification {
position: absolute;
top: -20px;
right: -20px;
z-index: 3;
}
Le risque est de casser :
Si le composant contient des éléments positionnés, je dois avoir un position: relative
sur l'élément racine.
Isolation
.footer { ... }
.footer a { ... } /* invalid */
Le risque est de casser :
J'évite de styler les éléments en utilisant la cascade
sinon je limite au maximum la porté de mon sélecteur.
.footer__text a { ... }
<footer class="footer">
<div class="footer__text">Contenu avec des liens</div>
<div class="footer__action">
<button class="button">Button isolé !</button>
</div>
</footer>
Si une classe est appliquée aux liens,
les styles ne s'appliquent plus !
.footer a:not([class]) { ... }
Don’t Layout Yourself: A component should style itself, but give up the task of layouting to its parent.
Le risque est de casser :
sur l'élément racine :
J'utilise width
et height
qu'avec 100%
Je n'utilise pas margin
Je n'utilise pas float
et position: absolute
Je fais confiance à mes collègues !
.footer__content { display: flex } /* invalid */
<div class="slider">
<div class="slider__content">
<div class="card"></div>
</div>
</div>
Les fils des display: flex
sont des éléments flexibles.
Les fils des display: grid
sont des cellules.
Le risque est de casser :
Les noeuds qui vont accueillir des sous-composants
ne sont ni display: flex
ni display: grid
.
Les vérifications essentielles :
Les vérifications faciles :
Les vérifications structurelles :
flex
ou grid
Isolation
Des questions ?
@iamtzi
https://tzi.fr/slides/riviera2018-cmp
https://tzi.fr/slides/riviera2018-cmp.pdf