675 Stimmen

CSS, damit die Fußzeile der HTML-Seite mit einer Mindesthöhe am unteren Rand der Seite bleibt, aber die Seite nicht überlappt

Ich habe die folgende Seite (deadlink: http://www.workingstorage.com/Sample.htm ), die eine Fußzeile hat, die ich nicht am unteren Rand der Seite platzieren kann.

Ich möchte, dass die Fußzeile

  • am unteren Rand des Fensters bleiben, wenn die Seite kurz ist und der Bildschirm nicht ausgefüllt wird, und
  • am Ende des Dokuments verbleiben und sich wie gewohnt nach unten bewegen, wenn mehr als eine Bildschirmmaske Inhalt vorhanden ist (anstatt den Inhalt zu überlappen).

Das CSS ist vererbt und verwirrt mich. Ich kann es anscheinend nicht richtig ändern, um eine Mindesthöhe für den Inhalt festzulegen oder die Fußzeile nach unten zu verschieben.

54 Stimmen

Es ist erstaunlich, dass dies ein so häufiges Problem ist. Vielleicht werden wir in CSS4 Implementierungen von "make a nav bar" und "make a footer" sehen, da diese so häufig versucht werden.

1 Stimmen

Es wird nie CSS4 geben (CSS3 wird nur wachsen). Ich denke, dies wird mit der Implementierung von flexbox .

6 Stimmen

Ein ausgezeichneter Artikel zu diesem Thema: css-tricks.com/couple-takes-sticky-footer

5voto

Camo Punkte 1780

Ich habe hier gerade eine ähnliche Frage beantwortet:

Positionierung der Fußzeile am unteren Rand der Seite mit fester Kopfzeile

Ich bin ziemlich neu in der Web-Entwicklung, und ich weiß, dass dies bereits beantwortet wurde, aber dies ist der einfachste Weg, den ich gefunden, um es zu lösen und ich denke, ist irgendwie anders. Ich wollte etwas flexibel, weil die Fußzeile meiner Web-App eine dynamische Höhe hat, endete ich mit FlexBox und ein Spacer.

  1. Beginnen Sie mit der Einstellung der Höhe für html und body

    html, body { height: 100%; display: flex; flex-direction: column; margin: 0px; }

Ich nehme an, dass ein column Verhalten für unsere App, für den Fall, dass Sie eine Kopfzeile, einen Helden oder einen beliebigen Inhalt vertikal ausgerichtet hinzufügen müssen.

  1. Erstellen Sie die Spacer-Klasse

    .spacer { flex: 1; }

  2. Später könnte Ihr HTML-Code also etwa so lauten

    <html> <body> <header> Header </header> Some content... <div class='spacer'></div> <footer> Footer </footer> </body> </html>

Hier können Sie damit spielen https://codepen.io/anon/pen/xmGZQL

4voto

titleLogin Punkte 489

Sie müssen Folgendes verwenden position: absolute; dies wichtig ist, dann bottom:0

.footer {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
}

4voto

blmayer Punkte 290

Das habe ich mit Hilfe des CSS-Gitters erreicht, bei dem ich im Grunde 3 Zeilen definiert habe:

  • Kopfzeile
  • Inhalt
  • Fußzeile

Der Trick dabei ist, die Fußzeile am Ende der Zeile auszurichten, etwa so:

CSS

body {
    display: grid;
    grid-template-rows: auto auto auto;
}

footer {
    display: grid;
    align-self: end; /* The trick */
}

HTML-Datei

<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>
  <header>
    Header content
  </header>

  <h1>main body</h1>
  <p>This is a paragraph.</p>

  <footer>
    <p>Hello there.</p>
  </footer>
</body>
</html>

Sie können mehr Zeilen verwenden, aber denken Sie daran, das zum CSS hinzuzufügen, oder wickeln Sie alles in ein Div ein.

Dieser Leitfaden aquí hat mir wirklich geholfen, das herauszufinden.

4voto

Sam Jones Punkte 4179

Meine jQuery-Methode setzt die Fußzeile an den unteren Rand der Seite, wenn der Seiteninhalt kleiner als die Fensterhöhe ist, oder setzt die Fußzeile sonst einfach hinter den Inhalt:

Wenn Sie den Code in einem eigenen Bereich vor dem anderen Code unterbringen, verringert sich auch die Zeit, die für die Neuanordnung der Fußzeile benötigt wird.

(function() {
    $('.footer').css('position', $(document).height() > $(window).height() ? "inherit" : "fixed");
})();

3voto

Ich denke, Sie können den Hauptinhalt auf die Höhe des Ansichtsfensters einstellen, so dass die Höhe des Hauptinhalts die Position der Fußzeile bestimmt, wenn der Inhalt größer ist.

* {
  margin: 0;
  padding: 0;
  width: 100%;
}

body {
  display: flex;
  flex-direction: column;
}

header {
  height: 50px;
  background: red;
}

main {
  background: blue;
  /* This is the most important part*/
  height: 100vh; 

}
footer{
  background: black;
  height: 50px;
  bottom: 0;
}

<header></header>
<main></main>
<footer></footer>

0 Stimmen

Ich stoße auf ein Problem, wenn der Inhalt im Hauptfenster höher ist als das Hauptfenster. In meinem Fall habe ich viele Artikel in der Hauptseite als Gitter. Wenn die Anzahl der Artikel z.B. 50 ist, habe ich einen sehr großen vertikalen Bildlauf und der Inhalt im Hauptbereich ist sehr hoch. In dieser Situation erscheint die Fußzeile irgendwo hinter meinem Raster. FIX: Ich habe NUR min-height:100vh anstelle von height:100vh im main eingestellt und es funktioniert in jedem Fall perfekt. P.S. Ich verwende material-ui in reactjs aber es spielt keine Rolle, ich denke

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X