J'ai un site avec la structure suivante:
<div id="header"></div>
<div id="main">
<div id="navigation"></div>
<div id="content"></div>
</div>
<div id="footer"></div>
La navigation est à gauche et la div de contenu est à droite. Les informations pour la div de contenu sont extraites via PHP, donc elles sont différentes à chaque fois.
Comment puis-je redimensionner la navigation verticalement afin que sa hauteur soit la même que la hauteur de la div de contenu, quelle que soit la page chargée?
display: flex; align-items: stretch;
le div # main. Et ne pas utiliserheight: 100%
pour le contenu div #Réponses:
REMARQUE : cette réponse s'applique aux navigateurs hérités sans prise en charge de la norme Flexbox. Pour une approche moderne, voir: https://stackoverflow.com/a/23300532/1155721
Je vous suggère de jeter un œil aux colonnes de hauteur égale avec CSS Cross-Browser et No Hacks .
Fondamentalement, faire cela avec CSS d'une manière compatible avec un navigateur n'est pas trivial (mais trivial avec des tables), alors trouvez-vous une solution pré-packagée appropriée.
En outre, la réponse varie selon que vous souhaitez une hauteur de 100% ou une hauteur égale. Habituellement, c'est la même hauteur. Si c'est 100% de hauteur, la réponse est légèrement différente.
la source
border:1px solid blue
par exemple surcontainer2
: la bordure bleue se trouve sur les deux premières colonnes, pas seulement sur la deuxième colonne comme vous vous y attendiez.display:table
Pour le parent:
Vous devez ajouter quelques préfixes, http://css-tricks.com/using-flexbox/ .
Edit: Comme l'a noté @Adam Garner, align-items: stretch; n'est pas nécessaire. Son utilisation est également destinée aux parents, pas aux enfants. Si vous souhaitez définir l'étirement des enfants, vous utilisez align-self.
la source
align-items: center
alors l'article dont vous avez besoin pour étirer vos besoinsalign-self: normal
C'est un problème frustrant qui est constamment traité par les concepteurs. L'astuce est que vous devez définir la hauteur à 100% sur BODY et HTML dans votre CSS.
Ce code apparemment inutile est de définir pour le navigateur ce que signifie 100%. Frustrant, oui, mais c'est le moyen le plus simple.
la source
html { height: 100%; } body { height: 98%; }
.Je trouve que la définition des deux colonnes au
display: table-cell;
lieu defloat: left;
fonctionne bien.la source
Si cela ne vous dérange pas que la division de navigation soit coupée en cas de division de contenu courte de manière inattendue, il existe au moins un moyen simple:
Sinon, il y a la technique des fausses colonnes .
la source
la source
en utilisant jQuery:
la source
Math.max()
serait votre ami ici.css
fonction de JQuery , vous ne pouvez pas faire la différence entre les supports d'écran et d'impression, comme vous le faites habituellement lorsque vous utilisez des solutions CSS pures. Ainsi, vous pouvez rencontrer des problèmes d'impression.Essayez de rendre la marge inférieure à 100%.
la source
Regardez cet exemple .
la source
height: 100%
mais il s'est avéré que ce n'était pas nécessaire.height : <percent>
ne fonctionnera que si vous avez tous les nœuds parents avec un pourcentage de hauteur spécifié avec une hauteur fixe en pixels, ems, etc. au niveau supérieur. De cette façon, la hauteur descendra en cascade jusqu'à votre élément.Vous pouvez spécifier 100% aux éléments html et body comme @Travis l'a indiqué précédemment pour que la hauteur de la page tombe en cascade vers vos nœuds.
la source
Après de longues recherches et essais, rien n'a résolu mon problème sauf
sur les enfants div
et pour les parents appliquer ceci
aussi, j'utilise bootstrap et cela n'a pas corrompu le responsive pour moi.
la source
flex-direction: column;
pour que cela fonctionne pour moi.Basé sur la méthode décrite dans cet article j'ai créé une solution dynamique .Moins:
Html:
Moins:
la source
Ajouter
display: grid
au parentla source
Je sais que ça fait longtemps que la question n'a pas été posée, mais j'ai trouvé une solution facile et j'ai pensé que quelqu'un pourrait l'utiliser (désolé pour le mauvais anglais). Ça y est:
CSS
HTML
Exemple simple. Notez que vous pouvez vous transformer en réactivité.
la source
Ma solution:
la source
Il y a une certaine contradiction dans le titre et le contenu de la question. Le titre parle d'un div parent, mais la question donne l'impression que vous voulez que deux div frères (navigation et contenu) soient de la même hauteur.
Souhaitez-vous (a) que la navigation et le contenu soient à 100% de la hauteur du principal, ou (b) que la navigation et le contenu soient à la même hauteur?
Je suppose (b) ... si tel est le cas, je ne pense pas que vous serez en mesure de le faire compte tenu de votre structure de page actuelle (du moins, pas avec du CSS pur et sans script). Vous auriez probablement besoin de faire quelque chose comme:
et définissez le div de contenu pour avoir une marge gauche quelle que soit la largeur du volet de navigation. De cette façon, le contenu du contenu est à droite de la navigation et vous pouvez définir la div de navigation à 100% de la hauteur du contenu.
EDIT: Je le fais complètement dans ma tête, mais vous devrez probablement également définir la marge gauche de la div de navigation sur une valeur négative ou définir sa gauche absolue sur 0 pour la repousser à l'extrême gauche. Le problème est qu'il existe de nombreuses façons de résoudre ce problème, mais tous ne seront pas compatibles avec tous les navigateurs.
la source
[Se référant au moins de code de Dmity dans une autre réponse] Je suppose que c'est une sorte de "pseudo-code"?
D'après ce que je comprends, essayez d'utiliser la technique des fausses colonnes qui devrait faire l'affaire.
http://www.alistapart.com/articles/fauxcolumns/
J'espère que cela t'aides :)
la source
la source
donner
position: absolute;
à l'enfant a travaillé dans mon casla source
Vous utilisez CSS Flexbox
la source
Cette réponse n'est plus idéale puisque CSS flexbox et grid ont été implémentés en CSS. Mais c'est toujours une solution de travail
Sur un écran plus petit, vous voudrez probablement conserver la hauteur automatique car les colonnes col1, col2 et col3 sont empilées les unes sur les autres.
Cependant, après un point d'arrêt de requête multimédia, vous souhaitez que les colonnes apparaissent côte à côte avec une hauteur égale pour toutes les colonnes.
1125 px n'est qu'un exemple de point d'arrêt de largeur de fenêtre après lequel vous souhaitez définir toutes les colonnes à la même hauteur.
Vous pouvez, bien sûr, définir plus de points d'arrêt si vous en avez besoin.
la source
J'ai eu le même problème, cela a fonctionné sur la base de la réponse de Hakam Fostok, j'ai créé un petit exemple, dans certains cas, cela pourrait fonctionner sans avoir à ajouter
display: flex;
etflex-direction: column;
sur le conteneur parentJSFiddle
la source
Comme indiqué précédemment, la flexbox est la plus simple. par exemple.
cela alignera tous les éléments enfants au centre de l'élément parent.
la source
De:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
indique bootstrap mais vous n'avez pas besoin de bootstrap pour l'utiliser. Répondre à cette vieille question, car cela a fonctionné pour moi, et semble assez facile à mettre en œuvre.
C'était la même réponse que j'ai fournie à cette question
la source
Voici une démo à l'ancienne basée sur le
position: absolute
conteneur de contenu et leposition: relative
conteneur parent.Quant à la manière moderne de le faire - les boîtes flexibles sont les meilleures.
la source
La façon la plus simple de le faire est de le simuler. A List Apart a largement couvert cela au fil des ans, comme dans cet article de Dan Cederholm de 2004 .
Voici comment je le fais habituellement:
Vous pouvez facilement ajouter un en-tête à cette conception en enveloppant #container dans un autre div, en incorporant le div d'en-tête en tant que frère du conteneur # et en déplaçant les styles de marge et de largeur dans le conteneur parent. De plus, le CSS doit être déplacé dans un fichier séparé et non maintenu en ligne, etc. etc. Enfin, la classe clearfix peut être trouvée sur positioniseverything .
la source