Wie kann ich eine feste Kopf- und Fußzeile mit scrollbarem Inhalt erhalten? So etwas wie diese Seite . Ich kann mir die Quelle ansehen, um das CSS zu erhalten, aber ich möchte nur das Minimum an CSS und HTML kennen, das ich brauche, damit dies funktioniert.
83
Antworten:
Etwas wie das
<html> <body style="height:100%; width:100%"> <div id="header" style="position:absolute; top:0px; left:0px; height:200px; right:0px;overflow:hidden;"> </div> <div id="content" style="position:absolute; top:200px; bottom:200px; left:0px; right:0px; overflow:auto;"> </div> <div id="footer" style="position:absolute; bottom:0px; height:200px; left:0px; right:0px; overflow:hidden;"> </div> </body> </html>
quelle
Wenn Sie auf Browser abzielen, die flexible Boxen unterstützen, können Sie Folgendes tun: http://jsfiddle.net/meyertee/AH3pE/
HTML
<div class="container"> <header><h1>Header</h1></header> <div class="body">Body</div> <footer><h3>Footer</h3></footer> </div>
CSS
.container { width: 100%; height: 100%; display: flex; flex-direction: column; flex-wrap: nowrap; } header { flex-shrink: 0; } .body{ flex-grow: 1; overflow: auto; min-height: 2em; } footer{ flex-shrink: 0; }
Update:
Informationen zur Browserunterstützung flexibler Boxen finden Sie unter "Kann ich verwenden ?" .
quelle
.body
Gebiet zu bringen? Wenn ich das mache,.container
rollt das Äußere aus der Ansicht heraus, sobald das Innere.body .body
ganz nach unten gescrollt ist.Ansatz 1 - Flexbox
Es funktioniert sowohl für bekannte als auch für unbekannte Höhenelemente. Stellen Sie sicher, dass das äußere Div auf eingestellt ist,
height: 100%;
und setzen Sie die Standardeinstellungmargin
auf zurückbody
. Siehe die Browser-Support-Tabellen .jsFiddle
html, body { height: 100%; margin: 0; } .wrapper { height: 100%; display: flex; flex-direction: column; } .header, .footer { background: silver; } .content { flex: 1; overflow: auto; background: pink; }
<div class="wrapper"> <div class="header">Header</div> <div class="content"> <div style="height:1000px;">Content</div> </div> <div class="footer">Footer</div> </div>
Ansatz 2 - CSS-Tabelle
Für bekannte und unbekannte Höhenelemente. Es funktioniert auch in älteren Browsern einschließlich IE8.
jsFiddle
Code-Snippet anzeigen
html, body { height: 100%; margin: 0; } .wrapper { height: 100%; width: 100%; display: table; } .header, .content, .footer { display: table-row; } .header, .footer { background: silver; } .inner { display: table-cell; } .content .inner { height: 100%; position: relative; background: pink; } .scrollable { position: absolute; left: 0; right: 0; top: 0; bottom: 0; overflow: auto; }
<div class="wrapper"> <div class="header"> <div class="inner">Header</div> </div> <div class="content"> <div class="inner"> <div class="scrollable"> <div style="height:1000px;">Content</div> </div> </div> </div> <div class="footer"> <div class="inner">Footer</div> </div> </div>
Ansatz 3 -
calc()
Wenn Kopf- und Fußzeile eine feste Höhe haben, können Sie CSS verwenden
calc()
.jsFiddle
Code-Snippet anzeigen
html, body { height: 100%; margin: 0; } .wrapper { height: 100%; } .header, .footer { height: 50px; background: silver; } .content { height: calc(100% - 100px); overflow: auto; background: pink; }
<div class="wrapper"> <div class="header">Header</div> <div class="content"> <div style="height:1000px;">Content</div> </div> <div class="footer">Footer</div> </div>
Ansatz 4 -% für alle
Wenn die Kopf- und Fußzeile eine bekannte Höhe haben und auch prozentual sind, können Sie einfach die einfache Berechnung durchführen, um sie zu 100% hoch zu machen.
Code-Snippet anzeigen
html, body { height: 100%; margin: 0; } .wrapper { height: 100%; } .header, .footer { height: 10%; background: silver; } .content { height: 80%; overflow: auto; background: pink; }
<div class="wrapper"> <div class="header">Header</div> <div class="content"> <div style="height:1000px;">Content</div> </div> <div class="footer">Footer</div> </div>
jsFiddle
quelle
Jetzt haben wir ein CSS-Raster. Willkommen im Jahr 2019.
/* Required */ body { margin: 0; height: 100%; } #wrapper { height: 100vh; display: grid; grid-template-rows: 30px 1fr 30px; } #content { overflow-y: scroll; } /* Optional */ #wrapper > * { padding: 5px; } #header { background-color: #ff0000ff; } #content { background-color: #00ff00ff; } #footer { background-color: #0000ffff; }
<body> <div id="wrapper"> <div id="header">Header Content</div> <div id="content"> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </div> <div id="footer">Footer Content</div> </div> </body>
quelle
Ab 2013: Dies wäre mein Ansatz. jsFiddle:
HTML
<header class="container global-header"> <h1>Header (fixed)</h1> </header> <div class="container main-content"> <div class="inner-w"> <h1>Main Content</h1> </div><!-- .inner-w --> </div> <!-- .main-content --> <footer class="container global-footer"> <h3>Footer (fixed)</h3> </footer>
SCSS
// User reset * { // creates a natural box model layout -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } // asume normalize.css // structure .container { position: relative; width: 100%; float: left; padding: 1em; } // type body { font-family: arial; } .main-content { h1 { font-size: 2em; font-weight: bold; margin-bottom: .2em; } } // .main-content // style // variables $global-header-height: 8em; $global-footer-height: 6em; .global-header { position: fixed; top: 0; left: 0; background-color: gray; height: $global-header-height; } .main-content { background-color: orange; margin-top: $global-header-height; margin-bottom: $global-footer-height; z-index: -1; // so header will be on top min-height: 50em; // to make it long so you can see the scrolling } .global-footer { position: fixed; bottom: 0; left: 0; height: $global-footer-height; background-color: gray; }
quelle
Folgendes hat bei mir funktioniert. Ich musste einen Rand unten hinzufügen, damit die Fußzeile meinen Inhalt nicht auffrisst:
header { height: 20px; background-color: #1d0d0a; position: fixed; top: 0; width: 100%; overflow: hide; } content { margin-left: auto; margin-right: auto; margin-bottom: 100px; margin-top: 20px; overflow: auto; width: 80%; } footer { position: fixed; bottom: 0px; overflow: hide; width: 100%; }
quelle