Rendre la barre de défilement principale toujours visible

179

Quel CSS est nécessaire pour que la barre de défilement verticale du navigateur reste visible lorsqu'un utilisateur visite une page Web (lorsque la page n'a pas assez de contenu pour déclencher l'activation de la barre de défilement)?

Deniz Dogan
la source
1
Pour éviter de sauter les barres de défilement dans Windows, il existe une meilleure solution .
Josh Habdas

Réponses:

333
html {
    overflow: -moz-scrollbars-vertical; 
    overflow-y: scroll;
}

Cela rend la barre de défilement toujours visible et active uniquement lorsque cela est nécessaire.

Mise à jour: Si ce qui précède ne fonctionne pas, la simple utilisation peut.

html {
    overflow-y:scroll;
}
Corv1nus
la source
3
Avez-vous une idée de la version de FF supportée overflow-y? Comme il semble que -moz-scrollbars-verticalc'est déconseillé en faveur de la overflow-ypropriété.
Ionuț G. Stan le
Je pense que Internet Explorer 6.x +, Firefox 1.5+ si je me souviens bien. J'ai utilisé le code ci-dessus et cela fonctionne dans FF1.5-3.5.1 et IE6-8 pour moi.
Corv1nus
2
Existe-t-il des alternatives au "saut de page" lorsque certaines pages de votre site sont trop petites pour avoir une barre de défilement et d'autres le sont? Ou est-ce la «meilleure pratique»? Je dois admettre que je ne vois pas beaucoup de pages sur le Web qui ne prennent pas une page entière.
Jess du
2
Je ne suis pas sûr que ce soit une bonne pratique mais, avoir des barres de défilement sur toutes les pages, et actives uniquement lorsque cela est nécessaire, pour éviter le saut de page est généralement une solution acceptable. J'ai tendance à préférer la barre de défilement constante au saut.
Corv1nus
1
Pour ceux (comme moi) qui trouvent le style htmlun peu hack-y , notez que vous pouvez utiliser le pseudo-sélecteur structurel :rootau lieu de html. Voir: developer.mozilla.org/en-US/docs/Web/CSS/:root
Rounin
31

Assurez-vous que le dépassement est réglé sur «défilement» et non sur «automatique». Cela dit , dans OS X Lion, le débordement réglé sur "scroll" se comporte plus comme auto dans la mesure où les barres de défilement ne s'afficheront toujours que lorsqu'elles sont utilisées. Donc, si l'une des solutions ci-dessus ne semble pas fonctionner, c'est peut-être pourquoi.

Voici ce dont vous aurez besoin pour le réparer:

::-webkit-scrollbar {
  -webkit-appearance: none;
  width: 7px;
}
::-webkit-scrollbar-thumb {
  border-radius: 4px;
  background-color: rgba(0, 0, 0, .5);
  -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);
}

Vous pouvez le styliser en conséquence si vous n'aimez pas la valeur par défaut.

molls223
la source
1
Cette chose fonctionne! Mais comment pouvez-vous le faire uniquement sur un div spécifique?
Riche du
@Rich comme n'importe quel autre élément css. .yourdiv :: - webkit-scrollbar {...}
Kris
@Kris Salut, merci pour la réponse, en voici l'exemple. stackoverflow.com/a/54667091/2637261
Rich
Pourquoi est-ce utilisé-webkit-appearance: none;
Suraj Jain
C'est bien! Devrait être la réponse acceptée.
Cyberpunker
25

