veilletech.fr
1 sept. Feed du jour
#10 CSS Article

CSS random() sort du seul Safari

De l'aléatoire en CSS, tant que c'est décoratif.

La fonction CSS random(), disponible dans Safari seul depuis fin 2025, devient utilisable ailleurs grâce à un polyfill publié en paquet npm par Lee Meyer. À réserver à l'ornement : la spécification est encore un brouillon d'éditeur en phase d'exploration, avec des ruptures annoncées.

2 min de lectureintermédiairevidéo 1:18
Partager
Sommaire3 sections
  1. Ce qui se passe
  2. Comment s'y prendre
  3. À retenir

Ce qui se passe

Fin 2025, Safari est devenu le premier — et pour l'instant le seul — navigateur à implémenter la fonction CSS random(), dans une mise à jour qui revendiquait de « résoudre des cas d'usage courants avec HTML et CSS seuls » et de réduire le recours à JavaScript. Un demi-tour de calendrier plus tard, Chrome et Firefox y travaillent sans date ni drapeau annoncé.

Lee Meyer a donc écrit un polyfill, publié sous le paquet npm css-random-polyfill, testé sur des forks des démonstrations du blog WebKit (le champ d'étoiles, la grille colorée). Les utilisateurs de Safari eux-mêmes peuvent y trouver un intérêt : les mises à jour du navigateur sont liées à celles du système, et tout le monde ne peut pas passer à la dernière version.

Comment s'y prendre

Deux contraintes structurent l'usage. Il faut charger le script et marquer les éléments concernés d'une classe randomized :

HTML
<script src="https://unpkg.com/css-random-polyfill@latest/dist/css-random-polyfill.js"></script>
<div class="star randomized"></div>

Et il faut stocker chaque valeur aléatoire dans une propriété personnalisée intermédiaire dont le nom commence par --random :

CSS
.star {
  --random-star-size: random(1px, 7px, 1px);
  --random-top: random(0%, 100%);
  --random-left: random(0%, 100%);
  --random-hue: random(0, 360);
  width: var(--random-star-size);
  top: var(--random-top);
  left: var(--random-left);
}

C'est plus cérémonieux que la syntaxe native, qui autorise random() « à la place de n'importe quelle partie de la valeur d'une propriété », comme calc() ou min(). Le bon côté de ce compromis : le CSS écrit ainsi reste valide pour l'implémentation native. Quand le support sera généralisé, il suffira de supprimer la ligne de script — c'est déjà ce qui se passe sous Safari, où le polyfill détecte le support natif et laisse le navigateur travailler.

Le partage de valeur entre propriétés fonctionne, avec les clés (random(--side, 40px, 100px)) comme avec element-shared pour donner le même tirage à tous les éléments d'un ensemble.

Source : CSS-Tricks — Let's Use the Emergent CSS random() Function in all the Browsers