Mes bonnes pratiques – CSS

1. Avant-propos

De nos jours, CSS est sous-exploité. Il y a un fossé entre les développeurs Angular/React/Vue/… et les designers UI.

Le designer UI imbrique trente <div> chargées de quarante classes CSS, tandis que le dev Angular s’emballe toutes les deux semaines pour la dernière lib à la mode, alors que son enfer de dépendances ne compile plus depuis longtemps sans npm i --force, parce que les peer dependencies sont en conflit. CSS et HTML n’intéressent guère le fanatique de TypeScript. Pour le moindre champ de saisie, il lui faut Material, car il a peur de ne pas réussir la validation autrement. Et surtout, pas question de perdre du temps à réinventer la roue. Qu’il perde tout ce temps dès la première exigence que la bibliothèque ne couvre pas, et qu’il se retrouve à lire les issues GitHub de la lib, cela ne lui vient pas à l’esprit.

Dans un projet fullstack, le développeur a rarement l’occasion de mettre à profit ses talents de designer frontend. Il reçoit les maquettes d’écran dans Figma et doit les reproduire à l’identique. La plupart des développeurs frontend de ce genre ne se rendent même pas compte qu’une seule ligne de CSS suffit pour obtenir une mise en page responsive. CSS est plus puissant que jamais. Fini le temps des bidouilles de style en JS, des innombrables media queries et des contournements pour IE 8. Hourra !

2. Centrage parfait

Ça n’a pas toujours plu en entretien d’embauche, mais moi, je trouvais ça génial : à la question de savoir si j’étais bon en frontend, je répondais volontiers « Oh oui. Je sais centrer verticalement une <div>. »

Centrer une div est notoirement difficile.

Plus maintenant :

:)
.parent {
    display: grid;
    place-items: center
}

3. Grille responsive

1
2
3
4
.parent {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}

4. Flex responsive

1
2
3
.parent {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
}

.box {
    flex: 1 1 150px; /*  Stretching: */
    flex: 0 1 150px; /*  No stretching: */
    margin: 5px;
}

5. Mise en page

En-tête
Contenu
Pied de page
.parent {
    display: grid;
    grid-template-rows: auto 1fr auto;
}

6. Barre latérale

Min : 150px / Max : 25 %
Cet élément occupe la deuxième position de la grille (1fr), c’est-à-dire qu’il prend tout l’espace restant.
.parent {
    display: grid;
    grid-template-columns: minmax(150px, 25%) 1fr;
}

7. Crédits

1-Line Layouts