Установка высоты div в HTML с помощью CSS

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

.rightfloat {
  color: red;
  background-color: #BBBBBB;
  float: right;
  width: 200px;
}

.left {
  font-size: 20pt;
}

.separator {
  clear: both;
  width: 100%;
  border-top: 1px solid black;
}
<div class = "separator">
  <div class = "rightfloat">
    Some really short content.
  </div>
  <div class = "left"> 
    Some really really really really really really
    really really really really big content
  </div>
</div>
<div class = "separator">
  <div class = "rightfloat">
    Some more short content.
  </div>
  <div class = "left"> 
    Some really really really really really really
    really really really really big content
  </div>
</div>

Обновлено: я согласен с тем, что этот пример очень похож на таблицу, и фактическая таблица будет прекрасным выбором. Но моя «настоящая» страница со временем станет менее табличной, и я просто хотел бы сначала освоить эту задачу!

Кроме того, по какой-то причине, когда я создаю / редактирую свои сообщения в IE7, код отображается правильно в режиме предварительного просмотра, но когда я действительно публикую сообщение, форматирование удаляется. Редактирование моего сообщения в Firefox 2, похоже, сработало, FWIW.


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

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
39
0
173 783
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

У меня была такая же проблема на моем сайте (бесстыдная пробка).

У меня была навигационная секция «float: right», а в основной части страницы было фоновое изображение размером около 250 пикселей, выровненное по правому краю и «repeat-y». Затем я добавил к нему что-то со словами «clear: both». Вот W3Schools и CSS свойство clear.

Я поместил очистку внизу классифицированного div "page". Исходный код моей страницы выглядит примерно так.

body
 -> header (big blue banner)
 -> headerNav (green bar at the top)
 -> breadcrumbs (invisible at the moment)
 -> page
     -> navigation (floats to the right)
     -> content (main content)
         -> clear (the quote at the bottom)
         -> footerNav (the green bar at the bottom)
     -> clear (empty but still does something)
 -> footer (blue thing at the bottom)

Надеюсь, это поможет :)

Просто пытаюсь помочь здесь, чтобы код был более читабельным. Помните, что вы можете вставить фрагменты кода, нажав кнопку вверху с надписью «101010». Просто введите свой код, выделите его и нажмите кнопку.

Вот пример:

<html>
    <body>
    <style type = "text/css">
        .rightfloat {
            color: red;
            background-color: #BBBBBB;
            float: right;
            width: 200px;
        }

        .left {
            font-size: 20pt;
        }

        .separator {
            clear: both;
            width: 100%;
            border-top: 1px solid black;
        }
    </style>

Попробуйте:

html, body,
#left, #right {
  height: 100%
}

#left {
  float: left;
  width: 25%;
}
#right {
  width: 75%;
}
<html>
  <body>
    <div id = "left">
      Content
    </div>
    <div id = "right">
      Content
    </div>
  </body>
</html>

Вот пример столбцов одинаковой высоты - Столбцы одинаковой высоты - еще раз

Вы также можете ознакомиться с идеей «Faux Columns» - Искусственные колонны

Не идите по столовому маршруту. Если это не табличные данные, не рассматривайте их как таковые. Это плохо для доступности и гибкости.

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

Двухколоночный макет немного сложен для работы в CSS (по крайней мере, до тех пор, пока CSS3 не станет практичным).

Перемещение влево и вправо будет работать до определенной точки, но не позволит расширить фон. Чтобы фон оставался сплошным, вам придется реализовать технику, известную как «искусственные столбцы», что в основном означает, что сами столбцы не имеют фонового изображения. Ваши 2 столбца будут содержаться внутри родительского тега. Этому родительскому тегу предоставляется фоновое изображение, содержащее 2 цвета столбцов, которые вы хотите. Сделайте этот фон настолько большим, насколько вам нужно (если это сплошной цвет, сделайте его высотой не более 1 пикселя) и сделайте так, чтобы он повторял y. У AListApart есть отличное пошаговое руководство о том, что необходимо для его работы.

http://www.alistapart.com/articles/fauxcolumns/

Ответ принят как подходящий

Кхм ...

The short answer to your question is that you must set the height of 100% to the body and html tag, then set the height to 100% on each div element you want to make 100% the height of the page.

На самом деле, 100% высота не подходит для большинства дизайнерских ситуаций - это может быть мало, но это не лучший ответ. Погуглите макеты "любой столбец с самой длинной". Лучший способ - поместить левый и правый столбцы внутрь оболочки div, разместить левый и правый столбцы, а затем развернуть оболочку - это заставит ее растянуться до высоты внутренних контейнеров - затем установить фоновое изображение на внешней оболочке. Но следите за любыми горизонтальными полями на плавающих элементах на случай, если вы получите в IE «ошибку с плавающей точкой двойного поля».

Я могу придумать 2 варианта

  1. Используйте javascript, чтобы изменить размер меньшего столбца при загрузке страницы.
  2. Подделайте одинаковые высоты, установив background-color для колонки на контейнере <div/> вместо (<div class = "separator"/>) с repeat-y.

