Как сделать содержимое 100% высоты и столбцы равной высоты в этом макете? - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть такой макет, в котором my_menu фиксируется вверху, за ним следует заголовок, за которым следует содержимое с 960px и центром, в котором 3 столбца были перемещены влево и, наконец, следуют липкий нижний колонтитул.

  1. Проблема в том, как заставить контент растягиваться до 100% высоты. даже если в каком-либо из дочерних столбцов недостаточно содержимого?

  2. Как сделать 3 столбца равными по высоте независимо от того, какой столбец содержание

  3. Поддерживать липкий нижний колонтитул! Чистый CSS, нет JavaScript, нет JQuery!

HTML-разметка

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8" /> 
<title>Document Title</title> 
<link rel="stylesheet" href="main.css" type="text/css" /> 
</head> 
<body id="index"> 
<div id="wrapper"> 
    <div id="my_menu"> 
    FIXED MENU WIDTH 100% 
    </div> 
    <div id="my_header"> 
    HEADER WIDTH 100% 
    </div> 
    <div id="content"> 
        <p>CONTENT 960px</p> 
        <div id="col1" class="content_columns"> 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        COLUMN 1 WIDTH 320px HEIGHT 100% 
        </div> 
        <div id="col2" class="content_columns"> 
        COLUMN 2 WIDTH 320px HEIGHT 100% 
        COLUMN 2 WIDTH 320px HEIGHT 100% 
        COLUMN 2 WIDTH 320px HEIGHT 100% 
        COLUMN 2 WIDTH 320px HEIGHT 100% 
        COLUMN 2 WIDTH 320px HEIGHT 100% 
        COLUMN 2 WIDTH 320px HEIGHT 100% 
        COLUMN 2 WIDTH 320px HEIGHT 100% 
        COLUMN 2 WIDTH 320px HEIGHT 100% 
        COLUMN 2 WIDTH 320px HEIGHT 100% 
        </div> 
        <div id="col3" class="content_columns"> 
        COLUMN 3 WIDTH 320px HEIGHT 100% 
        COLUMN 3 WIDTH 320px HEIGHT 100% 
        COLUMN 3 WIDTH 320px HEIGHT 100% 
        COLUMN 3 WIDTH 320px HEIGHT 100% 
        COLUMN 3 WIDTH 320px HEIGHT 100% 
        </div> 
        <div class="clear_floats"></div> <!-- For Clearing Floats --> 
    </div> 
    <div class="push"></div> <!-- For Sticky Footer --> 
</div> 
    <div id="my_footer"> 
    STICKY FOOTER WIDTH 100% 
    </div> 
</body> 
</html> 

Стили CSS

* /* For CSS Reset */ 
{ 
padding: 0; 
margin: 0; 
} 

html, body 
{ 
width: 100%; 
height: 100%; 
} 

div#wrapper 
{ 
width: 100%; 
height: 100%; 
min-height: 100%; /* For Sticky Footer */ 
height: auto !important; /* For Sticky Footer */ 
margin: 0 auto -70px; /* For Sticky Footer */ 
} 

div#my_menu 
{ 
width: 100%; 
height: 50px; 
outline: 1px solid black; 
background-color: grey; 
text-align: center; 
position: fixed; 
} 

div#my_header 
{ 
width: 100%; 
height: 100px; 
outline: 1px solid black; 
background-color: yellow; 
text-align: center; 
padding-top: 50px; 
} 

div#content 
{ 
width: 960px; 
margin: 0 auto; 
outline: 1px solid black; 
background-color: brown; 
text-align: center; 
} 

div.content_columns 
{ 
width: 320px; 
outline: 1px solid black; 
background-color: gold; 
text-align: center; 
float: left; 
} 

div.clear_floats /* For Clearing Floats */ 
{ 
clear: both; 
} 

div#my_footer 
{ 
width: 100%; 
height: 70px; 
outline: 1px solid black; 
background-color: pink; 
text-align: center; 
} 

div.push /* For Sticky Footer */ 
{ 
height: 70px; 
} 

Ответы [ 4 ]

3 голосов
/ 06 февраля 2012

Решение с полной поддержкой IE6 + . Я вытащу и объясню соответствующие биты кода.

Современная поддержка

div.content_columns {
    width: 320px;
    outline: 1px solid black;
    background-color: gold;
    text-align: center;
    display: table-cell; /* No floats, this instead */
}

Итак, поскольку современные браузеры облегчают эту задачу, все, что нам нужно сделать, это использовать display: table-cell, чтобы заставить это работать. Делает столбцы равными по высоте и действует как ячейка таблицы. Легкий гороховый лимонный отжим.

IE 6 & 7 поддержка

<!--[if lte IE 7]>
<style>
    div#content {
        overflow: hidden;
    }
    div.content_columns {
        vertical-align: top;
        display: inline;
        zoom:1;
        padding-bottom: 9999px;
        margin-bottom: -9999px;
    }
</style>
<![endif]-->

Теперь для поддержки IE 6 и 7 мы собираемся использовать несколько приемов. Прежде всего, следует отметить, что это не нужно делать в условном комментарии, но мне это нравится больше. Чище для меня. Но вы можете использовать CSS-хаки, чтобы эти значения работали только в IE.

То, что мы делаем, это заставляем IE 6 и 7 обрабатывать каждый столбец как элемент inline-block, но, поскольку они не поддерживают (по крайней мере для элементов уровня блока), который мы используем inline дисплей и zoom: 1; исправление для запуска IE hasLayout свойство . Это будет относиться к нему, как будто это inline-block elmenent. Затем мы устанавливаем их все так, чтобы они были сверху друг над другом, и используем еще один маленький трюк. Мы используем padding: 9999px, чтобы расширить нижнюю часть элемента настолько, что другие элементы вряд ли будут длиннее его, и мы используем margin: -9999px;, чтобы не изменять рендеринг страницы, когда мы делаем это. Мы не хотим расширять страницу, просто фон. 9999px является произвольным и может принимать любое значение, если оно достаточно велико, чтобы превышать разницу между самым длинным и самым коротким столбцами. И для последних штрихов мы устанавливаем overflow: hidden на элемент контейнера, чтобы фоны не расширяли страницу, обливаясь снизу.

И у вас это есть, полная поддержка IE 6+ для многоколоночной разметки с фиксированной шириной с использованием чистого CSS 2 (плюс MS zoom).

1 голос
/ 07 февраля 2012

bfrohs предложил решение, которое работает в браузерах без IE: Полноразмерные столбцы без прокрутки

@ Jawad - Еще раз спасибо за ваше время и вашу помощь!:)

0 голосов
/ 06 февраля 2012

Вы всегда можете попробовать старую технику " * * .То есть элемент, содержащий ваши три элемента div, имеет фоновое изображение, которое располагается вертикально.это изображение будет иметь линии для ваших столбцов и создаст иллюзию равных высот.

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

0 голосов
/ 06 февраля 2012

AFAIK это невозможно с чистым CSS без использования макета сетки или flexbox , которые не очень поддерживаются в браузерах.(Flexbox, по крайней мере, уже является рабочим проектом w3c ...)

Вы можете обойти это, применив минимальную высоту, которая имеет несколько недостатков, или установите высоту с помощью js.Я не знаю ни одного разумного кроссбраузера для css-решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...