Rendre la barre de défilement principale toujours visible


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;
}

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.


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).


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.


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


1
Elegant solution
Artur Keyan

12

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

Au lieu de cela, j'utilise:

body { min-height:101%; }

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;
}

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; }

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.


0
body { 
    min-height: 101vh; 
} 

fonctionne le mieux pour moi


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.


La question demande qu'elle soit toujours visible.
Corv1nus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.