Les choses ont changé ces dernières années. Les réponses ci-dessus ne sont plus valables dans tous les cas. Apple pousse partout des barres de défilement qui disparaissent . Safari, Chrome et même Firefox sur MacOs (et iOs) affichent uniquement les barres de défilement lors du défilement - je ne sais pas à propos de Windows / IE actuel. Cependant, il existe des moyens non standard de styliser les barres de défilement sur Webkit (IE l'a abandonné il y a longtemps).

Frank Lämmer
la source
mais il se dégrade gracieusement sur ces nouveaux?
Ben
3
Merci pour cet excellent point sur les barres de défilement qui disparaissent. Pour moi, la raison de garder la barre de défilement visible était d'éviter cette secousse légère mais très perceptible et très ennuyeuse lorsque le contenu change de défilement à non. Avec les barres de défilement qui disparaissent, ils ne secouent pas le corps lorsqu'ils s'affichent et se cachent, donc c'est ok pour moi. Mais merci pour cet excellent point.
Noitidart
4
D'un point de vue UX, la plupart du temps, nous voulons que la barre de défilement soit visible. Selon la tendance actuelle, si une barre de défilement n'est pas visible, il est une étape supplémentaire d'avoir à «essayer» une liste visible pour plus dans la liste. Un indice visuel supplémentaire indiquant que la liste déroulante ou la liste contient plus d'éléments n'est pas nécessaire si les utilisateurs voient une barre de défilement.
planche à
24
html {
    overflow-y: scroll;
}

Est-ce que c'est ce que tu veux?

Malheureusement, Opera 9.64 semble ignorer cette déclaration CSS lorsqu'elle est appliquée à HTMLou BODY, bien qu'elle fonctionne pour d'autres éléments de niveau bloc comme DIV.

Ionuț G. Stan
la source
13
html {height: 101%;}

J'utilise cette solution de navigateurs croisés (note: j'utilise toujours la déclaration DOCTYPE en 1ère ligne, je ne sais pas si cela fonctionne en mode quirks, je ne l'ai jamais testé ).

Cela affichera toujours une barre de défilement verticale ACTIVE dans chaque page, la barre de défilement verticale ne pourra faire défiler que quelques pixels.

Lorsque le contenu de la page est plus court que la zone visible du navigateur (port d'affichage), vous verrez toujours la barre de défilement verticale active, et elle ne pourra faire défiler que quelques pixels.

Dans le cas où vous êtes obsédé par la validation CSS (je suis obsédé uniquement par la validation HTML) en utilisant cette solution, votre code CSS validerait également pour le W3C car vous n'utilisez pas d'attributs CSS non standard tels que -moz-scrollbars-vertical

Marco Demaio
la source
1
Elegant solution
Artur Keyan
12

body { height:101%; } "recadrera" de plus grandes pages.

Au lieu de cela, j'utilise:

body { min-height:101%; }
Scott
la source
1
Cette question a été posée il y a 5 ans et elle a déjà une réponse acceptée. Votre réponse ne fournit pas une meilleure réponse que la réponse déjà acceptée.
Dipen Shah
18
Cette réponse fournit en fait des informations supplémentaires non fournies dans les autres réponses.
GaTechThomas
2

J'ai pu faire fonctionner cela en l'ajoutant à la balise body. C'était mieux pour moi car je n'ai rien sur l'élément html.

body {
    overflow-y: scroll;
}
Jazzepi
la source
2

Une autre approche consiste à définir la largeur de l'élément html sur 100vw. Sur de nombreux navigateurs, sinon sur la plupart, cela annule l'effet des barres de défilement sur la largeur.

html { width: 100vw; }
Lunelson
la source
0

Mettre la hauteur à 101% est ma solution au problème. Vos pages ne «feuilleteront plus» lorsque vous basculez entre celles qui dépassent la hauteur de la fenêtre et celles qui ne le font pas.

Corps de Sanjaal
la source
0
body { 
    min-height: 101vh; 
} 

fonctionne le mieux pour moi

Lolo
la source
0

Je fais ça:

html {
    margin-left: calc(100vw - 100%);
    margin-right: 0;
}

Ensuite, je n'ai pas à regarder la vilaine barre de défilement grisée lorsqu'elle n'est pas nécessaire.

Stian
la source
La question demande qu'elle soit toujours visible.
Corv1nus