Колонки (div и др.блоки) одинаковой высоты | CSS

Два блока одинаковой высоты

Будем верстать на HTML5 под резиновый сайт, поэтому вместо div я использовала main, article и aside

<article>

<aside>
<style>
main {
  display: table;
  table-layout:fixed;
  width: 100%;
  border-spacing: 20px;  /* расстояние между ячейками */
  background: #ccc;
}
article, aside {
  display: table-cell;
  background: rgb(89, 89, 89);
}
aside {
  width: 20%;  /* может быть и в px */
}
</style>

<main>
<article></article>
<aside></aside>
</main>

Как сделать в таблице отступы только между ячейками

Жаль, border-spacing (там пример) устанавливает отступ не только между ячейками, но и от краёв таблицы до ячеек. Поэтому для того, чтобы увеличить расстояние между колонками, приходится подвинуть дочерние элементы с помощью transform: translate.

<article>

<aside>
<style>
main {
  display: table;
  table-layout:fixed;
  width: 100%;
  border-spacing: 20px 0;  /* расстояние будет 20*3=60px, может быть и в % */
  background: #ccc;
}
main > :first-child {
  transform: translateX(-20px);
}
main > :last-child {
  transform: translateX(20px);
}
article, aside {
  display: table-cell;
  background: rgb(89, 89, 89);
}
aside {
  width: 20%;
}
</style>

<main>
<article></article>
<aside></aside>
</main>

Три колонки равной высоты, но разной ширины

Стиль CSS будет тот же. А HTML можно варьировать. Можно задать каждой колонке свою ширину и отступ как в процентах, так и в пикселях.

<article>

<aside>
<aside>
<main>
<article></article>
<aside></aside>
<aside></aside>
</main>
<aside>
<article>

<aside>
<main>
<aside></aside>
<article></article>
<aside></aside>
</main>

Хм, сейчас запутаю вас окончательно, нужно было просто взять div. HTML выше подходит для: Структура блога: вид статьи Но не для структура блога Так выглядит Главная страница или страница тегов. Тут вместо article нужно использовать section, у которого будет несколько потомков article. То есть статья — это article. Несколько статей объединяются в section.

в f t
наверх ↑

12 комментариев:

Igor Zeleny
Спасибо!!!
NMitra
Пожалуйста!
Igor Zeleny
Проверил в Opera не работает, не понимает transform: translateX даже с префиксом -o-
NMitra
А с -webkit- ? Сейчас Опера перешла на движок Хрома. После этого я Оперу снесла. Здесь примеры поддерживаются http://shpargalkablog.ru/2011/09/transform-css.html ?
Igor Zeleny
Переустановил Оперу, все ОК. Это у меня какая то старая версия была.
Еще раз спасибо :)
Анонимный
Hi there very colol website!! Man .. Beautiful ..
Amazing .. I will bookmark your web site and take the feeds also?
I am satisfied to search out a lot of helpful info right here within the publish, we'd like develop more strategies inn this regard, thanks foor sharing.
. . . . .
NMitra
Не поняла, что значит "we'd like develop more strategies inn this regard, thanks foor sharing".
Юрий
Наташа, спасибо огромное за инфу. Уже давно искал способ реализации такой функции. К сожалению, не понял двух моментов.

Зачем во втором примере ("Как сделать в таблице отступы только между ячейками"):

1) для main прописано border-spacing (вы задаете расстояние между границами ячеек)?

2) использованы псевдо-селекторы :first-child и :last-child?

Я закомментировал эти функции и пробовал прописывать значения transform: translateX(пиксели) поочередно напрямую для article и aside. Эффект получился тот же самый... В чем секрет?
Юрий
Наташа, с border-spacing уже разобрался сам. Без этой функции, действительно, не обойтись. Сделал три колонки и задал двум из них transform: translateX (крайней левой и крайней правой). В итоге они отодвинулись от центральной колонки, но, в то же время, вышли за границы обертки... Фактически именно при помощи border-spacing мы задаем расстояние между колонками по горизонтали, а затем посредством transform: translateX удалаяет крайние отступы справа и слева.
А вот фокуса с :first-child и :last-child так и не понял?..
NMitra
first-child - Это псевдоклассы ( http://shpargalkablog.ru/2012/02/psevdoklassy-css.html ), их, конечно, можно заменить на другие селекторы, классы или id, например.
Алёна
Большое спасибо за чистый и красивый вариант!
NMitra
Благодарю за комментарий!