Ответ 1
Как использовать inline-block
с фиксированной таблицей width
... или используя %
примерно 45%
of width
для ваших элементов td
, поэтому вам не нужно будет определять width
для table
Здесь просто поворачиваю td
в display: inline-block;
и из-за фиксированной таблицы width
они будут вынуждены переноситься на следующую строку.
Также я использую свойство word-wrap: break-word;
, так что нераспределенные строки вынуждены ломаться.
table {
width: 120px;
}
table tr td {
width: 50px;
word-wrap: break-word;
}
table tr td {
display: inline-block;
margin-top: 2px;
}
Вы можете использовать %
на основе width
, так что вам не нужно заботиться о ширинах ячеек....
Возможно, вам понадобится vertical-align: top;
вместе с min-height
, если ячейка пуста в вашем table
table tr td {
display: inline-block;
margin-top: 2px;
vertical-align: top;
min-height: 20px;
}
Демо (требуется только в том случае, если ячейка пуста)
Обратите внимание, что inline-block
вызовет некоторые проблемы с смещением 4px
, в этом случае просто назначьте font-size: 0;
на table
и снова установите font-size
назад для вашего элемента td
, таким образом вы получите согласованность в полях ячеек.
Предупреждение: я никогда бы не рекомендовал делать такие вещи, поэтому сохраните это как ваш последний приоритет. Если у вас есть JavaScript-контроль, чем рассмотрите возможность добавления
tr
вокругtd
Отныне игнорируйте, если вы не можете использовать jQuery, предположим, что у вас есть библиотека jQuery, вы можете просто добавить фрагмент к этому файлу JS....
(Am добавляет class
здесь, чтобы однозначно идентифицировать элемент, class
также можно добавить, используя .addClass()
, определив некоторый ближайший селектор CSS), поэтому не нужно изменять здесь HTML.
$('table.wrap_trs tr').unwrap(); //Remove default pre-generated tr
var cells = $('table.wrap_trs tr td');
for (var i = 0; i < cells.length; i += 2) {
cells.slice(i, i + 2).wrapAll('<tr></tr>'); //Wrapping the tds with tr
}