Angesichts des folgenden HTML:
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>
Ich würde gerne #copyright
am Boden bleiben #container
.
Kann ich dies ohne absolute Positionierung erreichen? Wenn die Eigenschaft float den Wert 'bottom' unterstützt, scheint dies den Trick zu tun, aber leider nicht.
Antworten:
Wahrscheinlich nicht.
Zuweisen
position:relative
zu#container
und dannposition:absolute; bottom:0;
zu#copyright
.quelle
Tatsächlich funktioniert die von @User akzeptierte Antwort nur, wenn das Fenster groß und der Inhalt kurz ist. Wenn der Inhalt jedoch groß und das Fenster kurz ist, werden die Copyright-Informationen über den Seiteninhalt gelegt. Wenn Sie dann nach unten scrollen, um den Inhalt anzuzeigen, erhalten Sie einen schwebenden Copyright-Hinweis. Das macht diese Lösung für die meisten Seiten unbrauchbar (wie diese Seite eigentlich).
Die gebräuchlichste Methode hierfür ist der demonstrierte Ansatz "CSS Sticky Footer" oder eine etwas schlankere Variante. Dieser Ansatz funktioniert hervorragend - WENN Sie eine Fußzeile mit fester Höhe haben.
Was tun Sie, wenn Sie eine Fußzeile mit variabler Höhe benötigen, die am unteren Rand des Fensters angezeigt wird, wenn der Inhalt zu kurz ist, und am unteren Rand des Inhalts, wenn das Fenster zu kurz ist?
Schluck deinen Stolz und benutze einen Tisch.
Zum Beispiel:
Versuch es. Dies funktioniert für jede Fenstergröße, für jede Menge an Inhalten, für jede Fußzeile, in jedem Browser ... sogar für IE6.
Nehmen Sie sich eine Sekunde Zeit, um sich zu fragen, warum. CSS sollte unser Leben leichter machen - und das hat es insgesamt getan -, aber Tatsache ist, dass es auch nach all den Jahren immer noch ein kaputtes, kontraintuitives Durcheinander ist. Es kann nicht jedes Problem lösen. Es ist unvollständig.
Tabellen sind nicht cool, aber zumindest für den Moment sind sie manchmal der beste Weg, um ein Designproblem zu lösen.
quelle
Der Flexbox-Ansatz!
In unterstützten Browsern können Sie Folgendes verwenden:
Beispiel hier
Code-Snippet anzeigen
Die obige Lösung ist wahrscheinlich flexibler, hier ist jedoch eine alternative Lösung:
Beispiel hier
Code-Snippet anzeigen
Als Randnotiz möchten Sie möglicherweise Herstellerpräfixe für zusätzliche Unterstützung hinzufügen.
quelle
column-reverse
Elternteil, sodass Sie dem Kind überhaupt nichts hinzufügen müssen?Ja, Sie können dies ohne
absolute
Positionierung und ohne Verwendung vontable
s (die mit Markup und dergleichen schrauben) tun .DEMO
Dies wurde getestet, um mit IE> 7, Chrome, FF & zu arbeiten. Es ist wirklich einfach, es zu Ihrem vorhandenen Layout hinzuzufügen.
Es macht effektiv das, was
float:bottom
es tun würde, selbst wenn es das Problem berücksichtigt, auf das in der Antwort von @Rick Reilly hingewiesen wurde!quelle
<!DOCTYPE>
Set, damit dies im IE funktioniert (mindestens <= 8). Diese älteren Versionen unterstützen nur dendisplay:table-XXX
"Standard" -Modus. Der Standardmodus wird jedoch auch viele Seiten beschädigen, die beispielsweise für IE6 entwickelt wurden..foot{display: table-footer-group}
. Ich habe nicht brauchenvertical-align
,height
oderborder-collapse
.#container
nur enthalten#foot
und kein anderer Inhalt?Es ist eine alte Frage, aber dies ist ein einzigartiger Ansatz, der in mehreren Fällen helfen kann.
Reines CSS, ohne absolute Positionierung, ohne Höhenkorrektur, Cross-Browser (IE9 +)
Schauen Sie sich diese Working Fiddle an
Da der normale Fluss von oben nach unten ist, können wir den
#copyright
Div nicht einfach bitten , sich an den Boden seines Elternteils zu halten, ohne sich absolut zu positionieren. Aber wenn wir das wollten#copyright
Div sich an den oberen seines Elternteils hält, dann wird sehr einfach sein - weil dies der normale Fließweg ist.Wir werden dies also zu unserem Vorteil nutzen. Wir werden die Reihenfolge der
div
s im HTML ändern , jetzt die#copyright
div oben und der Inhalt folgt ihm sofort. Wir lassen den Inhalt auch vollständig dehnen (unter Verwendung von Pseudoelementen und Löschtechniken).Jetzt geht es nur noch darum, diese Reihenfolge wieder in die Ansicht umzukehren. Dies ist mit der CSS-Transformation problemlos möglich.
Wir drehen den Container um 180 Grad und jetzt: hoch-runter. (und wir kehren den Inhalt um, um wieder normal auszusehen)
Wenn wir eine Scroolbar im Inhaltsbereich haben möchten, müssen wir etwas mehr CSS-Magie anwenden. gezeigt wird wie hier [in diesem Beispiel ist der Inhalt unter einem Header - aber es ist die gleiche Idee]
quelle
Erstellen Sie einen weiteren Container
div
für die obigen Elemente#copyright
. Fügen Sie direkt über dem Copyright ein neues hinzudiv
:<div style="clear:both;"></div>
Dadurch wird die Fußzeile gezwungen , sich unter allem anderen zu befinden, genau wie bei der Verwendung der relativen Positionierung (bottom:0px;
).quelle
Versuche dies;
quelle
Während keine der hier gegebenen Antworten in meinem speziellen Fall zutraf oder zu funktionieren schien, stieß ich auf diesen Artikel, der diese nette Lösung bietet:
Ich finde es sehr nützlich, um Responsive Design für mobile Anzeigen anzuwenden, ohne den gesamten HTML-Code einer Website neu einstellen zu müssen
body
selbst als Tabelle festzulegen.Beachten Sie, dass nur das erste
table-footer-group
odertable-header-group
als solches gerendert wird: Wenn es mehr als eines gibt, werden die anderen als gerenderttable-row-group
.quelle
CSS-Raster
Da die Verwendung von CSS Grid zunimmt, möchte ich
align-self
dem Element vorschlagen , das sich in einem Grid-Container befindet.align-self
enthalten , können beliebige Werte:end
,self-end
,flex-end
für das folgende Beispiel.quelle
Sie können
align
das Feld in der Tatbottom
ohne verwenden,position:absolute
wenn Sieheight
die#container
Verwendung der Textausrichtungsfunktion von kenneninline-block
Elementen kennen.Hier können Sie es in Aktion sehen.
Dies ist der Code:
quelle
Verwenden der Eigenschaft translateY und top
Setzen Sie das untergeordnete Element einfach auf Position: relativ und verschieben Sie es dann nach oben: 100% (das ist die 100% -Höhe des übergeordneten Elements) und bleiben Sie durch Transformation am unteren Ende des übergeordneten Elements: translateY (-100%) (das ist -100% der Höhe von das Kind).
Leistungen
Aber immer noch nur Workaround :(
Vergessen Sie nicht die Präfixe für den älteren Browser.
quelle
CodePen Link hier .
quelle
Wenn Sie möchten, dass es unabhängig von der Höhe des Behälters am Boden "haftet", ist die absolute Positionierung der richtige Weg. Wenn das Copyright-Element das letzte im Container ist, befindet es sich natürlich immer ganz unten.
Können Sie Ihre Frage erweitern? Erklären Sie genau, was Sie versuchen (und warum Sie keine absolute Positionierung verwenden möchten)?
quelle
Wenn es Bestimmungen für die Verwendung von
position:absolute;
oder gibtposition:relative;
, können Sie auch versuchen,padding
Elterndiv
oder a zu setzenmargin-top:x;
. In den meisten Fällen keine sehr gute Methode, in einigen Fällen kann sie jedoch nützlich sein.quelle
Vielleicht hilft das jemandem: Sie können das Div immer außerhalb des anderen Div platzieren und es dann mit negativem Rand nach oben schieben:
quelle
quelle
Ich möchte nicht "position: absolute" für eine klebrige Fußzeile unten verwenden. Dann können Sie so vorgehen:
quelle
Wenn Sie die Höhe des untergeordneten Blocks nicht kennen:
http://jsbin.com/ULUXIFon/3/edit
Wenn Sie die Höhe des untergeordneten Blocks kennen, fügen Sie den untergeordneten Block hinzu, und fügen Sie dann padding-top / margin-top hinzu:
quelle
Nur weil dies überhaupt nicht erwähnt wurde, funktioniert das normalerweise in Situationen wie Ihrer gut:
Platzieren des Copyright-Div nach dem Container-Div
Sie müssten das copyright-div nur ähnlich wie den anderen Container formatieren (gleiche Gesamtbreite, Zentrierung usw.), und alles ist in Ordnung.
CSS:
HTML:
Dies ist möglicherweise nur dann nicht ideal, wenn Ihr Container-Div mit deklariert
height:100%
ist und der Benutzer nach unten scrollen muss, um das Copyright anzuzeigen. Aber auch noch könnten Siemargin-top:-20px
herumarbeiten (z. B. wenn die Höhe Ihres Copyright-Elements 20px beträgt).Nebenbei: Ich weiß, dass das OP nach einer Lösung gefragt hat, die "... am Boden des 'Container'-Bereichs haftet ..." und nicht darunter, aber komm schon, die Leute suchen hier nach guten Lösungen, und das hier ist ein!
quelle
margin-top: -{element height}
.Hier ist ein Ansatz, der darauf abzielt, ein Element mit einer bekannten Höhe und Breite (zumindest ungefähr) nach rechts schweben zu lassen und unten zu bleiben, während es sich für die anderen Elemente als Inline-Element verhält. Es ist unten rechts fokussiert, da Sie es mit anderen Methoden problemlos in jeder anderen Ecke platzieren können.
Ich musste eine Navigationsleiste erstellen, die die tatsächlichen Links unten rechts und zufällige Geschwisterelemente enthält, und gleichzeitig sicherstellen, dass sich die Leiste selbst richtig dehnt, ohne das Layout zu stören. Ich habe ein "Schatten" -Element verwendet, um den Linkbereich der Navigationsleiste zu belegen, und es am Ende der untergeordneten Knoten des Containers hinzugefügt.
quelle
float:bottom
In CSS wird nichts aufgerufen . Der beste Weg ist die Positionierung in solchen Fällen:quelle
Für diejenigen, die nur ein Kind im Container haben, können Sie das
table-cell
und verwendenvertical-align
Ansatz , der zuverlässig funktioniert hat, um ein einzelnes Div am unteren Rand des übergeordneten Elements zu positionieren.Beachten Sie, dass die Verwendung
table-footer-group
als andere Antworten die Höhenberechnung des übergeordneten Elements unterbrichttable
.quelle
Laut: w3schools.com
Sie müssen also das übergeordnete Element mit etwas entweder Relativem oder Absolutem usw. positionieren und das gewünschte Element auf Absolut positionieren und letzteres auf 0 setzen.
quelle
Div of Style,
position:absolute;bottom:5px;width:100%;
funktioniert, aber es erforderte mehr Bildlaufsituation.quelle