Also available in: English
Récemment dans un petit projet assez proche du prototype, j’ai eu à proposer quelques petites choses comme un menu sticky, un scroll-spy, mixé avec du smooth-scroll. Plein d’effets qui demandent quand même quelques lignes de JS. Et bien pas cette fois.
La norme
Le CSS WG a introduit scroll-behavior dans ses brouillons pour permettre de gérer le comportement du défilement des zones concernées. Cette propriété nouvelle vient avec très peu de valeurs puisqu’elle propose auto
ou smooth
.
The scroll-behavior property specifies the scrolling behavior for a scrolling box, when scrolling happens due to navigation or CSSOM scrolling APIs. Any other scrolls, e.g. those that are performed by the user, are not affected by this property. When this property is specified on the root element, it applies to the viewport instead.
Pour faire simple, cette propriété s’applique à toutes les actions qui permettent la navigation au sein d’une boîte avec défilement. Sauf si l’utilisateur scroll lui-même dans la page manuellement.
Le bout de code magique en CSS
Venons-en à l’essentiel.
Pour mon petit projet, je n’avais pas besoin de me soucier du support, qui est plutôt bon sur Chrome et Firefox déjà en fait, du coup mon code CSS pour intégrer du smooth-scroll dans ma page au lieu d’avoir des ancres qui me font sauter d’un point à un autre c’était globalement ça :
Et voilàààà ! Résolu !
Pour rappel à une époque lointaine, je publiais l’article Smooth-Scroll en jQuery.
Je vous laisse comparer 🙂
Pour ceux qui veulent une démo avec le code éditable, voici un petit CodePen.
Support
Je vous laisse également avec le support de cette feature CSS qui est plutôt bonne déjà pour de l’amélioration progressive.
Bonjour,
Ça a l’air super… Sauf que sur mon Chrome 64 sous Win 10 avec chrome://flags/#smooth-scrolling sur default, ça ne smooth-scroll pas (ça va direct à l’élément).
Une idée ?
Bonjour,
Étonnant, ça devrait fonctionner : https://developers.google.com/web/updates/2016/02/smooth-scrolling-in-chrome-49#scroll-behavior
:/
La démo ne fonctionne pas non plus sous Chrome 64 pour Android… En tout cas, pas sur mon smartphone. Dommage.
Rien non plus chez moi avec Chrome sous Linux…
ubuntu 18.04 + firefox 61.0.1
Très efficace !
Mais pour fonctionner, il a fallu donner la règle à body ET html (l’un ou l’autre est insuffisant) :
html, body {
scroll-behavior: smooth;
}
Est-il possible de consulter (en vue d’inspiration) tes essais de spyscrolling ?
Hello,
Yes le code du spyscrolling est dispo sur cet autre article bien plus long, plutôt sur la fin 🙂
https://www.creativejuiz.fr/blog/tutoriels/creer-menu-sticky-avec-javascript-css
Merci à toi
Bonjour (très en retard).
En réalité, le problème vient de l’emplacement de scroll-behavior dans le code.
Il est placé sur la balise body, donc certains navigateurs l’ignorent :
« Les agents utilisateur peuvent choisir d’ignorer cette propriété. Lorsque cette propriété est indiquée sur l’élément body, elle ne se propage pas à la zone d’affichage (viewport). » (source : https://developer.mozilla.org/fr/docs/Web/CSS/scroll-behavior).
L’idéal, dans ce cas, serait de le placer sur la balise HTML.
Cordialement.
Bien vu !