Exemple 2 : Pure CSS Slide Down Toggle par Surjith
Notre deuxième exemple est assez proche du premier en apparence, mais il utilise une tout autre technique, un peu plus complexe, mais bien plus puissance et souple pour la suite.
See the Pen Pure CSS Slide Down Toggle by Surjith (@surjithctly) on CodePen.
Cette fois-ci, je ne vais pas vous nettoyer le HTML et le CSS, si vous avez compris l'exemple precedent vous ne devriez pas avoir de soucis
D'un point de vue HTML, il y a deux éléments intéressants à remarquer. Pour commencer, l'input[type="checkbox"] tout en haut de la page, et ensuite le fait que le bouton ne soit pas un lien mais un label (sans aucun contenu) qui le contrôle.
Au click sur le label, l'element #toggle passera de l'état null à l'état :checked, ou inversement, nous pouvons donc nous douter que ce soit ce que va utiliser ce pen pour ouvrir ou fermer le volet. Regardons le CSS pour confirmer nos doutes.
Comme pour l'exemple précédent, je passe très rapidement sur les 74 premières lignes de CSS, a l'exception d'un seul point : la ligne 67. Comme vous pouvez le voir, le texte du label (qui était vide, je le rappelle) et insère depuis un pseudo-element. L'avantage de cette technique est qu'elle permet de customiser l'affichage de son label directement depuis le CSS, sans avoir à créer deux éléments.
Attention : si customiser le texte de ses boutons peut sembler intéressant de prime abord, dites-vous bien qu'il sera bien plus complexe de traduire ces bouts de texte si vous avez besoin de multilangue
A partir de la ligne 75, les choses deviennent enfin interessantes grace au selector #toggle:checked ~ .message.
L'élément ~ est un sélecteur de voisin global, et dans notre exemple il va sélectionner tous les éléments .message qui suivent #toggle:checked tant que l'on reste dans le même parent. Il est à bien différencier du +, qui est un sélecteur de voisin stricte, qui ne va sélectionner .message que s'il est le voisin direct de notre élément #toggle:checked
Grâce à ces sélecteurs et le couple label/checkbox, il est donc possible de conditionner du Css à si la checkbox est cochée ou non, et donc d'afficher/masquer notre volet.