Le web d’aujourd’hui, démontré
Dix démos en direct des capacités des navigateurs modernes.
Manipulez chacune d’elles et observez le code se mettre à jour en temps réel.
Démo 01 — WebGL2
WebGL : calcul de lumière par pixel
Un fragment shader calcule la sortie de chaque pixel à l’aide de champs de distance mathématiques. Cette démo évalue un métachamp à partir de cinq points en orbite plus la position de votre curseur, produisant des surfaces par pure arithmétique. Déplacez-vous dans le frai. Cliquez n’importe où pour déclencher une pulsation. La fenêtre de code affiche les uniforms transmis au GPU à chaque image.
WebGL2 n’est pas disponible dans ce navigateur. La démo est désactivée.
// envoyé à chaque image
gl.uniform2f(u.res, canvas.width, canvas.height);
gl.uniform1f(u.time, 0.00);
gl.uniform2f(u.mouse, 0.00, 0.00);
gl.uniform1f(u.pulse, 0.00);
gl.drawArrays(gl.TRIANGLES, 0, 3);
// dans le shader, le pointeur est un
// centre de plus dans le champ :
// f += (0.06 + pulse * 0.14)
// / dot(p - mouse, p - mouse)
Démo 02 — CSS
Animations liées au défilement
Les timelines d’animation CSS associent le mouvement à la progression du défilement plutôt qu’au temps de l’horloge. La barre de défilement devient une tête de lecture. Toute l’animation ici utilise une timeline nommée en CSS ; le thread compositeur exécute le mouvement de façon indépendante. JavaScript ne fait que lire et afficher le pourcentage de défilement courant.
La barre de progression est liée au décalage de défilement de ce conteneur. C’est une animation CSS en pause ; la position de la barre de défilement fait avancer et reculer la tête de lecture.
Chaque élément s’anime ici indépendamment via animation-timeline: view() lorsqu’il franchit la limite de la fenêtre.
animation-range: entry 0% entry 90% restreint l’animation à une phase précise de l’entrée de l’élément.
Les animations s’exécutent sur le thread compositeur, indépendamment de la charge du thread principal. Un JavaScript lourd ne peut pas provoquer de saccades.
Les navigateurs sans animation-timeline reçoivent un style de repli ; un petit script pilote la barre de progression via les événements de défilement.
Remontez pour inverser. La timeline répond au mouvement dans les deux sens.
Ce navigateur ne prend pas en charge animation-timeline. Un repli JavaScript pilote la barre.
.scroller {
scroll-timeline: --demo-scroll y;
}
.progress-bar {
animation: fill linear both;
animation-timeline: --demo-scroll;
}
.item {
animation: rise linear both;
animation-timeline: view();
animation-range: entry 0% entry 90%;
}
/* progression du défilement : 0% */
Démo 03 — CSS
OKLCH : la couleur en un seul nombre
OKLCH organise la couleur dans un espace perceptuellement uniforme : luminosité, chroma, teinte. Des couleurs de même luminosité paraissent d’une clarté identique à l’œil humain. Une seule propriété personnalisée CSS contrôle toute la palette ci-dessous ; l’échelle de sept teintes et ombres est calculée en direct avec color-mix(). Déplacez le curseur de teinte pour voir le thème se régénérer à partir d’un seul nombre.
@property --demo-hue {
syntax: "<number>";
initial-value: 195;
inherits: true;
}
.lab {
--demo-hue: 195;
--demo-accent: oklch(0.62 0.13 var(--demo-hue));
/* = oklch(0.62 0.13 195) */
}
.tint {
background: color-mix(in oklch,
var(--demo-accent), white 50%);
}
Démo 04 — Typographie
Polices variables : chasse et graisse
Les polices variables encodent tout l’espace de conception d’un caractère dans un seul fichier. Roboto Flex possède plusieurs axes : graisse, chasse, taille optique, grade et inclinaison. Le GPU interpole les formes de lettres entre les masters définis. Ajustez les curseurs — aucun téléchargement de police supplémentaire.
@font-face {
font-family: "Roboto Flex";
src: url("/fonts/roboto-flex/….woff2")
format("woff2-variations");
font-weight: 100 1000;
}
.specimen {
font-variation-settings:
"wght" 400,
"wdth" 100,
"opsz" 14,
"GRAD" 0,
"slnt" 0,
"XTRA" 468;
}
Démo 05 — CSS
Typographie : text-wrap
CSS offre désormais un contrôle précis du retour à la ligne. text-wrap: balance répartit les mots uniformément entre les lignes, idéal pour les titres. text-wrap: pretty élimine les orphelines — ces mots courts isolés sur la dernière ligne. Cliquez un bouton pour appliquer la valeur au paragraphe.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
.text {
text-wrap: wrap;
}
/* Valeurs valides : */
/* text-wrap: wrap; — défaut */
/* text-wrap: nowrap; — pas de retour à la ligne */
/* text-wrap: balance; — longueurs de ligne équilibrées */
/* text-wrap: pretty; — évite orphelines/veuves */
/* text-wrap: stable; — retour à la ligne stable */
/* Cliquez un bouton pour tester. */
Démo 06 — CSS + polices variables
Lettrines : emphase typographique avec polices variables
La propriété CSS initial-letter crée une lettrine — la première lettre s’étend sur plusieurs lignes. Combinez-la aux axes de police variable pour un contrôle typographique dynamique. Ajustez la graisse et la chasse pour voir la lettrine se transformer en temps réel.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
p::first-letter {
font-family: "Roboto Flex";
initial-letter: 3.8;
font-variation-settings:
"wght" 700,
"wdth" 75;
}
Démo 07 — JavaScript + CSS
Transitions de vue : le DOM se métamorphose
L’API View Transitions capture l’ancien état de la page, applique les changements du DOM, capture le nouvel état, puis anime entre les deux avec les animations CSS que vous définissez. Le titre possède un view-transition-name et se métamorphose donc séparément. Les navigateurs non compatibles permutent instantanément, sans animation.
Lorem
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ce navigateur ne dispose pas de l’API View Transitions. Les permutations sont instantanées.
const swap = () => {
title.textContent = "Lorem";
// …met à jour le corps du panneau…
};
document.startViewTransition(swap);
/* le titre s'anime grâce à : */
h3 {
view-transition-name: demo-vt-title;
}
// transitions exécutées : 0
Démo 08 — CSS
:has() — le sélecteur parent
Le sélecteur :has() lit l’état des enfants pour styler les éléments parents. Cette capacité a manqué à CSS pendant des décennies. Ci-dessous, les deux cartes changent de style uniquement selon l’état des champs ; c’est CSS qui fait le travail. JavaScript ne fait que surligner la règle active dans la fenêtre de code. Cochez la case ou saisissez un e-mail.
.card {
border-color: var(--border);
}
.card:has(input:checked) {
border-color: teal;
translate: 0 -3px;
}
.card:has(input:valid) {
border-color: green;
}
.card:has(input:invalid) {
border-color: red;
}
Démo 09 — CSS
Requêtes de conteneur : les composants possèdent leurs points de rupture
Les requêtes de conteneur permettent aux composants de réagir à leurs propres dimensions plutôt qu’à la fenêtre. La boîte en pointillés est le conteneur ; redimensionnez-la en tirant le coin. La carte à l’intérieur applique des règles de mise en page à 320px et 440px de sa largeur. La taille de la fenêtre n’a aucune importance.
Une carte, trois mises en page
Empilée sous 320px de largeur de boîte, vignette à gauche au-delà, et passé 440px la vignette grandit et passe à droite. La fenêtre n’y est pour rien.
.box { container: demobox / inline-size; }
.card {
grid-template-columns: 1fr; /* empilée */
}
@container demobox (min-width: 320px) {
.card { grid-template-columns: 76px 1fr; }
}
@container demobox (min-width: 440px) {
.card { grid-template-columns: 1fr 104px; }
.thumb { order: 2; } /* vignette → droite */
}
/* largeur du conteneur : — */
Démo 10 — JavaScript
Votre navigateur, audité en direct
Détection de fonctionnalités à l’exécution via CSS.supports() et vérification de l’existence des API. Toutes les sondes ci-dessous ont été exécutées au chargement de la page dans votre navigateur. Vert : pris en charge ; rouge : absent. Cliquez une sonde pour voir le test exact.
Sondage…
Sondage…
Ces techniques sont disponibles pour votre projet dès aujourd’hui.