2013-07-10 2 views
1

Я знаю, что существует много тем, но есть ли какой-либо способ CSS придерживаться нижнего колонтитула с высотой в% без переполнения тела и заголовка из-за абсолютной позиции?Липкий нижний колонтитул с переменной высотой

Я пытаюсь придерживаться этого один:

html,body{ 
    height: 100%; 
} 

#header{ 
    background-color: yellow; 
    height: 100px; 
    width: 100%; 
} 

#holder { 
    min-height: 100%; 
    position:relative; 
} 

#body { 
    padding-bottom: 100px; 
} 

#footer{ 
    background-color: lime; 
    bottom: 0; 
    height: 100%; 
    left: 0; 
    position: relative; 
    right: 0; 
} 

с HTML:

<div id="holder"> 
    <div id="header">Title</div> 
    <div id="body">Body</div> 
    <div id="footer">Footer</div> 
</div> 

код здесь: http://jsfiddle.net/TsRkB/

Спасибо!

+0

http://stackoverflow.com/questions/10825879/how-can-a-variable-height-sticky-footer-be-defined-in-pure-css – Pevara

ответ

3

при использовании дисплея: таблиц в качестве базы, то ваша липкая сноска может быть любого размера, и будет уменьшаться, если контент будет расти.

http://dabblet.com/gist/5971212

html { 
    height:100%; 
    width:100%; 
    } 
body { 
    height:100%; 
    width:100%; 
    display:table; 
    table-layout:fixed; 
    margin:0 auto; 
    width:80%; 
    } 
.tr { 
    display:table-row; 
    background:turquoise 
    } 
section.tr { 
    height:100%; 
    background:yellow 
    } 

для

<header class="tr"> <h1>title</h1><p>make me grow</p></header> 
<section class="tr"><article>article</article></section> 
<footer class="tr"> <p>Footer</p><p>make me grow</p></footer> 
+0

Спасибо! Это прекрасно – Herondil

+0

Не могли бы вы объяснить, почему это работает? Я не могу понять, как раздел в середине может иметь высоту 100%, а нижний колонтитул и два других нижних колонтитула таблицы строк не равны нулю ... – matteo

+0

, так как мы используем display: table и height: 100%; эта высота будет элементом strecthcing, если для заполнения их недостаточно. если вы установите один из них на 100%; он будет иметь максимальную высоту, если другие уменьшат свой контент. Когда высота содержимого превышает 100%, весь контейнер будет расти, но никогда не будет меньше 100% высоты. jut like

-2

Fixed это для вас, в основном должно поставить колонтитул вне обертки и переместить его вверх ... http://jsfiddle.net/sMdmk/4/

#footer{ 
background-color: lime; 
bottom: 0; 
height: 10%; 
left: 0; 
position: relative; 
right: 0; 
top: -10%; 
} 
1

Все остальные решения устарели и имеют существенный недостаток: они не работают, если высота колонтитула является переменной или неизвестной.

С появлением CSS flex model решение этой проблемы становится очень и очень простым: в то время как в основном известно для размещения контента в горизонтальном направлении, Flexbox фактически работает так же, как и для задач вертикальной компоновки. Все, что вам нужно сделать, это обернуть вертикальные секции в гибком контейнере и выбрать, какие из них вы хотите расширить. Они автоматически займут все свободное место в контейнере.

Обратите внимание, насколько проста разметка и CSS. Никаких настольных хаков или чего-либо еще.

Модель flex - supported by all major browsers, а также, предположительно, IE11 +, хотя мой IE не отображает этот фрагмент правильно.

html, body { 
 
    height: 100%; 
 
} 
 

 
#header { 
 
    background: yellow; 
 
    height: 100px; /* can be variable as well */ 
 
} 
 

 
#wrapper { 
 
    display: flex; /* use the flex model */ 
 
    min-height: 100%; 
 
    flex-direction: column; /* learn more: http://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ */ 
 
} 
 

 
#body { 
 
    flex: 1; 
 
    border: 1px solid orange; 
 
} 
 

 
#footer{ 
 
    background: lime; 
 
}
<div id="wrapper"> 
 
    <div id="header">Title</div> 
 
    <div id="body">Body</div> 
 
    <div id="footer"> 
 
    Footer<br/> 
 
    of<br/> 
 
    variable<br/> 
 
    height<br/> 
 
    </div> 
 
</div>

Смежные вопросы