Ich habe ein einfaches zweispaltiges Layout mit einer Fußzeile, die sowohl das rechte als auch das linke Div in meinem Markup löscht. Mein Problem ist, dass ich die Fußzeile nicht in allen Browsern am Ende der Seite halten kann. Es funktioniert, wenn der Inhalt die Fußzeile nach unten drückt, aber das ist nicht immer der Fall.
css
html
footer
sticky-footer
Bill die Eidechse
quelle
quelle
Antworten:
So erhalten Sie eine klebrige Fußzeile:
Haben Sie ein
<div>
mitclass="wrapper"
für Ihren Inhalt.Kurz vor der Schließung
</div>
deswrapper
Platzes die<div class="push"></div>
.Gleich nach der Schließung
</div>
deswrapper
Platzes die<div class="footer"></div>
.quelle
Verwenden Sie CSS vh-Einheiten!
Der wahrscheinlich naheliegendste und nicht hackigste Weg, um eine klebrige Fußzeile zu erstellen, wäre die Verwendung der neuen CSS-Ansichtsfenstereinheiten .
Nehmen Sie zum Beispiel das folgende einfache Markup:
Wenn die Kopfzeile 80 Pixel hoch und die Fußzeile 40 Pixel hoch ist, können wir unsere klebrige Fußzeile mit einer einzigen Regel für den Inhaltsbereich erstellen:
Das heißt: Die Höhe des Inhalts div muss mindestens 100% der Höhe des Ansichtsfensters abzüglich der kombinierten Höhen von Kopf- und Fußzeile betragen.
Das ist es.
Code-Snippet anzeigen
... und so funktioniert derselbe Code mit vielen Inhalten im Inhaltsbereich:
Code-Snippet anzeigen
NB:
1) Die Höhe der Kopf- und Fußzeile muss bekannt sein
2) Alte Versionen von IE (IE8-) und Android (4.4-) unterstützen keine Ansichtsfenstereinheiten. ( caniuse )
3) Es war einmal ein Problem mit Webport-Einheiten innerhalb einer Berechnungsregel. Dies wurde tatsächlich behoben ( siehe hier ), so dass es dort kein Problem gibt. Wenn Sie jedoch aus irgendeinem Grund die Verwendung von calc vermeiden möchten, können Sie dies umgehen, indem Sie negative Ränder verwenden und mit Box-Sizing auffüllen -
Wie so:
Code-Snippet anzeigen
quelle
Klebrige Fußzeile mit
display: flex
Lösung inspiriert von Philip Waltons klebriger Fußzeile .
Erläuterung
Diese Lösung gilt nur für :
Es basiert auf der
flex
Anzeige und nutzt dieflex-grow
Eigenschaft, die es einem Element ermöglicht, entweder in der Höhe oder in der Breite zu wachsen (wenn das auf eines oder jeweils eingestellt ist), um den zusätzlichen Platz im Container zu belegen.flow-direction
column
row
Wir werden uns Hebelwirkung auch die
vh
Einheit, wo1vh
wird wie definiert :Daher ist eine Höhe
100vh
eine präzise Möglichkeit, einem Element mitzuteilen, dass es die gesamte Höhe des Ansichtsfensters überspannen soll.So würden Sie Ihre Webseite strukturieren:
Damit die Fußzeile am unteren Rand der Seite bleibt, soll der Abstand zwischen Körper und Fußzeile so groß werden, wie es erforderlich ist, um die Fußzeile am unteren Rand der Seite zu verschieben.
Daher wird unser Layout:
Implementierung
Sie können damit bei der JSFiddle spielen .
Safari-Macken
Beachten Sie, dass Safari eine fehlerhafte Implementierung der
flex-shrink
Eigenschaft aufweist , die es Elementen ermöglicht, mehr als die Mindesthöhe zu verkleinern, die zum Anzeigen des Inhalts erforderlich wäre. Um dieses Problem zu beheben, müssen Sie dieflex-shrink
Eigenschaft explizit auf 0.content
undfooter
im obigen Beispiel setzen:quelle
.Site-content
spielt die gleiche Rolle wiespacer
. Es heißt einfach anders..Site-content
hat ein Analogon.content
in diesem Markup .. aber egal, ich fragte nach dem Fall gcedo hat eine spezifische Idee darüber, keine Notwendigkeit zu ratenSie können
position: absolute
Folgendes verwenden, um die Fußzeile am Ende der Seite zu platzieren. Stellen Sie dann jedoch sicher, dass Ihremargin-bottom
beiden Spalten über die entsprechenden Spalten verfügen, damit sie nicht von der Fußzeile verdeckt werden.quelle
0px
s in allen Stylesheets, die ich gesehen habe, gerecht sein0
.Hier ist eine Lösung mit jQuery, die wie ein Zauber funktioniert. Es wird geprüft, ob die Höhe des Fensters größer als die Höhe des Körpers ist. Wenn dies der Fall ist, wird der Rand der Fußzeile geändert, um dies auszugleichen. Getestet in Firefox, Chrome, Safari und Opera.
Wenn Ihre Fußzeile bereits einen Rand oben hat (z. B. 50 Pixel), müssen Sie den letzten Teil ändern für:
quelle
Stellen Sie das CSS für Folgendes ein
#footer
:Sie müssen dann ein
padding
odermargin
an der Unterseite Ihres hinzufügen#sidebar
und#content
um die Höhe von#footer
oder wenn sie sich überlappen, übereinstimmen ,#footer
werden sie abgedeckt.Wenn ich mich richtig erinnere, hat IE6 auch ein Problem mit dem
bottom: 0
CSS. Möglicherweise müssen Sie eine JS-Lösung für IE6 verwenden (wenn Sie sich für IE6 interessieren).quelle
Eine ähnliche Lösung wie @gcedo, jedoch ohne dass ein Zwischeninhalt hinzugefügt werden muss, um die Fußzeile nach unten zu drücken. Wir können einfach
margin-top:auto
zur Fußzeile hinzufügen und sie wird unabhängig von ihrer Höhe oder der Höhe des obigen Inhalts an den unteren Rand der Seite verschoben.quelle
.content
flex: 1 0 auto;
, um es anbaubar und nicht schinkbar zu machen, aber esmargin-top: auto;
ist ein netter Trick, bei dem die Fußzeile gestylt wird, nicht "nicht verwandt",.content
was nett ist. Eigentlich frage ich mich, warum Flex in diesem Ansatz benötigt wird.display:flex
, funktioniert es nicht, Sie haben einen normalen Blockelementflussmargin:0 auto
Blockelement zum Zentrieren), ABER wir haben keine Spaltenrichtung, sodass es keinen Rand gibt Auto mit oben / unten. Flexbox hat sowohl Zeilen- als auch Spaltenrichtung;). Dies ist der geringfügige Unterschied, aber der Rand wird auch in der Flexbox verwendet, um das Element auszurichten, sodass Sie selbst innerhalb einer Zeilenrichtung die automatische Ausrichtung von Rand nach oben / unten verwenden können, um vertikal auszurichten. Weitere Informationenindex.html:
main.css:
Quelle: https://www.freecodecamp.org/news/how-to-keep-your-footer-where-it-belongs-59c6aa05c59c/
quelle
Ich habe selbst manchmal damit zu kämpfen gehabt und immer festgestellt, dass die Lösung mit all diesen Divs ineinander eine chaotische Lösung war. Ich habe nur ein bisschen rumgespielt und persönlich herausgefunden, dass dies funktioniert und es sicherlich eine der einfachsten Möglichkeiten ist:
Was mir daran gefällt, ist, dass kein zusätzliches HTML angewendet werden muss. Sie können dieses CSS einfach hinzufügen und dann Ihren HTML-Code wie immer schreiben
quelle
Da die Grid- Lösung noch nicht vorgestellt wurde, ist es hier mit nur zwei Deklarationen für das übergeordnete Element , wenn wir das
height: 100%
undmargin: 0
als selbstverständlich betrachten:align-content: space-between
quelle
CSS:
HTML:
Dies sollte den Trick tun, wenn Sie nach einer reaktionsschnellen Fußzeile suchen, die am unteren Rand der Seite ausgerichtet ist und immer einen oberen Rand von 80% der Höhe des Ansichtsfensters beibehält.
quelle
Verwenden Sie die absolute Positionierung und den Z-Index, um mit den folgenden Schritten ein klebriges Fußzeilendiv bei jeder Auflösung zu erstellen:
position: absolute; bottom: 0;
und der gewünschten Höhediv
, der den Body-Inhalt umschließtposition: relative; min-height: 100%;
div
der Höhe plus Polsterung der Fußzeile entsprichtz-index
Fußzeile größer als den Container ein,div
wenn die Fußzeile abgeschnitten istHier ist ein Beispiel:
quelle
Bei dieser Frage sind viele der Antworten, die ich gesehen habe, klobig, schwer zu implementieren und ineffizient. Ich dachte, ich würde es versuchen und meine eigene Lösung finden, die nur ein kleines bisschen CSS und HTML ist
Dies funktioniert, indem Sie die Höhe der Fußzeile einstellen und dann mithilfe von CSS-Berechnung die Mindesthöhe der Seite ermitteln, wobei sich die Fußzeile noch unten befindet. Ich hoffe, dies hilft einigen Personen :)
quelle
Eine Lösung wäre, die Mindesthöhe für die Boxen einzustellen. Leider scheint es, dass es vom IE nicht gut unterstützt wird (Überraschung).
quelle
Keine dieser reinen CSS-Lösungen funktioniert ordnungsgemäß mit der dynamischen Größenänderung von Inhalten (zumindest unter Firefox und Safari), z. B. wenn Sie einen Hintergrund für die Container-Div, die Seite und dann die Größe der Tabelle (Hinzufügen einiger Zeilen) innerhalb der Div, der Der Tisch kann aus dem unteren Bereich des gestalteten Bereichs herausragen, dh Sie können die Hälfte des Tisches in Weiß auf Schwarz und die Hälfte des Tisches in Weiß haben, da sowohl die Schriftfarbe als auch die Hintergrundfarbe Weiß sind. Es ist im Grunde nicht mit den Rollerseiten zu reparieren.
Verschachteltes Div-Mehrspalten-Layout ist ein hässlicher Hack und das 100% minimale Body / Container-Div zum Festhalten der Fußzeile ist ein hässlicherer Hack.
Die einzige Lösung ohne Skript, die auf allen Browsern funktioniert, die ich ausprobiert habe: eine viel einfachere / kürzere Tabelle mit thead (für Kopfzeile) / tfoot (für Fußzeile) / tbody (td's für eine beliebige Anzahl von Spalten) und 100% Höhe. Dies hat jedoch semantische und SEO-Nachteile wahrgenommen (Fuß muss vor jedem erscheinen. ARIA-Rollen können jedoch anständigen Suchmaschinen helfen).
quelle
Mehrere Leute haben hier oben die Antwort auf dieses einfache Problem gegeben, aber ich muss noch etwas hinzufügen, wenn man bedenkt, wie frustriert ich war, bis ich herausgefunden habe, was ich falsch gemacht habe.
Wie bereits erwähnt, ist der einfachste Weg, dies zu tun, derselbe.
Die Eigenschaft, die in Posts nicht erwähnt wird, vermutlich weil sie normalerweise Standard ist, ist jedoch die Position: statisch auf dem Body-Tag. Positionsrelativ funktioniert nicht!
Mein WordPress-Thema hatte die Standard-Körperanzeige überschrieben und es verwirrte mich für eine widerlich lange Zeit.
quelle
Ein alter Thread, den ich kenne, aber wenn Sie nach einer reaktionsschnellen Lösung suchen, hilft dieser jQuery-Zusatz:
Eine vollständige Anleitung finden Sie hier: https://pixeldesigns.co.uk/blog/responsive-jquery-sticky-footer/
quelle
Ich habe eine sehr einfache Bibliothek https://github.com/ravinderpayal/FooterJS erstellt
Es ist sehr einfach zu bedienen. Rufen Sie nach dem Einfügen der Bibliothek einfach diese Codezeile auf.
Fußzeilen können dynamisch geändert werden, indem die obige Funktion mit unterschiedlichen Parametern / IDs aufgerufen wird.
Hinweis: - Sie müssen kein CSS ändern oder hinzufügen. Die Bibliothek ist dynamisch, was bedeutet, dass selbst wenn die Größe des Bildschirms nach dem Laden der Seite geändert wird, die Position der Fußzeile zurückgesetzt wird. Ich habe diese Bibliothek erstellt, weil CSS das Problem für eine Weile löst, aber wenn sich die Größe der Anzeige erheblich ändert, von Desktop zu Tablet oder umgekehrt, überlappen sie entweder den Inhalt oder bleiben nicht länger klebrig.
Eine andere Lösung sind CSS-Medienabfragen. Sie müssen jedoch manuell verschiedene CSS-Stile für unterschiedliche Bildschirmgrößen schreiben, während diese Bibliothek ihre Arbeit automatisch erledigt und von allen grundlegenden JavaScript-unterstützenden Browsern unterstützt wird.
CSS-Lösung bearbeiten :
Wenn die Höhe der Anzeige jetzt größer als Ihre Inhaltslänge ist, wird die Fußzeile auf den unteren Rand festgelegt. Wenn nicht, wird sie automatisch ganz am Ende der Anzeige angezeigt, wenn Sie einen Bildlauf durchführen müssen, um dies anzuzeigen.
Und es scheint eine bessere Lösung zu sein als JavaScript / Bibliothek.
quelle
Ich hatte vorher kein Glück mit den auf dieser Seite vorgeschlagenen Lösungen, aber schließlich funktionierte dieser kleine Trick. Ich werde es als eine andere mögliche Lösung aufnehmen.
quelle
Flexbox-Lösung
Das Flex-Layout wird für natürliche Kopf- und Fußzeilenhöhen bevorzugt. Diese Flex-Lösung wird in modernen Browsern getestet und funktioniert tatsächlich :) in IE11.
Siehe JS Fiddle .
HTML
CSS
quelle
Für mich ist die schönste Art, es anzuzeigen (die Fußzeile), am unteren Rand zu bleiben, aber nicht immer den Inhalt abzudecken:
quelle
jQuery CROSS BROWSER CUSTOM PLUGIN - $ .footerBottom ()
Oder verwenden Sie jQuery wie ich und stellen Sie Ihre Fußzeilenhöhe auf
auto
oder auf einfix
, was auch immer Sie möchten, es wird trotzdem funktionieren. Dieses Plugin verwendet jQuery-Selektoren. Damit es funktioniert, müssen Sie die jQuery-Bibliothek in Ihre Datei aufnehmen.So führen Sie das Plugin aus. Importieren Sie jQuery, kopieren Sie den Code dieses benutzerdefinierten jQuery-Plugins und importieren Sie ihn nach dem Import von jQuery! Es ist sehr einfach und grundlegend, aber wichtig.
Wenn Sie dies tun, müssen Sie nur diesen Code ausführen:
Es ist nicht erforderlich, es in das Dokument Ready-Ereignis einzufügen. Es wird gut laufen wie es ist. Die Position Ihrer Fußzeile wird neu berechnet, wenn die Seite geladen wird und die Größe des Fensters geändert wird.
Hier ist der Code des Plugins, den Sie nicht verstehen müssen. Wissen Sie einfach, wie Sie es implementieren. Es macht den Job für Sie. Wenn Sie jedoch wissen möchten, wie es funktioniert, schauen Sie sich einfach den Code an. Ich habe Kommentare für Sie hinterlassen.
quelle
Die Flex-Lösungen haben bei mir so gut funktioniert, dass die Fußzeile klebrig wurde, aber leider haben sich einige unserer Seitenlayouts geändert, und nicht zum Besseren. Was bei mir endlich funktioniert hat war:
Ich habe dies aus der Antwort von ctf0 unter https://css-tricks.com/couple-takes-sticky-footer/ erhalten.
quelle
quelle
Wenn Sie nicht möchten, dass die Position festgelegt ist und Sie auf dem Handy nervig verfolgen, scheint dies bisher für mich zu funktionieren.
Stellen Sie einfach das HTML auf
min-height: 100%;
undposition: relative;
dann einposition: absolute; bottom: 0; left: 0;
auf die Fußzeile. Ich habe dann sichergestellt, dass die Fußzeile das letzte Element im Körper ist.Lassen Sie mich wissen, ob dies für andere nicht funktioniert und warum. Ich weiß, dass sich diese langwierigen Style-Hacks unter verschiedenen Umständen, an die ich nicht gedacht hatte, seltsam verhalten können.
quelle
Versuchen Sie, ein Container-Div (mit Überlauf: Auto) um den Inhalt und die Seitenleiste zu legen.
Wenn das nicht funktioniert, haben Sie Screenshots oder Beispiellinks, bei denen die Fußzeile nicht richtig angezeigt wird?
quelle