Nouveauté CSS – 2023

:has()

Cette nouvelle pseudo-class, permet de mettre en page les éléments HTML selon leur contenu. Par exemple :

Pour une liste d’articles, on pourrait en avoir certains contenant une images et d’autres sans images. On pourrait alors dire au CSS, mon article à par défaut une taille de texte à 42px et par contre, si mon article comprend une balise “img” tu réduis la taille du titre à 24px. Cela permet de manière très simple d’équilibrer visuellement les articles avec ou sans images.

/!\ au 24 août 2023, il n’est pas encore compatible avec Firefox

article h2 {
     font-size: 42px;
}
article:has(img) h2 {
    font-size: 24px;
}

En savoir plus ici : MDN web docs


@container

Le @container est une nouvelle règle en CSS qui permet de mettre en forme les éléments par rapport au container parent. C’est à dire qu’aujourd’hui, on peut dire à si mon header fait moins que 400px tu executes cette mise en page, sinon tu mets les propriétés par défaut. Concrètement, en CSS ça donnerait :

   header {
       container: header / inline-size;
       display: flex;
       flex-direction: row;
   }


   /* Si la largeur du container 'header' est plus petit que 400px */

   @container header (width < 400px) {
       flex-direction: column;
   }

En savoir plus ici : MDN web docs


Transform (obsolète)

Il y a moins d’une année, le transform était encore obligatoire et depuis CSS3 nous simplifie la vie en ayant séparer chacune des valeurs “transform” en propriété unique, concrètement :

div {
    /* avant 2023 */
    transform: rotate(90deg) translate(10px, 10px) scale(2);

    /* maintenant */
    rotate: 90deg;
    translate: 10px 10px;
    scale: 2;
}

Voir : Scale // Translate // Rotate

Exercices HTML / CSS

HTML:


CSS:

https://www.w3schools.com/css/exercise.asp

Entrainer les sélécteurs CSS :

Flexbox :


Flexbox: s’y retrouver dans “shrink” “flex” & “basis”

Les flex box, c’est vraiment un superbe outil relativement simple pour afficher des éléments pour autant que les dits éléments restent de la même taille. Si par contre, l’on désire que certains de ces derniers restent souples et s’adaptent à leur contenu, cela devient plus compliqué. C’est pour cela que ces règles sur les éléments enfants ont été créées. Elles ne sont pas simples à comprendre mais cette page devrait vous aider à mieux les comprendre.

https://css-tricks.com/understanding-flex-grow-flex-shrink-and-flex-basis/

Voici :not() …. une pseudo-class qui s’avérera très pratique.

A l’heure d’écrire ces lignes, il est peut-être encore un peu tôt pour l’utiliser en production, le site caniuse.com indique une implémentation encore très récente (jan-sept 2021) sur les navigateurs courants. Mais le fait de pouvoir exclure divers éléments, et pas que des classes ou autre sélecteurs, sera probablement très pratique.

Le site css-tricks vous en expliquera toutes les subtilités.


Un petit tour sur ce codepen pour tester tout cela pourra également être utile.

Min, max, clamp!

Des fonctions très sympathiques pour gérer la taille de vos typo selon la taille de l’écran.

(attention tout de même, ces fonctionnalités sont assez récentes et sont uniquement prises en charge par les navigateurs récents)

Un lien “animé”

Comment personnaliser le survol d’un lien avec une images svg et sans javascript