227 votes

Le débordement de défilement du CSS ne fonctionne pas dans la division

Je cherche une solution en CSS/Javascript pour résoudre le problème de défilement de ma page HTML.

J'ai trois divs qui contiennent une div, un en-tête et une div d'enveloppe,

J'ai besoin d'une barre de défilement verticale dans la div d'enveloppe, la hauteur devrait être automatique ou à 100% en fonction du contenu.

L'en-tête devrait être fixe, et je ne veux pas de barre de défilement globale donc j'ai donné overflow:hidden dans la balise body,

J'ai besoin d'une barre de défilement verticale dans ma div d'enveloppe. Comment puis-je résoudre cela?

body {
  margin: 0;
  padding: 0;
  overflow: hidden;
  height: 100%
}

#container {
  width: 1000px;
  margin: 0 auto;
}

.header {
  width: 1000px;
  height: 30px;
  background-color: #dadada;
}

.wrapper {
  width: 1000px;
  overflow: scroll;
  position: relative;
}

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus porta tortor sed metus. Nam pretium. Sed tempor. Integer ullamcorper, odio quis porttitor sagittis, nisl erat tincidunt massa, eu eleifend eros nibh sollicitudin est. Nulla dignissim.
      Mauris sollicitudin, arcu id sagittis placerat, tellus mauris egestas felis, eget interdum mi nibh vel lorem. Aliquam egestas hendrerit massa. Suspendisse sed nunc et lacus feugiat hendrerit. Nam cursus euismod augue. Aenean vehicula nisl eu quam
      luctus adipiscing. Nunc consequat justo pretium orci. Mauris hendrerit fermentum massa. Aenean consectetuer est ut arcu. Aliquam nisl massa, blandit at, accumsan sed, porta vel, metus. Duis fringilla quam ut eros.

Veuillez consulter ce JS Fiddle

269voto

Ionică Bizău Points 14484

Vous manquez la propriété CSS height.

En l'ajoutant, vous remarquerez que la barre de défilement apparaîtra.

.wrapper{ 
    // width: 1000px;
    width:600px; 
    overflow-y:scroll; 
    position:relative;
    height: 300px;
}

JSFIDDLE

De documentation:

overflow-y

La propriété CSS overflow-y spécifie s'il faut recadrer le contenu, afficher une barre de défilement ou afficher le contenu en cas de débordement d'un élément de niveau bloc, lorsqu'il déborde sur les bords supérieur et inférieur.

23 votes

Comment faire en sorte que la hauteur s'arrête au viewport? Je ne veux pas coder en pixels, car cela ne fonctionne pas pour les différentes tailles d'écran

0 votes

@djechlin Posez une question pour cela. Vous pouvez probablement utiliser des valeurs en pourcentage ou display: fixed... Je ne suis pas sûr de ce que vous essayez de faire.

23 votes

Utilisez la propriété de hauteur de l'affichage : hauteur : 100vh

70voto

johannes Points 127

La solution consiste à ajouter height:100%; à tous les éléments parents de votre .wrapper-div également. Donc:

html{
    height: 100%;
}

body{ 
    margin:0;
    padding:0;
    overflow:hidden;
    height:100%;
}

#container{
    width:1000px;
    margin:0 auto;
    height:100%;
}

2 votes

Bonjour, je sais que cela fait 7 ans mais je suis ici pour demander comment cela fonctionne ? Pourquoi est-ce comme ça ? Ou est-ce simplement un tour de CSS typique qui 'fonctionne' juste.

11 votes

Si vous définissez la hauteur d'un élément en pourcentages, ce pourcentage se réfère à la hauteur de son parent. Si le parent n'a pas de hauteur définie, il se référera à l'ancêtre le plus proche qui a une hauteur définie. Si aucun ancêtre avec une hauteur définie n'est trouvé, le pourcentage est un pourcentage de rien. Et 100% de rien, c'est rien. J'ai trouvé un article intéressant sur le sujet ici: freecodecamp.org/news/html-page-width-height

1 votes

Comment quelqu'un peut-il ajouter une barre de défilement à un div qui est profondément à l'intérieur d'une mise en page de dialogue avec une taille contrôlée par "flex" ? Il n'y a pas de hauteur fixe et il n'est pas pratique d'ajouter height à chaque div environnant, mais la barre de défilement est nécessaire car l'espace n'est probablement pas assez grand pour son contenu textuel.

32voto

Fags Points 4222

Si vous ajoutez de la hauteur dans la classe .wrapper, alors votre scroll fonctionne, sans height le scroll ne fonctionne pas.

Essayez ceci http://jsfiddle.net/ZcrFr/3/

CSS:

.wrapper {
  position: relative;
  overflow: scroll;
  width: 1000px;
  height: 800px;
}

4 votes

Merci, mais ma exigence actuelle est que je ne dois pas donner de hauteur peut-être je peux donner 100% ou auto, le contenu devrait s'ajuster en fonction de la fenêtre du navigateur, pouvez-vous proposer une autre solution en CSS/JAVASCRIPT ?

3 votes

Pourquoi cela ne fonctionne-t-il pas lorsque je donne une hauteur en pourcentage comme height:100% ?

9voto

LinkinTED Points 14560

Vous n'avez pas donné à la div une hauteur. Elle s'étirera automatiquement lorsque plus de contenu sera ajouté. Donnez-lui une hauteur fixe et les barres de défilement apparaîtront.

3 votes

Merci, mais mon exigence actuelle est que je ne dois pas donner de hauteur, peut-être donner 100% ou auto, le contenu devrait s'adapter à la fenêtre du navigateur, pouvez-vous proposer une autre solution en CSS/JAVASCRIPT?

1 votes

Donnez-lui une hauteur de 100%. Ensuite, vous répondez aux exigences de débordement et de vous-même.

9voto

itzhar Points 36

Dans mon cas, seule height: 100vh corrige le problème avec le comportement attendu

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X