J'ai un élément d'en-tête et un élément de contenu:
#header
#content
Je veux que l'en-tête soit de hauteur fixe et que le contenu remplisse toute la hauteur restante disponible à l'écran, avec overflow-y: scroll;
.
Est-ce possible sans Javascript?
oubliez toutes les réponses, cette ligne de CSS a fonctionné pour moi en 2 secondes:
1vh
= 1% de la hauteur de l'écran du navigateurla source
Pour une mise à l'échelle réactive de la mise en page, vous pouvez utiliser:
[mise à jour novembre 2018] Comme mentionné dans les commentaires, l'utilisation de la hauteur min pourrait éviter d'avoir des problèmes sur les conceptions reponsives
[mise à jour avril 2018] Comme mentionné dans les commentaires, en 2011, lorsque la question a été posée, tous les navigateurs ne prenaient pas en charge les unités d'affichage. Les autres réponses étaient les solutions à l'époque -
vmax
n'est toujours pas prise en charge dans IE, donc ce n'est peut-être pas encore la meilleure solution pour tous.la source
min-height: 100vh
serait beaucoup mieux. Il serait également mis à l'échelle pour les conceptions réactives.En fait, la meilleure approche est la suivante:
Cela résout tout pour moi et cela m'aide à contrôler mon pied de page et il peut avoir le pied de page fixe, peu importe si la page est défilée vers le bas.
Solution technique - EDITÉE
Historiquement, la «hauteur» est une chose délicate à mouler, comparée à la «largeur», la plus simple. Depuis que le CSS se concentre sur le
<body>
style pour fonctionner. Le code ci-dessus - nous avons donné<html>
et<body>
une hauteur. C'est là que la magie entre en scène - puisque nous avons «min-height» sur la table de jeu, nous disons au navigateur qu'il<body>
est supérieur<html>
parce qu'il<body>
contient la min-height. Ceci à son tour, permet<body>
de passer outre<html>
car il<html>
avait déjà une hauteur plus tôt. En d'autres termes, nous incitons le navigateur à "sauter"<html>
hors de la table, afin que nous puissions styliser indépendamment.la source
min-height
etheight
?<body>
style pour fonctionner. Ce code: nous avons donné<html>
et<body>
une hauteur. C'est là que la magie entre en scène - puisque nous avons «min-height» sur la table de jeu, nous disons au serveur qui<body>
est supérieur<html>
parce qu'il<body>
détient la min-height. Ceci à son tour, permet<body>
de passer outre<html>
car il<html>
avait déjà une hauteur plus tôt. En d'autres termes, nous trompons le serveur pour qu'il "saute"<html>
de la table, afin que nous puissions styliser indépendamment.Vous pouvez utiliser vh sur la propriété min-height.
Vous pouvez procéder comme suit, selon la façon dont vous utilisez les marges ...
la source
La solution acceptée ne fonctionnera pas réellement. Vous remarquerez que le contenu
div
sera égale à la hauteur de son parent,body
. Donc, régler labody
hauteur sur la100%
mettra égale à la hauteur de la fenêtre du navigateur. Disons que la fenêtre du navigateur était768px
en hauteur, en définissant ladiv
hauteur du contenu sur100%
, ladiv
hauteur du navigateur sera à son tour768px
. Ainsi, vous vous retrouverez avec l'en-tête div étant150px
et le contenu div étant768px
. À la fin, vous aurez du contenu150px
en bas de la page. Pour une autre solution, consultez ce lien.la source
Avec HTML5, vous pouvez faire ceci:
CSS:
HTML:
la source
Pour moi, le suivant a bien fonctionné:
J'ai enveloppé l'en-tête et le contenu sur un div
J'ai utilisé cette référence pour remplir la hauteur avec flexbox. Le CSS va comme ceci:
Pour plus d'informations sur la technique flexbox, consultez la référence
la source
Vous pouvez également définir le parent sur
display: inline
. Voir http://codepen.io/tommymarshall/pen/cECyHAssurez-vous également que la hauteur du html et du corps est définie sur 100%.
la source
La réponse acceptée ne fonctionne pas. Et la réponse la plus élevée ne répond pas à la question réelle. Avec un en-tête de hauteur de pixel fixe, et un remplissage dans l'affichage restant du navigateur, et faites défiler pour owerflow. Voici une solution qui fonctionne réellement, utilisant le positionnement absolu. Je suppose également que la hauteur de l'en-tête est connue, par le son de "tête fixe" dans la question. J'utilise 150px comme exemple ici:
HTML:
CSS: (ajout de la couleur d'arrière-plan pour l'effet visuel uniquement)
Pour un aperçu plus détaillé de son fonctionnement, avec le contenu réel à l'intérieur de
#Content
, jetez un œil à ce jsfiddle , en utilisant des lignes et des colonnes bootstrap.la source
bottom
propriété s'est assurée que le#Content
reste bloqué à la fin de la page. J'apprécie que vous preniez le temps de l'expliquer.Dans ce cas, je veux que mon contenu principal div soit une hauteur liquide afin que la page entière occupe 100% de la hauteur du navigateur.
height: 100vh;
la source
S'il vous plaît laissez-moi ajouter mes 5 cents ici et proposer une solution classique:
Cela fonctionnera dans tous les navigateurs, pas de script, pas de flex. Ouvrez l'extrait de code en mode pleine page et redimensionnez le navigateur: les proportions souhaitées sont conservées même en mode plein écran.
Remarque:
idHeader.height
etidContent.top
sont ajustés pour inclure la bordure et doivent avoir la même valeur si la bordure n'est pas utilisée. Sinon, les éléments sortiront de la fenêtre, car la largeur calculée n'inclut pas la bordure, la marge et / ou le remplissage.left:0; right:0;
peut être remplacé parwidth:100%
pour la même raison, si aucune bordure n'est utilisée.padding-top
et / ou despadding-bottom
attributs à l'#idOuter
élément.Pour compléter ma réponse, voici la disposition du pied de page:
Et voici la disposition avec à la fois l'en-tête et le pied de page:
la source
À moins que vous n'ayez besoin de prendre en charge IE 9 et ci-dessous, j'utiliserais flexbox
Vous devez également faire en sorte que le corps remplisse toute la page
la source
CSS PLaY | en-tête / pied de page fixe du navigateur croisé / disposition de colonne unique centrée
Cadres CSS, version 2: Exemple 2, largeur spécifiée | 456 rue Berea
Une chose importante est que même si cela semble facile, il va y avoir un peu de code laid dans votre fichier CSS pour obtenir un effet comme celui-ci. Malheureusement, c'est vraiment la seule option.
la source
la source
La meilleure solution que j'ai trouvée jusqu'à présent consiste à définir un élément de pied de page en bas de la page, puis à évaluer la différence entre le décalage du pied de page et l'élément à développer. par exemple
Le fichier html
Le fichier css
Le fichier js (en utilisant jquery)
Vous pouvez également mettre à jour la hauteur de l'élément de contenu à chaque redimensionnement de la fenêtre, donc ...
la source
Très simple:
la source
Avez-vous essayé quelque chose comme ça?
CSS:
HTML:
la source