ส่วนท้ายที่เหนียวของ Ryan Faitนั้นดีมาก แต่ฉันพบว่าโครงสร้างพื้นฐานนั้นขาด *
เวอร์ชัน Flexbox
หากคุณโชคดีพอที่จะใช้ flexbox ได้โดยไม่จำเป็นต้องรองรับเบราว์เซอร์รุ่นเก่าส่วนท้ายที่ติดหนึบจะกลายเป็นเรื่องง่ายและรองรับส่วนท้ายที่มีขนาดแบบไดนามิก
เคล็ดลับในการทำให้ส่วนท้ายติดกับด้านล่างด้วย flexbox คือให้องค์ประกอบอื่น ๆ ในคอนเทนเนอร์เดียวกันงอในแนวตั้ง สิ่งที่ต้องทำคือองค์ประกอบ Wrapper เต็มความสูงที่มีdisplay: flex
พี่น้องอย่างน้อยหนึ่งคนที่มีflex
ค่ามากกว่า0
:
CSS:
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#main-wrapper {
display: flex;
flex-direction: column;
min-height: 100%;
}
article {
flex: 1;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#main-wrapper {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
min-height: 100%;
}
article {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
}
header {
background-color: #F00;
}
nav {
background-color: #FF0;
}
article {
background-color: #0F0;
}
footer {
background-color: #00F;
}
<div id="main-wrapper">
<header>
here be header
</header>
<nav>
</nav>
<article>
here be content
</article>
<footer>
here be footer
</footer>
</div>
หากคุณไม่สามารถใช้ flexbox โครงสร้างพื้นฐานที่ฉันเลือกคือ:
<div class="page">
<div class="page__inner">
<header class="header">
<div class="header__inner">
</div>
</header>
<nav class="nav">
<div class="nav__inner">
</div>
</nav>
<main class="wrapper">
<div class="wrapper__inner">
<div class="content">
<div class="content__inner">
</div>
</div>
<div class="sidebar">
<div class="sidebar__inner">
</div>
</div>
</div>
</main>
<footer class="footer">
<div class="footer__inner">
</div>
</footer>
</div>
</div>
ซึ่งไม่ใช่ทั้งหมดที่ห่างไกลจาก:
<div id="main-wrapper">
<header>
</header>
<nav>
</nav>
<article>
</article>
<footer>
</footer>
</div>
เคล็ดลับในการทำให้ส่วนท้ายติดคือให้ส่วนท้ายยึดกับช่องว่างด้านล่างขององค์ประกอบที่มีอยู่ สิ่งนี้ต้องการให้ความสูงของส่วนท้ายเป็นแบบคงที่ แต่ฉันพบว่าส่วนท้ายมักมีความสูงคงที่
HTML:
<div id="main-wrapper">
...
<footer>
</footer>
</div>
CSS:
#main-wrapper {
padding: 0 0 100px;
position: relative;
}
footer {
bottom: 0;
height: 100px;
left: 0;
position: absolute;
width: 100%;
}
#main-wrapper {
padding: 0 0 100px;
position: relative;
}
footer {
bottom: 0;
height: 100px;
left: 0;
position: absolute;
width: 100%;
}
header {
background-color: #F00;
}
nav {
background-color: #FF0;
}
article {
background-color: #0F0;
}
footer {
background-color: #00F;
}
<div id="main-wrapper">
<header>
here be header
</header>
<nav>
</nav>
<article>
here be content
</article>
<footer>
here be footer
</footer>
</div>
เมื่อยึดส่วนท้ายไว้#main-wrapper
ตอนนี้คุณจะต้อง#main-wrapper
มีความสูงของหน้าเป็นอย่างน้อยเว้นแต่เด็ก ๆ จะยาวกว่า นี้จะกระทำโดยการ#main-wrapper
มีของmin-height
100%
คุณต้องจำไว้ว่าพ่อแม่ของมันhtml
และbody
ต้องสูงเท่าหน้าด้วยเช่นกัน
CSS:
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#main-wrapper {
min-height: 100%;
padding: 0 0 100px;
position: relative;
}
footer {
bottom: 0;
height: 100px;
left: 0;
position: absolute;
width: 100%;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#main-wrapper {
min-height: 100%;
padding: 0 0 100px;
position: relative;
}
footer {
bottom: 0;
height: 100px;
left: 0;
position: absolute;
width: 100%;
}
header {
background-color: #F00;
}
nav {
background-color: #FF0;
}
article {
background-color: #0F0;
}
footer {
background-color: #00F;
}
<div id="main-wrapper">
<header>
here be header
</header>
<nav>
</nav>
<article>
here be content
</article>
<footer>
here be footer
</footer>
</div>
แน่นอนว่าคุณควรตั้งคำถามกับการตัดสินของฉันเนื่องจากโค้ดนี้บังคับให้ส่วนท้ายหลุดออกจากด้านล่างของหน้าแม้ว่าจะไม่มีเนื้อหาก็ตาม เคล็ดลับสุดท้ายคือการเปลี่ยนรูปแบบกล่องที่ใช้โดย#main-wrapper
เพื่อให้min-height
การ100%
รวมถึง100px
ขยาย
CSS:
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#main-wrapper {
box-sizing: border-box;
min-height: 100%;
padding: 0 0 100px;
position: relative;
}
footer {
bottom: 0;
height: 100px;
left: 0;
position: absolute;
width: 100%;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
#main-wrapper {
box-sizing: border-box;
min-height: 100%;
padding: 0 0 100px;
position: relative;
}
footer {
bottom: 0;
height: 100px;
left: 0;
position: absolute;
width: 100%;
}
header {
background-color: #F00;
}
nav {
background-color: #FF0;
}
article {
background-color: #0F0;
}
footer {
background-color: #00F;
}
<div id="main-wrapper">
<header>
here be header
</header>
<nav>
</nav>
<article>
here be content
</article>
<footer>
here be footer
</footer>
</div>
และคุณก็มีส่วนท้ายที่มีความเหนียวพร้อมโครงสร้าง HTML ดั้งเดิมของคุณ เพียงตรวจสอบให้แน่ใจว่าfooter
's height
เท่ากับ#main-wrapper
' padding-bottom
และคุณควรตั้งค่า
* เหตุผลที่ฉันพบข้อผิดพลาดกับโครงสร้างของ Fait เป็นเพราะมันตั้งค่า.footer
และ.header
องค์ประกอบในระดับลำดับชั้นที่แตกต่างกันในขณะที่เพิ่ม.push
องค์ประกอบที่ไม่จำเป็น