Я отказался от строго CSS и использовал небольшой jquery:

var leftcol = $("#leftcolumn");
var rightcol = $("#rightcolumn");
var leftcol_height = leftcol.height();
var rightcol_height = rightcol.height();

if (leftcol_height > rightcol_height)
    rightcol.height(leftcol_height);
else
    leftcol.height(rightcol_height);

Некоторые браузеры поддерживают таблицы CSS, поэтому вы можете создать такой макет, используя различные значения CSS display: table-*. Дополнительная информация о таблицах CSS содержится в этой статье (и в одноименной книге) Рэйчел Эндрю: Все, что вы знаете о CSS, неверно

Если вам нужен согласованный макет в старых браузерах, которые не поддерживают таблицы CSS, вам нужно сделать две вещи:

  1. Очистите элемент "строка таблицы" от его внутренних плавающих элементов.

    Самый простой способ сделать это - установить overflow: hidden, который заботится о большинстве браузеров, и zoom: 1, чтобы активировать свойство hasLayout в более старых версиях IE.

    Есть много других способов очистки поплавков, если этот подход вызывает нежелательные побочные эффекты, вы должны проверить вопрос какой метод 'clearfix' лучше всего и статью при наличии макета для других методов.

  2. Выровняйте высоту двух элементов "ячейки таблицы".

    Есть два способа подойти к этому. Либо вы можете создать видимость одинаковой высоты, установив фоновое изображение для элемента «строка таблицы» (техника искусственных колонн), либо вы можете сделать высоту столбцов совпадающей, задав каждому из них большое отступление и одинаково большое отрицательное поле.

    Искусственные столбцы - это более простой подход, который очень хорошо работает, когда ширина одного или обоих столбцов фиксирована. Другой метод лучше справляется с столбцами переменной ширины (на основе процентных или em-единиц), но может вызвать проблемы в некоторых браузерах, если вы напрямую ссылаетесь на контент в своих столбцах (например, если столбец содержит <div id = "foo"></div>, а вы связались с #foo)

Вот пример использования техники отступов / полей для балансировки высоты столбцов.

html, body {
  height: 100%;
}

.row {
  zoom: 1;          /* Clear internal floats in IE */
  overflow: hidden; /* Clear internal floats */
}

.right-column,
.left-column {
  padding-bottom: 1000em;  /* Balance the heights of the columns */
  margin-bottom: -1000em;  /*                                    */
}

.right-column {
  width: 20%;
  float: right;
}

.left-column {
  width: 79%;
  float: left;
}
<div class = "row">
  <div class = "right-column">Right column content</div>
  <div class = "left-column">Left column content</div>
</div>
<div class = "row">
  <div class = "right-column">Right column content</div>
  <div class = "left-column">Left column content</div>
</div>

Эта демонстрация Barcamp от Натали Даун также может быть полезна при выяснении того, как добавить дополнительные столбцы и хороший интервал и отступы: Столбцы одинаковой высоты и другие хитрости (также там я впервые узнал о трюке с полями / отступами для балансировки высоты столбцов)

Для этого достаточно просто использовать свойство css width.

Вот пример:

<style type = "text/css">;
    td {
        width:25%;
        height:100%;
        float:left;
    }
</style>

Добро пожаловать в Stack Overflow! Спасибо за ваш пост! Пожалуйста, не используйте подписи / слоганы в своих сообщениях. Ваш ящик пользователя считается вашей подписью, и вы можете использовать свой профиль для публикации любой информации о себе, которая вам нравится. FAQ по подписям / слоганам

Andrew Barber 25.03.2013 12:42

Это должно сработать для вас: установите высоту на 100% в CSS для элементов html и body. Затем вы можете отрегулировать высоту div в соответствии с вашими потребностями.

html {
    height: 100%;
}

body {
    height: 100%;
}
div {
    height: 100%; /* Set Div Height */
} 

Нет необходимости писать собственный css, есть библиотека под названием «Bootstrap css», вызывая ее в разделе заголовка HTML, мы можем добиться множества стилей. Вот пример: Если вы хотите разместить два столбца подряд, вы можете просто сделать следующее:

<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

<div class = "row">
  <div class = "col-md-6">Content</div>
  <div class = "col-md-6">Content</div>
</div>

Здесь md означает среднее устройство, вы можете использовать col-sm-6 для небольших устройств и col-xs-6 для сверхмалых устройств.

.rightfloat {
  color: red;
  background-color: #BBBBBB;
  float: right;
  width: 200px;
}

.left {
  font-size: 20pt;
}

.separator {
  clear: both;
  width: 100%;
  border-top: 1px solid black;
}
<div class = "separator">
  <div class = "rightfloat">
    Some really short content.
  </div>
  <div class = "left"> 
    Some really really really really really really
    really really really really big content
  </div>
</div>
<div class = "separator">
  <div class = "rightfloat">
    Some more short content.
  </div>
  <div class = "left"> 
    Some really really really really really really
    really really really really big content
  </div>
</div>

Другие вопросы по теме