Safari & tests

CSS scrollbar-gutter : stable en 2026 pour HTML statique, modales et QA Safari

MacHTML Lab2026.04.16 Env. 26 min de lecture

Les pages marketing livrées en HTML statique subissent encore un défaut d’expérience classique : dès qu’un article long devient défilable, une barre « classique » consomme souvent 12 à 17 px sur le bord inline-end, et chaque héros centré, chaque barre de navigation sticky et chaque boîte modale semble « sauter » latéralement. Côté design on parle de saut visuel ; côté performance on le journalise comme CLS. En 2026, scrollbar-gutter: stable est la réponse déclarative : le navigateur conserve une gouttière même lorsque la page est trop courte pour défiler, de sorte que le basculement d’overflow ne provoque plus de reflow brutal de la grille. Ce guide s’adresse aux sites rédigés à la main ou générés (Eleventy, Astro, Hugo…) sans routeur client, montre comment accorder la propriété avec les dialogues et le chrome sticky, et rappelle pourquoi une validation Safari/WebKit sur matériel réel reste supérieure à une chaîne entièrement headless. Pour la continuité visuelle entre documents, croisez ce texte avec notre article sur les View Transitions sur MPA statiques et Safari : les deux briques répondent à des problèmes différents mais partagent souvent le même train de livraison.

Vous repartirez avec une matrice de décision, un fragment @supports prêt à coller, des ordres de grandeur (largeur de gouttière, budgets CLS) et une check-list Safari dimensionnée pour un Mac mini loué quelques jours.

Les équipes front qui travaillent depuis Linux ou Windows oublient fréquemment que macOS peut afficher des barres overlay qui n’apparaissent qu’après le premier geste molette : une capture Playwright verte ne prouve donc pas l’absence de saut sur le poste du designer sous Safari. D’où l’intérêt d’instrumenter aussi le RUM sur l’axe horizontal, pas seulement sur le LCP.

Les gabarits multilingues ajoutent une contrainte : en RTL, la gouttière se miroite ; vos tokens de padding logiques doivent rester cohérents avec la réserve, sinon vous recréez un décalage subtil sur l’arabe ou l’hébreu alors que le marché français semble stable.

Pourquoi le défilement casse encore les mises en page centrées

Lorsque overflow-y passe de visible à auto après hydratation — ou lorsqu’un aperçu CMS injecte un bloc plus haut — les barres classiques apparaissent et volent de l’espace horizontal. Un article en 1200 px de largeur max avec margin-inline: auto se retrouve soudain décalé d’environ 15 px par rapport au chrome mémorisé au premier rendu. Les en-têtes sticky alignés sur des fonds 100vw paraissent encore plus incohérents : l’arrière-plan couvre tout le viewport alors que le texte respecte la gouttière.

Les bricolages JavaScript qui mesurent window.innerWidth - document.documentElement.clientWidth ont tenu une décennie, mais ils courent après l’hydratation, ignorent les viewports zoomés et échouent lorsque les barres overlay restent cachées jusqu’au défilement. Porter la politique dans le CSS réduit les branches au moment du paint et garde les sorties Eleventy ou Astro déterministes.

La télémétrie issue de gabarits marketing publics début 2026 montre encore environ 4 à 7 % des sessions desktop avec barres non overlay : assez pour faire échouer des budgets CLS stricts si l’on ignore la réservation de gouttière.

Les design tokens devraient inclure --page-gutter-inline calqué sur votre choix scrollbar-gutter pour que les bibliothèques de composants n’imposent pas un padding symétrique qui combat la voie réservée.

Les responsables produit confondent parfois ce problème avec un bug de centrage Flexbox ; tracer une capture à 120 fps pendant l’injection de contenu évite des heures de débat stérile.

Rédiger scrollbar-gutter avec repli

L’amélioration progressive commence à la racine de défilement. La plupart des sites statiques appliquent la règle une fois sur html ou body, pas les deux, pour éviter une double réservation :

html {
  scrollbar-gutter: stable;
}
@supports not (scrollbar-gutter: stable) {
  html { overflow-y: scroll; } /* dernier recours : barre classique toujours visible */
}

La branche @supports not est volontairement brutale : forcer overflow-y: scroll réserve toujours l’espace même quand le moteur ignore scrollbar-gutter, au prix de barres visibles sur les pages courtes. Choisissez ce repli uniquement lorsque le CLS est contractuellement plus important qu’un chrome minimal pixel-perfect.

Associez overflow-x: hidden avec prudence — le rognage horizontal peut encore interagir mal avec des dialogues ancrés si le marketing injecte de larges tableaux.

Les paquets CSS statiques doivent livrer cette déclaration dans le même fichier haché que vos primitives de layout, afin qu’un déploiement CDN partiel n’apparie jamais un HTML récent avec des jetons de layout obsolètes.

Documentez dans le README du thème quelle racine porte la règle ; les forks d’équipe réintroduisent vite des doublons lors des merges.

Matrice : stable, auto et solutions héritées

Mot-clé / approcheQuand ça aideCompromis
stablePages marketing dont le caractère défilable change après chargement asynchroneLégère asymétrie sur les pages ultra courtes sans barre réelle
autoVous ne voulez la gouttière que lorsque l’overflow est certainNe supprime pas le saut au premier paint lorsque le défilement arrive plus tard
Hacks largeur JSNavigateurs d’entreprise héritésFragiles avec zoom, split view et listes virtualisées

En interne, nous classons auto comme option de secours pour les applications outillées où l’on contrôle finement la hauteur de viewport ; pour les landings statiques, stable reste le défaut raisonnable en 2026.

Dialogues, verrouillage du défilement et overflow imbriqué

