Ce face scroll-behavior, scroll-margin și scroll-padding
scroll-behavior: smooth, pus pe containerul care se derulează (de obicei html), transformă săriturile bruște la linkuri de tip #contact într-o derulare animată. Se aplică și la derulările făcute din JavaScript cu scrollIntoView() sau scrollTo(), dar nu și la derularea făcută de utilizator cu rotița.
Când pagina are un antet fix (position: sticky sau fixed), titlul secțiunii ajunge ascuns sub antet. scroll-margin-top pe ținte sau scroll-padding-top pe containerul care se derulează păstrează un spațiu liber la oprire.
Unele persoane au setată în sistem preferința de mișcare redusă. Pune smooth doar în @media (prefers-reduced-motion: no-preference) ca să respecți această preferință.
Valori uzuale
| Valoare | Descriere |
|---|---|
scroll-behavior: auto |
Salt instantaneu (valoarea implicită). |
scroll-behavior: smooth |
Derulare animată spre țintă. |
scroll-margin-top |
Spațiu păstrat deasupra elementului-țintă când se oprește derularea. |
scroll-padding-top |
Spațiu păstrat în partea de sus a containerului, pentru toate țintele. |
Exemple
Exemplul 1: Meniu de restaurant cu linkuri spre secțiuni și antet fix
Antetul are 72 px; ținta se oprește la 16 px sub el.
@media (prefers-reduced-motion: no-preference) {
html {
scroll-behavior: smooth;
}
}
html {
scroll-padding-top: 88px; /* 72px antet + 16px spațiu */
}
.antet {
position: sticky;
top: 0;
height: 72px;
}
Efect vizual în browser
La clic pe „Deserturi” pagina alunecă lin până la secțiune, iar titlul „Deserturi” apare complet vizibil sub antet. Cu mișcarea redusă activată în sistem, pagina sare direct, dar tot cu titlul vizibil.
Exemplul 2: Spațiu suplimentar doar pentru anumite ținte
scroll-margin se pune pe elementul-țintă și se adună cu scroll-padding-ul containerului.
.intrebare-faq {
scroll-margin-top: 24px;
}
Efect vizual în browser
Când deschizi linkul /intrebari#livrare, întrebarea „Cât durează livrarea în Cluj?” se oprește cu 24 px mai jos decât alte ținte, cu spațiu liber deasupra.
Greșeli frecvente
- Punerea scroll-behavior pe body în loc de html; pagina principală se derulează pe elementul html, așa că pe body regula nu are efect.
- Calcularea înălțimii antetului cu margin sau padding pe secțiuni; adaugă spațiu vizibil în pagină. scroll-margin și scroll-padding afectează doar oprirea derulării.
- Ignorarea lui prefers-reduced-motion; derularea lungă și animată poate provoca disconfort unor utilizatori.
Comenzi înrudite
position (relative, absolute, fixed, sticky): Definește metoda de poziționare a elementului pe ecran, permițând mutarea lui cu top, right, bottom, left.@media (Media Queries): Aplică blocuri de stiluri CSS condiționat, în funcție de lățimea ecranului sau setările de sistem ale utilizatorului.overflow (hidden, scroll, auto): Stabilește ce se întâmplă când conținutul unui element este prea mare pentru a încăpea în dimensiunile sale.animation-timeline (animații legate de scroll: scroll() și view()): Leagă progresul unei animații de derularea paginii sau de vizibilitatea unui element, fără JavaScript.