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: flex
bir flex
değ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-wrapper
olmanız gerekir #main-wrapper
. Bu yaparak yapılır #main-wrapper
bir var min-height
bir 100%
. Ayrıca kendi ebeveynleri, hatırlamak zorunda html
ve body
ihtiyaç 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-wrapper
böylece min-height
bir 100%
içermektedir 100px
dolguyu.
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 height
eşittir #main-wrapper
s' padding-bottom
ve set olmalıdır.
* Fait'in yapısında hata bulmamın sebebi , gereksiz bir eleman eklerken .footer
ve .header
elemanlarını farklı hiyerarşik seviyelerde ayarlamasıdır .push
.