У меня есть табличная структура. Это выглядит примерно так:Смежный элемент в ответном макете
┌───────────────────────┬───────────┬────────┐
│Big column |Info 1 |Info 2 |
╞═══════════════════════╪═══════════╪════════╡
┊...... ┊... ┊... ┊
└───────────────────────┴───────────┴────────┘
Когда окно браузера слишком мал, чтобы поместиться все три колонки, я хочу, чтобы изменить это:
┌───────────────────────┐
│Big column |
├──────────────┬────────┤
│Info 1 |Info 2 |
╞══════════════╧════════╡
┊...... ┊
├──────────────┬────────┤
┊... ┊... ┊
└──────────────┴────────┘
Следует отметить, что «Info 2» является более или менее фиксированная с заданной максимальной шириной (130 пикселей)
Общая компоновка достигается с использованием display: table/table-row/table-cell
в первом случае, но единственное решение, которое я нашел для второго случая, выглядит хакерским.
.cell:first-child {
display: block;
}
.cell:nth-child(2) {
display: inline-block;
width: calc(100% - 130px);
box-sizing: border-box;
}
.cell:last-child {
display: inline-block;
width: 130px;
box-sizing: border-box;
}
... Да. Хак.
Есть ли способ достичь этого, не прибегая к использованию calc()
? Я пробовал float
, но либо ячейка «Info 1» обрушивается на минимальную ширину, чтобы соответствовать ее содержимому, либо ячейка «Info 2» опускается на одну строку ниже, ни одна из которых не работает.
EDIT: HTML, как и требовалось, тривиальна:
<div id="bigtable">
<div class="row">
<div class="cell">Big column</div>
<div class="cell">Info 1</div>
<div class="cell">Info 2</div>
</div>
<!-- ... -->
</div>
Вы готовы использовать около Flexbox или 'дисплея: contents'? – Oriol
@Oriol Я действительно использую flexbox в другом месте этого проекта, но он должен иметь изящный откат для браузеров, которые его не поддерживают. –