Подтвердить что ты не робот

CSS Столичное выравнивание без использования таблиц? (CSS RelativeLayout)

Где бы я ни находился в Интернете, я постоянно избиваю меня, что я не должен использовать Таблицы. К сожалению, я один из немногих программистов, которые достаточно упрямы, чтобы их использовать. Я откровенно считаю, что функции выравнивания и компоновки CSS неадекватно сильны для меня, холодная индейка, перестают использовать таблицы. Когда мои личные особенности программиста отложены, я хотел бы попытаться атаковать одно из моих основных недовольств системой CSS:

Скажем, я хочу иметь такой макет:

+---+---+
| A | B |
+---+---+
| C | D |
+---+---+

В приведенном выше примере я хотел бы, чтобы ширина A и C была одинаковой, а ширины B и D оставались неизменными.

Мне также хотелось бы, чтобы высоты A и B оставались заблокированными вместе, и я хотел бы, чтобы высоты C и D оставались одинаковыми друг с другом.

Чтобы уточнить, если какой-либо элемент в столбце становится шире, я бы хотел, чтобы все элементы в этом столбце расширялись. И если какой-либо элемент в строке становится выше, я снова хочу, чтобы все элементы в той же самой строке также расширялись.

То, что я только что описал, - это точная функциональность нашего старого друга, таблицы. На мой взгляд, таблицы очень полезны для таких макетов! Если бы я попытался что-то похожее на использование макетов CSS, я мог бы получить что-то вроде этого:

+-------+---+
|   A   | B |
+---*---*---+
| C |   D   |
+---+-------+

Который бы не стал тем макетом, который я ищу. (A и C создают неровные столбцы, а не идеальные гладкие столбцы, как я бы предпочел)

Чтобы просто поставить мою проблему, я мог бы действительно использовать способ, используя макеты CSS (и НЕ предопределенные ширины или высоты), выравнивая положение края одного поля CSS, до положения края другого блока CSS, Если CSS поддерживал эту простую функцию, я мог бы мгновенно отпустить таблицы навсегда и создать макеты помимо возможностей таблиц! Хорошим, но бесполезным примером такой мощности были бы два несвязанных коробки на противоположных сторонах таблицы, динамически разделяющие ровно одну и ту же высоту и вертикальное положение друг с другом.

Но, к сожалению, в моих поисковых запросах по всему Интернету самое продвинутое выравнивание, которое я нашел до сих пор, это выравнивание по центру, слева и справа. Все типы выравнивания, которые не относятся к ДРУГИМ элементам, делая их бесполезными.

Все, что я хочу, это всего лишь способ выровнять HTML-элементы с ДРУГИМИ элементами HTML без необходимости использовать таблицы!

ИЗМЕНИТЬ

При выборе тегов для этого вопроса я натолкнулся на описание, которое в значительной степени суммирует все:

Relativelayout: макет, где позиции детей могут быть описанные относительно друг друга или родителя.

Есть ли RelativeLayout CSS? Или я использую таблицы, когда хочу это сделать?

Я приму ответ, который будет ближе всего к моей желаемой функциональности, не используя предопределенные ширины или высоты (включая ответ "Ничего подобного не существует", если никто другой не обеспечивает что-то лучшее).

4b9b3361

Ответ 1

Можно отображать элементы в виде таблиц, которые не являются семантическими таблицами, только с использованием CSS. Используя свойство display, вы можете имитировать таблицы, в то время как у вас есть divs в вашей разметке. Проверьте эту статью.

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

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

CSS

div.c
{
    width: 100%;
}

div.c>div:nth-child(2n-1)
{
    width: 25%;
    float: left;
    background: blue;
}

div.c>div:nth-child(2n)
{
    width: 75%;
    float: left;
    background: yellow;
}

Вот скрипка: http://jsfiddle.net/kdani3/DbRuV/

Более сложный пример: http://jsfiddle.net/kdani3/DbRuV/1/

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

Кроме того, я действительно рекомендую вам взглянуть на рамки сетки CSS, например Twitter Bootstrap. Это определенно стоит посмотреть.

Ответ 2

Я думаю, что для использования чистого CSS без Width и без использования table вы можете использовать Flex Layout

Это код

HTML

<section class="flexrow">
    <div class='item'>1asdf</div>
    <div class='item'>2</div>
</section>
<section class="flexrow">
    <div class='item'>1</div>
    <div class='item'>2</div>
</section>

CSS

.flexrow {
    display: -webkit-flex;
    display: -moz-flex;
    display: -ms-flex;
    display: -o-flex;
    -webkit-justify-content: space-between;
    -moz-justify-content: space-between;
    -ms-justify-content: space-between;
    -o-justify-content: space-between;
    margin-bottom: 10px;
    -webkit-align-items: center;
    -moz-align-items: center;
    -ms-align-items: center;
    -o-align-items: center;
    -webkit-flex: none;
    -moz-flex: none;
    -ms-flex: none;
    -o-flex: none;
}
.item {
    -webkit-flex: 1;
    -moz-flex: 1;
    -ms-flex: 1;
    -o-flex: 1;
    margin: auto 10px;
    border-radius: 5px;
    border:1px solid black;
}

Вот JsFiddle