Les motifs modaux posent souvent overflow: hidden sur body tout en laissant une zone interne défilable pour les mentions légales. Lorsque l’arrière-plan se verrouille, la disparition de la barre peut décaler la boîte elle-même si la politique de gouttière n’est pas cohérente. Appliquez scrollbar-gutter: stable avant l’ouverture du dialogue dans votre CSS pour que la transition verrouillage/déverrouillage ne refonde pas la coque modale centrée.

Si vous utilisez l’élément natif <dialog>, vérifiez que les arrière-plans inertes respectent toujours votre choix de gouttière racine : les versions mineures de Safari ont itéré sur l’interaction dialogue + barres.

Les panneaux à double colonne devraient conserver overscroll-behavior: contain sur les régions internes pour que le rebond élastique ne combatte pas la réserve racine.

Combiné à des barres marketing position: sticky, testez à 110 % de zoom : certains recalculs d’offset après réservation exposent des sauts d’une frame si des transformations s’animent en parallèle.

Les équipes accessibilité apprécient lorsque la réserve est documentée dans les notes de release : les lecteurs d’écran ne sont pas impactés, mais les validateurs humains comparent les démonstrations vidéo avec et sans policy.

QA Safari sur un Mac mini cloud

Playwright WebKit valide le parsing, pas les micro-décalages lorsque les barres overlay n’apparaissent qu’après le premier événement molette. Prévoyez 20 à 35 minutes par livraison sur Safari Apple silicon : canal stable pour la signature contractuelle, Technology Preview pour bissecter les régressions liées aux heuristiques overlay.

Si l’achat matériel traîne, louez un Mac mini cloud pour le sprint. Les hôtes Apple silicon MacHTML s’affichent couramment autour de 16,9 $/jour, incluent SSH pour pousser des bundles statiques et VNC pour comparer côte à côte avec les réglages Safari de production — moins coûteux qu’expédier des portables de prêt.

Reproduisez le color-scheme de production, le thème ::-webkit-scrollbar éventuel et la pile font ; un style de barre personnalisé modifie les hypothèses de largeur.

Enregistrez des captures ralenti à 120 ips lors de l’ouverture des dialogues ; les désaccords d’une frame entre arrière-plan et modale se tranchent plus vite avec une preuve qu’à l’oral.

L’exploitation doit lier les clés de cache CDN au hachage CSS contenant scrollbar-gutter pour éviter les désynchronisations HTML/CSS après rollback partiel.

Les designers freelances peuvent se connecter en lecture seule pour valider un pixel sans toucher aux secrets CI : bon usage du partage VNC contrôlé.

Budgets CLS et télémétrie

Les SLA marketing plafonnent souvent le CLS à 0,05 sur les pages LCP desktop. Réserver la gouttière proactivement coûte souvent moins de décalage cumulé que compenser tardivement avec du padding JavaScript.

Exportez des histogrammes de décalage horizontal en pixels depuis votre pipeline RUM ; des pics au-delà de 8 px lors des changements de route signifient généralement que le caractère défilable a basculé sans politique de gouttière.

Alertez lorsque les ouvertures de modale corrèlent avec une régression CLS > 0,02 dans la même session — souvent une implémentation de verrouillage a retiré la barre sans compensation de largeur.

Chaque trimestre, examinez manuellement une trentaine de sessions longues riches en dialogues ; le bucketing automatique étiquette encore l’apparition overlay comme « décalage d’image ».

Les équipes finance préfèrent des graphiques annotés avec la version Safari ; joignez la capture au ticket pour éviter les requalifications « bug réseau ».

Check-list de déploiement pour pipelines statiques

  1. Mettre en scène derrière un attribut data-* sur body jusqu’à ce que le diff visuel staging soit vert.
  2. Ajouter des assertions Playwright qui comparent la boîte englobante du héros avant/après injection d’un contenu haut de test — alerter au-delà de 6 px.
  3. Documenter quelles locales partent en premier ; les locales RTL peuvent exiger des tokens de padding miroirs en plus de la réservation.
  4. Archiver les traces Lighthouse et WebPageTest avec le même identifiant de session que votre capture Safari pour la piste d’audit.

Après la bascule, surveillez pendant 48 heures le taux d’erreurs côté analytics interne : un spike sur les clics « fermer modale » peut révéler un focus trap mal recalibré quand la gouttière apparaît.

FAQ

scrollbar-gutter remplace-t-il les hacks overflow-y: scroll ?

Pour les cibles evergreen modernes, oui ; conservez le repli @supports not pour les modes de conformité hérités.

stable gaspille-t-il de l’espace sur les petites landings ?

Légèrement — comparez l’impact CLS à celui de barres toujours visibles ; choisissez la politique acceptée par la direction artistique.

Interaction avec les fonds 100vw ?

Oui — préférez des largeurs logiques liées aux colonnes de texte plutôt que des unités viewport brutes pour les arrière-plans synchronisés avec le contenu.

Le matériel Mac mini Apple Silicon reste le moyen le plus rapide de trancher les débats WebKit sur les barres : heuristiques overlay natives, thermiques prévisibles pendant les sessions de capture marathon, et bascules d’accessibilité macOS impossibles à émuler proprement sur une VM Linux. MacHTML loue des Mac mini cloud avec SSH/VNC afin que les équipes sites statiques valident scrollbar-gutter, dialogues et chrome sticky sans nouveau cycle CapEx — provisionnez pour le sprint, capturez la preuve, retirez la machine quand le feu est vert.

QA mise en page Safari sur Mac mini cloud

Louez du matériel Apple Silicon pour valider scrollbar-gutter, verrouillage modale et navigation sticky avec le comportement WebKit réel.

QA gouttière Safari
Dès ~16,9 $/jour