Disons que j'ai le code CSS et HTML suivant:
#header {
height: 150px;
}
<div id="header">
<h1>Header title</h1>
Header content (one or multiple lines)
</div>
La section d'en-tête est à hauteur fixe, mais le contenu de l'en-tête peut changer.
Je voudrais que le contenu de l'en-tête soit aligné verticalement au bas de la section d'en-tête, de sorte que la dernière ligne de texte "colle" au bas de la section d'en-tête.
Donc, s'il n'y a qu'une seule ligne de texte, ce serait comme:
----------------------------- | Titre d'en-tête | | | | contenu d'en-tête (résultant en une ligne) -----------------------------
Et s'il y avait trois lignes:
----------------------------- | Titre d'en-tête | | le contenu de l'en-tête (ce qui est | beaucoup de choses qu'il parfaitement | s'étend sur trois lignes) -----------------------------
Comment cela peut-il être fait en CSS?
la source
p
élément, ou à tout le moins unspan
display: table-cell
, outable-row
, outable
. Vous n'aurez plus jamais besoin d'utiliser des tableaux pour une mise en page pure.Utilisez le positionnement CSS:
Comme l'a noté cletus , vous devez identifier le contenu de l'en-tête pour que cela fonctionne.
la source
width = '100%'
sur le contenu d'en-tête<span>
éléments ontdisplay: inline;
par défaut, ce qui ne prend pas toute la largeur du conteneur. La solution la plus appropriée consisterait à remplacer la plage par a<div>
, qui est un élément de bloc par défaut.Si vous n'êtes pas préoccupé par les navigateurs hérités, utilisez une flexbox.
L'élément parent a besoin que son type d'affichage soit défini sur flex
Ensuite, vous définissez align-self de l'élément enfant sur flex-end.
Voici la ressource que j'ai utilisée pour apprendre: http://css-tricks.com/snippets/css/a-guide-to-flexbox/
la source
J'utilise ces propriétés et ça marche!
la source
table-cell
casse beaucoup de choses. Comme le système de grille Bootstrap.col-md-12
ne vous donnera plus une div 100% large.Après avoir lutté avec ce même problème pendant un certain temps, j'ai finalement trouvé une solution qui répond à toutes mes exigences:
La solution n'en prend qu'un
<div>
, que j'appelle le "aligneur":CSS
html
Cette astuce fonctionne en créant un div grand et maigre, qui pousse la ligne de base du texte au fond du conteneur.
Voici un exemple complet qui réalise ce que le PO demandait. J'ai fait le "bottom_aligner" épais et rouge à des fins de démonstration uniquement.
CSS:
HTML:
la source
::before
règle, ce qui supprime le besoin d'un élément supplémentaire. Nous avons utilisé flex à la fin, mais cela est utile lorsque vous ne le pouvez pas.height
de la boîte / conteneur et ses parents est défini (sur px ou% ou autre).La manière moderne de le faire serait d'utiliser la flexbox . Voir l'exemple ci-dessous. Vous n'avez même pas besoin d'encapsuler
Some text...
dans une balise HTML, car le texte directement contenu dans un conteneur flex est enveloppé dans un élément flex anonyme.S'il n'y a que du texte et que vous souhaitez vous aligner verticalement sur le fond du conteneur.
la source
position:absolute;
. Cette solution a parfaitement fonctionné pour mon cas!Les éléments en ligne ou en bloc peuvent être alignés sur le bas des éléments de niveau bloc si la hauteur de ligne de l'élément parent / bloc est supérieure à celle de l'élément en ligne. *
balisage:
css:
* assurez-vous que vous êtes en mode standard
la source
la source
<h1>
est dans<p>
ou<div>
j'utiliseraisjustify-content: space-between
.Vous pouvez simplement atteindre le flex
la source
Si vous avez plusieurs éléments de hauteur dynamique, utilisez les valeurs d'affichage CSS du tableau et de la cellule de tableau:
HTML
CSS
J'ai créé une démo JSBin ici: http://jsbin.com/INOnAkuF/2/edit
La démo propose également un exemple d'alignement vertical au centre en utilisant la même technique.
la source
Voici une autre solution utilisant flexbox mais sans utiliser flex-end pour l'alignement inférieur. L'idée est de régler
margin-bottom
sur h1 sur auto pour pousser le contenu restant vers le bas:Nous pouvons également faire de même avec
margin-top:auto
le texte, mais dans ce cas, nous devons l'envelopper dans undiv
ouspan
:la source
Vous n'avez pas besoin d'un absolu + relatif pour cela. Il est tout à fait possible d'utiliser la position relative pour le conteneur et les données. Voilà comment vous le faites.
Supposons que la hauteur de vos données va être
x
. Votre conteneur est relatif et le pied de page est également relatif. Tout ce que vous avez à faire est d'ajouter à vos donnéesVos données seront toujours au fond de votre conteneur. Fonctionne même si vous avez un conteneur avec une hauteur dynamique.
HTML sera comme ça
CSS sera comme ça
Exemple en direct ici
J'espère que cela t'aides.
la source
bottom: -webkit-calc(-100% + x);
se passe?Voici la manière flexible de le faire. Bien sûr, il n'est pas pris en charge par IE8, comme l'utilisateur en avait besoin il y a 7 ans. Selon ce dont vous avez besoin, certaines d'entre elles peuvent être supprimées.
Pourtant, ce serait bien s'il y avait un moyen de le faire sans conteneur externe, il suffit que le texte s'aligne à l'intérieur de lui-même.
la source
une solution très simple, sur une seule ligne, consiste à ajouter une hauteur de ligne au div, en gardant à l'esprit que tout le texte du div ira en bas.
CSS:
HTML:
gardez à l'esprit qu'il s'agit d'une solution pratique et rapide lorsque vous voulez simplement que le texte à l'intérieur de div descende, si vous devez combiner des images et des trucs, vous devrez coder un CSS un peu plus complexe et réactif
la source
si vous pouviez définir la hauteur de la division enveloppante du contenu (# header-content comme indiqué dans la réponse des autres), au lieu de la #header entière, vous pouvez peut-être également essayer cette approche:
HTML
CSS
montrer sur codepen
la source
Semble fonctionner:
HTML: je suis en bas
css:
la source
Toutes ces réponses et aucune n'ont fonctionné pour moi ... Je ne suis pas un expert de la flexbox, mais c'était assez facile à comprendre, c'est simple et facile à comprendre et à utiliser. Pour séparer quelque chose du reste du contenu, insérez un div vide et laissez-le grandir pour remplir l'espace.
https://jsfiddle.net/8sfeLmgd/1/
Cela réagit comme prévu lorsque le contenu inférieur n'est pas de taille fixe également lorsque le conteneur n'est pas de taille fixe.
la source
J'ai conçu un moyen beaucoup plus simple que ce qui a été mentionné.
Définissez la hauteur du div d'en-tête. Puis à l'intérieur, stylisez votre
H1
tag comme suit:Je travaille sur un site pour un client, et la conception nécessite que le texte soit au bas d'une certaine div. J'ai obtenu le résultat en utilisant ces deux lignes, et cela fonctionne très bien. De plus, si le texte se développe, le remplissage restera toujours le même.
la source
J'ai trouvé cette solution sur un modèle de démarrage par défaut bootstrap
la source
la source
essayez avec:
essayez de changer le% pour le corriger. Exemple: 120% ou 90% ... etc.
la source
Le site que je viens de faire pour un client a demandé que le texte du pied de page soit une boîte haute, avec le texte en bas, j'ai réalisé cela avec un simple remplissage, devrait fonctionner pour tous les navigateurs.
la source
padding: 0 30px
est un peu redondante, vous auriez tout aussi bien pu mettrepadding: 30px
les 2 autres déclarations.padding: 60px 30px 8px;
,padding: 60px 30px 8px 30px;
Quatre explicitespadding-
règles, ou même @ suggestion de TheWaxMann sont tous supérieurs - et je suis prêt et capable de faire valoir que l' on ;-)Un exemple parfait de navigateur croisé est probablement celui-ci ici:
http://www.csszengarden.com/?cssfile=/213/213.css&page=0
L'idée est à la fois d'afficher le div en bas et de le faire y coller. Souvent, l'approche simple fera défiler le div collant avec le contenu principal.
Voici un exemple minimal pleinement fonctionnel. Notez qu'aucune astuce d'intégration de div n'est requise. Les nombreux BR sont juste pour forcer une barre de défilement à apparaître:
Si vous vous demandez si votre code ne fonctionne pas sur IE, n'oubliez pas d'ajouter la balise DOCTYPE en haut. Il est crucial que cela fonctionne sur IE. En outre, cela devrait être la première balise et rien ne devrait apparaître au-dessus.
la source
<br />
balises ...content-type
entraînerait une erreur d'analyse XML pour le navigateur.Semble fonctionner:
Utiliser moins rend la résolution d'énigmes CSS beaucoup plus semblable au codage qu'à ... J'adore simplement CSS. C'est un vrai plaisir quand on peut changer toute la mise en page (sans la casser :) juste en changeant un paramètre.
la source
Solution 2015
http://codepen.io/anon/pen/qERMdx
vous êtes le bienvenu
la source