118 votes

Hauteur du corps 100% affichant la barre de défilement verticale

Par curiosité, si l'on considère l'exemple ci-dessous, pourquoi le fait d'avoir la marge sur le div #container provoque-t-il l'apparition d'une barre de défilement verticale dans le navigateur ? Le conteneur est beaucoup plus petit en hauteur que la hauteur du corps, qui est fixée à 100 %.

J'ai fixé le padding et les marges à 0 pour tous les éléments sauf le #container. Notez que j'ai délibérément omis le positionnement absolu sur le div #container. Dans ce cas, comment le navigateur calcule-t-il la hauteur du corps et comment la marge l'affecte-t-elle ?

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
* { padding:0; margin:0;}
html, body { height:100%; }
#container
{
  padding:10px;
  margin:50px;
  border:1px solid black;
  width: 200px;
  height: 100px;
}
</style>
</head>
<body>
  <div id='container'>
  </div>
</body>
</html>

Exemple également sur JSFiddle

2voto

Walex996 Points 79
/*removes default margin & padding*/
html, body{
    padding: 0px !important;
    margin: 0px !important;
}

/*sets body height to max; and allows scrollbar as page content grows*/
body{
    min-height: 100vh;
}

2voto

Pour ceux qui viennent ici pour une réponse plus facile à comprendre et qui inclut même des échantillons de code, cette réponse (copiée de aquí ) est pour vous.

Non JavaScript ou des valeurs de pixel définies (telles que 100px ) sont nécessaires, juste, pure CSS et pourcentages.

Si votre div est juste assis là tout seul, height: 50% signifiera 50% de la hauteur du corps. Normalement, la hauteur du corps est de zéro sans contenu visible, donc 50% de cette hauteur est juste, eh bien, zéro.

Voici la solution (basée sur este ) (décommentez l'élément background lignes pour obtenir une visualisation du rembourrage) :

/* Makes <html> take up the full page without requiring content to stretch it to that height. */

html
{
  height: 100%;

  /* background: green; */
}

body
{
  /*
    100% the height of <html> minus 1 multiple of the total extra height from the padding of <html>.
    This prevents an unnecessary vertical scrollbar from appearing.
  */
  height: calc(100% - 1em);

  /* background: blue; */
}

/* In most cases it's better to use stylesheets instead of inline-CSS. */
div
{
  width: 50%;
  height: 50%;

  background: red;
}

<div></div>

Ce qui précède a été écrit pour qu'il y ait toujours le rembourrage habituel. Vous pouvez définir les dimensions de la zone rouge div a 100% et je vois encore du rembourrage sur chaque côté/extrémité. Si vous ne voulez pas ce rembourrage, utilisez ceci (bien que cela ne soit pas joli, je vous recommande de vous en tenir au premier exemple) :

/* Makes <html> take up the full page without requiring content to stretch it to that height. */

html, body
{
  height: 100%;
}

/* You can uncomment it but you wouldn't be able to see it anyway. */

/*
html
{
  background: green;
}
*/

body
{
  margin: 0;

 /* background: blue; */
}

/* In most cases it's better to use stylesheets instead of inline-CSS */
div
{
  width: 50%;
  height: 50%;

  background: red;
}

<div></div>

1voto

Vikash Pal Points 25

J'ai trouvé une solution : ajouter padding : 1px 0 ; au corps empêche l'apparition de barres de défilement verticales

0voto

TheZacher5645 Points 1

J'ai vu ce problème résolu avant où vous mettez tout le contenu de body dans un div appelé wrap. Le style de Wrap doit être défini comme suit position: relative; min-height: 100%; . Pour positionner #container div à 50px du haut et de la gauche, placez un div à l'intérieur de wrap avec un padding fixé à 50px. Les marges ne fonctionneront pas avec wrap et la division que nous venons de créer, mais elles fonctionneront dans les éléments suivants #container et tout ce qu'il contient.

voici ma solution sur jsfiddle .

0voto

Erdem ÖZTÜRK Points 1

Vous pouvez ajouter des espaces insécables dans la balise body.

<body> &nbsp; <othertags>...</body>

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