Étant donné le code HTML suivant:
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>
Je voudrais #copyright
rester au fond de #container
.
Puis-je y parvenir sans utiliser le positionnement absolu? Si la propriété float prend en charge une valeur de «bas», cela semble faire l'affaire, mais malheureusement, ce n'est pas le cas.
Réponses:
Probablement pas.
Attribuez
position:relative
à#container
, puisposition:absolute; bottom:0;
à#copyright
.la source
En fait, la réponse acceptée par @User ne fonctionnera que si la fenêtre est grande et le contenu court. Mais si le contenu est grand et que la fenêtre est courte, les informations de copyright seront placées sur le contenu de la page, puis en faisant défiler vers le bas pour voir le contenu, vous obtiendrez un avis de copyright flottant. Cela rend cette solution inutile pour la plupart des pages (comme cette page, en fait).
La façon la plus courante de procéder est l'approche du "pied de page collant CSS", ou une variation légèrement plus mince. Cette approche fonctionne très bien - SI vous avez un pied de page à hauteur fixe.
Si vous avez besoin d'un pied de page à hauteur variable qui apparaîtra en bas de la fenêtre si le contenu est trop court, et en bas du contenu si la fenêtre est trop courte, que faites-vous?
Avalez votre fierté et utilisez une table.
Par exemple:
Essaye le. Cela fonctionnera pour n'importe quelle taille de fenêtre, pour n'importe quelle quantité de contenu, pour n'importe quel pied de page de taille, sur chaque navigateur ... même IE6.
Si vous pensez à l'idée d'utiliser une table pour la mise en page, prenez une seconde pour vous demander pourquoi. CSS était censé nous faciliter la vie - et il l'a fait, dans l'ensemble - mais le fait est que même après toutes ces années, c'est toujours un gâchis cassé et contre-intuitif. Il ne peut pas résoudre tous les problèmes. C'est incomplet.
Les tableaux ne sont pas cool, mais au moins pour l'instant, ils sont parfois le meilleur moyen de résoudre un problème de conception.
la source
L'approche flexbox!
Dans les navigateurs pris en charge , vous pouvez utiliser les éléments suivants:
Exemple ici
Afficher l'extrait de code
La solution ci-dessus est probablement plus flexible, cependant, voici une solution alternative:
Exemple ici
Afficher l'extrait de code
En guise de remarque, vous souhaiterez peut-être ajouter des préfixes de fournisseur pour une assistance supplémentaire.
la source
column-reverse
du parent, vous n'avez donc pas besoin d'ajouter quoi que ce soit à l'enfant?Oui, vous pouvez le faire sans
absolute
positionnement et sans utiliser detable
s (qui vis avec du balisage et autres).DEMO
Ceci est testé pour fonctionner sur IE> 7, chrome, FF & est une chose vraiment facile à ajouter à votre disposition existante.
Il fait effectivement ce qui
float:bottom
serait, même en tenant compte du problème signalé dans la réponse de @Rick Reilly!la source
<!DOCTYPE>
ensemble pour que cela fonctionne sur IE (<= 8 au moins); ces anciennes versions ne prennentdisplay:table-XXX
en charge que le mode "standard". Mais le mode standard cassera également un grand nombre de pages conçues pour, disons, IE6..foot{display: table-footer-group}
. Je ne l' ai pas besoinvertical-align
,height
ouborder-collapse
.#container
seulement contenu#foot
et sans autre contenu?C'est une vieille question, mais c'est une approche unique qui peut aider dans plusieurs cas.
CSS pur, sans positionnement absolu, sans fixation de hauteur, Cross-Browser (IE9 +)
découvrez que Working Fiddle
Parce que le flux normal est «de haut en bas», nous ne pouvons pas simplement demander au
#copyright
div de se tenir au fond de ses parents sans absolument se positionner,#copyright
div reste au sommet de son parent, il sera très simple - car c'est la voie d'écoulement normale.Nous allons donc utiliser cela à notre avantage. nous allons changer l'ordre des
div
s dans le HTML, maintenant le#copyright
div est en haut, et le contenu le suit tout de suite. nous faisons également étirer le contenu div complètement (en utilisant des pseudo-éléments et des techniques de compensation)maintenant, il suffit de retourner cet ordre dans la vue. cela peut être fait facilement avec la transformation CSS.
Nous faisons tourner le conteneur de 180 degrés, et maintenant: up-is-down. (et nous inversons le contenu pour qu'il redevienne normal)
Si nous voulons avoir une barre de contrôle dans la zone de contenu, nous devons appliquer un peu plus de magie CSS. comme on peut le voir ici [dans cet exemple, le contenu est en dessous d'un en-tête - mais c'est la même idée]
la source
Créez un autre conteneur
div
pour les éléments ci-dessus#copyright
. Juste au-dessus du droit d'auteur, ajoutez un nouveaudiv
:<div style="clear:both;"></div>
cela forcera le pied de page à être sous tout le reste, tout comme dans le cas de l'utilisation du positionnement relatif (bottom:0px;
).la source
Essaye ça;
la source
Bien qu'aucune des réponses fournies ici ne semble s'appliquer ou fonctionner dans mon cas particulier, je suis tombé sur cet article qui fournit cette solution intéressante:
Je le trouve très utile pour appliquer un design réactif pour l'affichage mobile sans avoir à réorganiser tout le code html d'un site Web, en définissant
body
comme un tableau.Notez que seul le premier
table-footer-group
outable-header-group
sera rendu comme tel: s'il y en a plusieurs, les autres seront rendus commetable-row-group
.la source
Grille CSS
Étant donné que l'utilisation de CSS Grid est en augmentation, je voudrais suggérer
align-self
à l'élément qui se trouve à l'intérieur d'un conteneur de grille.align-self
peut contenir l' une des valeurs:end
,self-end
,flex-end
pour l'exemple suivant.la source
Vous pouvez en effet
align
la boîte à labottom
sans utiliserposition:absolute
si vous connaissez laheight
de l'#container
utilisation de la fonction d' alignement de texte deinline-block
éléments.Ici, vous pouvez le voir en action.
Voici le code:
la source
Utilisation de la propriété translateY et top
Définissez simplement l'élément enfant sur la position: relative et déplacez-le en haut: 100% (c'est la hauteur de 100% du parent) et restez en bas du parent par transform: translateY (-100%) (c'est -100% de la hauteur de l'enfant).
Avantages
Mais toujours une solution :(
N'oubliez pas les préfixes de l'ancien navigateur.
la source
Lien CodePen ici .
la source
Si vous voulez qu'il "colle" au fond, quelle que soit la hauteur du récipient, alors le positionnement absolu est la voie à suivre. Bien sûr, si l'élément copyright est le dernier dans le conteneur, il sera toujours en bas de toute façon.
Pouvez-vous développer votre question? Expliquez exactement ce que vous essayez de faire (et pourquoi vous ne voulez pas utiliser le positionnement absolu)?
la source
De plus, s'il y a des conditions d'utilisation de
position:absolute;
ouposition:relative;
, vous pouvez toujours essayerpadding
parentdiv
ou mettre amargin-top:x;
. Pas une très bonne méthode dans la plupart des cas, mais elle peut être utile dans certains cas.la source
Peut-être que cela aide quelqu'un: vous pouvez toujours placer le div à l'extérieur de l'autre div, puis le pousser vers le haut en utilisant une marge négative:
la source
la source
Je ne veux pas utiliser "position: absolue" pour le pied de page collant en bas. Ensuite, vous pouvez procéder de cette façon:
la source
Si vous ne connaissez pas la hauteur du bloc enfant:
http://jsbin.com/ULUXIFon/3/edit
Si vous connaissez la hauteur du bloc enfant, ajoutez le bloc enfant, puis ajoutez padding-top / margin-top:
la source
Tout simplement parce que cela n'a pas été mentionné du tout, ce qui fonctionne généralement bien dans des situations comme la vôtre:
Placer le copyright-div après le container-div
Vous n'auriez qu'à formater le div des droits d'auteur d'une manière similaire à l'autre conteneur (même largeur globale, centrage, etc.), et tout va bien.
CSS:
HTML:
La seule fois où cela pourrait ne pas être idéal, c'est lorsque votre conteneur-div est déclaré avec
height:100%
, et l'utilisateur devrait faire défiler vers le bas pour voir le droit d'auteur. Mais même vous pouvez toujours contourner (par exemplemargin-top:-20px
- lorsque la hauteur de votre élément de copyright est de 20 pixels).À part: je sais que le PO a demandé une solution qui "... colle au fond de la division" conteneur "..." , et pas quelque chose en dessous, mais allez, les gens recherchent de bonnes solutions ici, et cela est une!
la source
margin-top: -{element height}
.Voici une approche visant à faire flotter un élément de hauteur et de largeur connues (au moins approximativement) vers la droite et de rester en bas, tout en se comportant comme un élément en ligne avec les autres éléments. Il est concentré en bas à droite car vous pouvez le placer facilement dans n'importe quel autre coin grâce à d'autres méthodes.
J'avais besoin de créer une barre de navigation qui aurait les liens réels en bas à droite et des éléments frères et sœurs aléatoires, tout en m'assurant que la barre elle-même s'étirait correctement, sans perturber la mise en page. J'ai utilisé un élément "shadow" pour occuper l'espace des liens de la barre de navigation et l'ai ajouté à la fin des nœuds enfants du conteneur.
la source
Il n'y a rien appelé
float:bottom
en CSS. La meilleure façon est d'utiliser le positionnement dans de tels cas:la source
Pour ceux qui n'ont qu'un seul enfant dans le conteneur, vous pouvez utiliser l' approche
table-cell
etvertical-align
qui a fonctionné de manière fiable pour positionner une seule div au bas de son parent.Notez que l'utilisation des
table-footer-group
autres réponses mentionnées interrompra le calcul de la hauteur du parenttable
.la source
Selon: w3schools.com
Vous devez donc positionner l'élément parent avec quelque chose de relatif ou absolu, etc. et positionner l'élément souhaité en absolu et le dernier en bas à 0.
la source
Div of style,
position:absolute;bottom:5px;width:100%;
fonctionne, mais il a fallu plus de défilement.la source