Dashboard
Vue d'ensemble de vos statistiques et activités récentes.
Cliquez sur une image pour l'agrandir (utilise :target)
Placeholders animés avec data-skeleton
Images avec loading="lazy" et effet skeleton
Déplacez le curseur pour comparer (utilise :has() et input range)
Menu latéral qui glisse depuis le côté
Menu déroulant avec :hover et :focus-within
Accordéon stylisé avec details et summary
Contenu de la première section avec des informations détaillées.
Liste des fonctionnalités principales du produit.
Informations de contact et ressources d'aide.
Onglets verticaux avec input radio
Vue d'ensemble de vos statistiques et activités récentes.
Gérez vos informations personnelles et vos préférences.
Configurez les options avancées de votre compte.
body > header:first-of-type - Ciblage du header principalinput[type="checkbox"][id="menu-toggle"] - Input spécifiqueaside[data-type="sticky-sidebar"] - Attribut data personnalisésection[data-component="lightbox"] - Composant par attributdiv[data-skeleton="text"] - Type de skeletondetails[data-type="accordion"] - Accordion stylisénav[data-type="dropdown"] - Dropdown par typeinput:checked ~ aside - Combinateur sibling:target - Pour lightbox et modals:has() - Pour image comparison:hover, :focus-within - Interactions::before, ::after - Pseudo-élémentsHTML qui a du sens, attributs descriptifs, structure claire
Utilisation d'attributs ARIA, rôles natifs, navigation au clavier
CSS léger, pas de JS, chargement rapide
Sélecteurs explicites, pas de nommage de classes
Fonctionnalités modernes utilisées :
:has() - Chrome 105+, Firefox 121+, Safari 15.4+animation-timeline: scroll() - Support limité (Chrome 115+):focus-within - Largement supportéposition: sticky - Largement supportéPour une compatibilité maximale, évitez :has() et scroll-timeline
Ces frameworks adoptent la même philosophie :
Exemple de code HTML et CSS pour le lightbox :
<!-- HTML -->
<a href="#img1">
<img src="photo.jpg" alt="Photo">
</a>
<aside data-type="lightbox" id="img1">
<a href="#">×</a>
<img src="photo-large.jpg" alt="Photo">
</aside>
/* CSS */
aside[data-type="lightbox"] {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.9);
z-index: 9999;
}
aside[data-type="lightbox"]:target {
display: flex;
align-items: center;
justify-content: center;
}
<!-- HTML -->
<input type="checkbox" id="menu-toggle">
<label for="menu-toggle">
<span></span>
<span></span>
<span></span>
</label>
<nav>...</nav>
/* CSS */
input[id="menu-toggle"] {
display: none;
}
input:checked ~ nav {
display: block;
}
input:checked ~ label span:nth-child(1) {
transform: rotate(45deg) translate(5px, 5px);
}
input:checked ~ label span:nth-child(2) {
opacity: 0;
}
input:checked ~ label span:nth-child(3) {
transform: rotate(-45deg) translate(7px, -6px);
}