2 колонки жидкости шириной с 100% высоты? - PullRequest
0 голосов
/ 11 февраля 2011

Хорошо, я знаю, что подобные вопросы были заданы, но мои проблемы с поиском в Google и ответы на почти все вопросы о стековом потоке еще не помогли мне с этим. Мне нужно иметь контейнер Div, который содержит один или два столбца внутри него. Содержимое заполняется через CMS и может содержать или не содержать оба столбца.

Левый столбец будет навигационной рейкой, если он существует, а правый столбец будет основной копией тела. Таким образом, если не включена навигация, правый столбец должен занимать 100% ширины контейнера. Если навигационная рейка СУЩЕСТВУЕТ, то она должна съесть, скажем, 200 пикселей на левой стороне и переместить правый основной контент, чтобы занять оставшуюся ширину.

Проблема, с которой я столкнулся, заключается в том, чтобы высота пересекала 100% на левой навигационной рейке, если существует левая навигационная рейка.

Надеюсь, это имеет смысл.

Желаемый результат здесь: (поскольку я пока не могу размещать изображения)

http://www.freeimagehosting.net/uploads/60a01995ae.gif

и когда левая навигация не вставлена, здесь:

http://www.freeimagehosting.net/uploads/be5b69e9ec.gif

Я получил это, указав ширину справа, чтобы съесть оставшуюся ширину, оставшуюся от левого столбца 200px.

#container {
    margin: 0 auto;
    overflow: hidden;
    width: 960px;
}
#left-col {
    float: left;
    width: 188px;
    background-color: #d7d7d7;
    padding-bottom: 500em;
    margin-bottom: -500em;
}
#right-col {
    float: left;
    width: 722px;
    margin-right: -1px; /* Thank you IE */
    background-color: red;
    padding-bottom: 500em;
    margin-bottom: -500em;
}

<body>
<div id="container">
    <div id="left-col">
        <p>Left Rail Nav</p>
    </div>
    <div id="right-col">
        <p>Primary content</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
</div>

Проблема возникает, когда я хочу сохранить ширину правого столбца равной 100%, если левая навигация не включена. Когда я добавляю ширину в 100% к содержимому справа, он опускает его вниз.

Изменение ширины правой колонки:

#right-col {
    float: left;
    width: 100%;
    margin-right: -1px; /* Thank you IE */
    background-color: red;
    padding-bottom: 500em;
    margin-bottom: -500em;
}

Вот так: http://www.freeimagehosting.net/uploads/fef22741e7.gif

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

Можно подумать, что плавающие div и применение высоты 100% может сработать, но, очевидно, нет.

Ответы [ 3 ]

1 голос
/ 11 февраля 2011

Возможное решение проблемы - дать оба столбца display: table-cell и убрать ширину из правого столбца (а также поля и отступы из обоих ...).

Проблема в том, что он несовместим со старыми версиями IE.

1 голос
/ 11 февраля 2011

Я подумал, что расширю это, чтобы проработать ответ, данный @jeroen.Еще раз спасибо @ jeroen.

CSS для получения желаемых результатов во всех браузерах, кроме IE, заключался в использовании display: table-cell;, как упомянуто @ jeroen.

Это изменило вышеуказанный CSS на:

#container {
    margin: 0 auto;
    overflow: hidden;
    width: 960px;
}
#left-col {
    width: 188px;
    display: table-cell;
    background-color: #d7d7d7;
}
#right-col {
    display: table-cell;
    background-color: red;
}

HTML-код остался прежним:

<body>
<div id="container">
    <div id="left-col">
        <p>Left Rail Nav</p>
    </div>
    <div id="right-col">
        <p>Primary content</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in rutrum est. Nulla nec tempor erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin sodales arcu quis neque semper porttitor quis vitae justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
</div>

Чтобы все было правильно и правильно выглядело во всех браузерах, мне пришлось добавитьследующие в исключении IE:

<!--[if IE]>
    <style type="text/css">
        #left-col { display: block; float: left; width: 188px; }
        #right-col { display: block; float: left; }
    </style>
<![endif]-->

Это отлично работало для того, что я хотел, и позволило мне динамически подавать контент, не беспокоясь о манипуляциях с DOM после doc при помощи JavaScript, который я люблю, но на самом делехотел более чистый подход для этого приложения.Я надеюсь, что это может помочь кому-то еще.

0 голосов
/ 11 февраля 2011

Что-то вроде: html, body, #container, #left-col, #right-col { height: 100%; } должно работать.

...