Ryan Fait'in yapışkan altbilgisi çok güzel, ancak temel yapısının eksik olduğunu düşünüyorum *.
Flexbox Sürümü
Eski tarayıcıları desteklemeye gerek kalmadan flexbox'ı kullanabileceğiniz kadar şanslıysanız, yapışkan altbilgiler önemsiz bir şekilde kolay hale gelir ve dinamik olarak boyutlandırılmış bir altbilgiyi destekler.
Altbilgilerin flexbox ile dibe yapışmasını sağlamanın püf noktası, aynı kaptaki diğer öğelerin dikey olarak esnetilmesidir. Tek gereken, aşağıdakilerden daha büyük display: flexbir flexdeğere sahip en az bir kardeşi olan tam yükseklikte bir sarmalayıcı öğesidir 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 kullanamıyorsanız, temel seçim yapım:
<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>
Hangisi o kadar da uzak değil:
<div id="main-wrapper">
<header>
</header>
<nav>
</nav>
<article>
</article>
<footer>
</footer>
</div>
Altbilgiyi sabitlemenin püf noktası, altbilginin, içerdiği öğenin alt dolgusuna sabitlenmesidir. Bu , altbilgi yüksekliğinin sabit olmasını gerektirir , ancak altbilgilerin tipik olarak statik yükseklikte olduğunu buldum.
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>
Altbilgi sabitlendiğinde, altbilgisi daha uzun olmadıkça, artık en azından sayfanın yüksekliğinde #main-wrapperolmanız gerekir #main-wrapper. Bu yaparak yapılır #main-wrapperbir var min-heightbir 100%. Ayrıca kendi ebeveynleri, hatırlamak zorunda htmlve bodyihtiyaç yanı sayfa olarak uzun boylu gibi olması.
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>
Tabii ki, bu kod altbilginin içerik olmadığında bile sayfanın altından düşmesine neden olduğu için benim kararımı sorgulamalısınız. Geçen hile kullandığı kutu modelini değiştirmek için #main-wrapperböylece min-heightbir 100%içermektedir 100pxdolguyu.
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>
Ve işte orada, orijinal HTML yapınızın olduğu yapışkan bir altbilgi var. Sadece emin olmak footer'ın heighteşittir #main-wrappers' padding-bottomve set olmalıdır.
* Fait'in yapısında hata bulmamın sebebi , gereksiz bir eleman eklerken .footerve .headerelemanlarını farklı hiyerarşik seviyelerde ayarlamasıdır .push.