J'ai 2 divs principaux, l'en-tête et une liste déroulante contenue dans un div. Je veux que l'en-tête reste toujours en haut de la page et la liste déroulante ci-dessous. La barre de défilement doit être attachée à la div de défilement et non à la page entière, c'est-à-dire que la barre de défilement n'apparaît pas à droite de l'en-tête, juste la div de défilement.
Voici ce que j'essaie de réaliser:
______________________
|_______header_______|
| |*|
| Container Div |*|
| |*|
| |*|
| |*|
| |*|
| |*|
----------------------
* = scrollbar
La disposition doit être fluide et si la fenêtre est étirée verticalement, seul le div du conteneur et sa barre de défilement doivent s'allonger.
Je ne veux pas positionner l'en-tête position: fixed;
comme alors la barre de défilement sera à sa droite au lieu d'en dessous.
HTML:
<div class="header">This is the header</div>
<div class="content">This is the content</div>
CSS:
.header
{
height:50px;
}
.content
{
position:absolute;
top: 50px;
left:0px;
right:0px;
bottom:0px;
overflow-y:scroll;
}
J'ai trouvé la magie du flex.
Ici est un exemple de la façon de faire un en-tête fixe et un contenu défilant. Code:
<!DOCTYPE html>
<html style="height: 100%">
<head>
<meta charset=utf-8 />
<title>Holy Grail</title>
<!-- Reset browser defaults -->
<link rel="stylesheet" href="reset.css">
</head>
<body style="display: flex; height: 100%; flex-direction: column">
<div>HEADER<br/>------------
</div>
<div style="flex: 1; overflow: auto">
CONTENT - START<br/>
<script>
for (var i=0 ; i<1000 ; ++i) {
document.write(" Very long content!");
}
</script>
<br/>CONTENT - END
</div>
</body>
</html>
* L'avantage de la solution flex est que le contenu est indépendant des autres parties de la mise en page. Par exemple, le contenu n'a pas besoin de connaître la hauteur de l'en-tête.
Pour une implémentation complète Holy Graal (en-tête, pied de page, nav, côté et contenu), en utilisant l'affichage flexible, allez à ici .
Voici une démo . Utilisation position:fixed; top:0; left:0;
pour que l'en-tête reste toujours en haut.
#header {
background:red;
height:50px;
width:100%;
position:fixed;
top:0;
left:0;
}.scroller {
height:300px;
overflow:scroll;
}
Vous devez utiliser js obtenir une meilleure hauteur pour la division du corps
<html><body>
<div id="head" style="height:50px; width=100%; font-size:50px;">This is head</div>
<div id="body" style="height:700px; font-size:100px; white-space:pre-wrap; overflow:scroll;">
This is body
T
h
i
s
i
s
b
o
d
y
</div>
</body></html>