Ancrage de défilement après un changement de mise en page

À partir de Chrome 81, vous n'avez plus besoin d'ajouter d'écouteurs d'événements pour forcer l'ancrage.

La fonction CSS Scroll Snap permet aux développeurs Web de créer des expériences de défilement bien contrôlées en déclarant des positions de glissement. L'un des inconvénients de l'implémentation actuelle est que l'ancrage du défilement ne fonctionne pas bien lorsque la mise en page change, par exemple lorsque la fenêtre d'affichage est redimensionnée ou que l'appareil est pivoté. Ce problème est corrigé dans Chrome 81.

Interopérabilité

De nombreux navigateurs sont compatibles avec le CSS Scroll Snap. Pour en savoir plus, consultez Puis-je utiliser le point d'ancrage de défilement CSS ?

Chrome est actuellement le seul navigateur à implémenter le forçage du défilement après des modifications de mise en page. Firefox a ouvert un ticket pour implémenter cette fonctionnalité, et Safari a également ouvert un ticket pour le recadrage après la modification du contenu d'un défilement. Pour le moment, vous pouvez simuler ce comportement en ajoutant le code suivant aux écouteurs d'événements pour forcer l'exécution d'un accrochage : javascript scroller.scrollBy(0,0); Cependant, cela ne garantit pas que la barre de défilement revient au même élément.

Contexte

CSS Scroll Snap

La fonctionnalité de glissement CSS permet aux développeurs Web de créer des expériences de défilement bien contrôlées en déclarant des positions de glissement. Ces positions garantissent que le contenu à faire défiler est correctement aligné avec son conteneur pour résoudre les problèmes de défilement imprécis. En d'autres termes, le forçage du défilement :

  • Empêche les positions de défilement inconfortables.
  • Crée l'effet de pagination du contenu.

Les articles paginés et les carrousels d'images sont deux cas d'utilisation courants des captures d'écran de défilement.

Exemple de point d'ancrage de défilement CSS.
Exemple de point d'ancrage de défilement CSS. À la fin du défilement, le centre horizontal d'une image est aligné sur le centre horizontal du conteneur de défilement.

Limitations

Les positions d'ancrage sont perdues lorsque vous redimensionnez une fenêtre.

Le forçage de défilement permet aux utilisateurs de naviguer facilement dans le contenu, mais son incapacité à s'adapter aux changements de contenu et de mise en page bloque certains de ses avantages potentiels. Comme indiqué dans l'exemple ci-dessus, les utilisateurs doivent réajuster les positions de défilement chaque fois qu'ils redimensionnent une fenêtre pour trouver l'élément précédemment épinglé. Voici quelques scénarios courants pouvant entraîner une modification de la mise en page:

  • Redimensionner une fenêtre
  • Faire pivoter un appareil
  • Ouvrir les outils de développement

Les deux premiers scénarios rendent la fonctionnalité CSS CSS Scroll Snap moins attrayante pour les utilisateurs, et le troisième est un cauchemar pour les développeurs lors du débogage. Les développeurs doivent également tenir compte de ces lacunes lorsqu'ils tentent de créer une expérience dynamique compatible avec des actions telles que l'ajout, la suppression ou le déplacement de contenu.

Pour résoudre ce problème, il est courant d'ajouter des écouteurs qui exécutent un défilement programmatique via JavaScript pour forcer l'ancrage à s'exécuter chaque fois que l'un de ces changements de mise en page se produit. Cette solution de contournement peut s'avérer inefficace lorsque l'utilisateur s'attend à ce que la barre de défilement revienne au même contenu qu'auparavant. Toute autre gestion avec JavaScript semble presque annuler l'objectif de cette fonctionnalité CSS.

Possibilité d'effectuer un nouvel ancrage après une modification de la mise en page dans Chrome 81

Les inconvénients mentionnés n'existent plus dans Chrome 81: les curseurs resteront bloqués même après la modification de la mise en page. Ils réévalueront les positions de défilement après avoir modifié leur mise en page et réancreront à la position d'ancrage la plus proche, si nécessaire. Si la barre de défilement était précédemment associée à un élément qui existe toujours après le changement de mise en page, elle essaiera de s'y rattacher. Faites attention à ce qui se passe lorsque la mise en page change dans l'exemple suivant.

Position d'ancrage perdue
La rotation d'un appareil ne conserve pas les positions d'ancrage dans Chrome 80. Après avoir fait défiler l'écran jusqu'à la diapositive NOPE et modifié l'orientation de l'appareil en passant du mode Portrait au mode Paysage, un écran vide s'affiche, ce qui indique que la position d'ancrage du défilement a été perdue.
Position de l'ancrage préservée
La rotation d'un appareil conserve les positions de recadrage dans Chrome 81. La diapositive indiquant NOPE reste visible, même si l'orientation de l'appareil change plusieurs fois.

Pour en savoir plus, consultez la spécification de l'ancrage après modification de la mise en page.

Exemple : Barres de défilement persistantes

Avec "Ancrage après modification de la mise en page", les développeurs peuvent implémenter des barres de défilement persistantes avec quelques lignes de CSS :

.container {
  scroll-snap-type: y proximity;
}

.container::after {
  scroll-snap-align: end;
  display: block;
}

Vous voulez en savoir plus ? Pour en savoir plus, consultez l'UI de chat de démonstration suivante.

L'ajout d'un message déclenche un nouvel ancrage, ce qui permet de le coller en bas dans Chrome 81.

Prochains ajouts

Tous les effets de re-snappage du défilement sont actuellement instantanés. Une option de suivi consiste à prendre en charge le re-snappage avec des effets de défilement fluide. Pour en savoir plus, consultez la section Problème de spécification.

Commentaires

Vos commentaires sont inestimables pour améliorer le recadrage après un changement de mise en page. Alors, essayez-le et faites-en part aux ingénieurs Chromium.