HTML таблицы-охват ячеек
Если у меня есть таблица, количество столбцов которой не может быть определено во время создания таблицы, и строки которой иногда не могут содержать достаточно данных, чтобы заполнить каждый столбец, есть ли способ иметь последнюю ячейку в каждой строке автоматического размера?
Я бы предпочел не использовать colspan для последней ячейки в каждой строке, потому что опять же, максимальное число столбцов не предсказуемо, когда таблица рисуется.
Например:
-----------------------------------
NEW ROW | FOO | BAR | <- last cell should span the length of the table
-----------------------------------
NEW ROW | FOO | BAR | TEST | BLAH | <- no spanning needed, as it contains the most cols
-----------------------------------
NEW ROW | FOO | BAR | TEST | <- last cell should span the length of the table
-----------------------------------
2 ответа:
Вы можете создать отдельную таблицу для каждой строки и использовать CSS, чтобы задать ширину столбцов для управления макетом. В этом случае ширина последней ячейки будет иметь значение "auto"
В качестве альтернативы, если вы знаете максимальное число столбцов, которые вы можете иметь (или выбрать число, превышающее число столбцов, которые вы когда-либо будете отображать), вы можете установить colspan на последней ячейке равным этому числу минус количество ячеек, созданных для этой строки.
Например, если вы выберете 100 как максимальное количество ячеек, которое у вас когда-либо будет, ваш приведенный выше код будет выглядеть так...
<TABLE border="1"> <TR><TD>NEW ROW</TD><TD>FOO</TD><TD COLSPAN="97">BAR</TD></TR> <TR><TD>NEW ROW</TD><TD>FOO</TD><TD>BAR</TD><TD>TEST</TD><TD COLSPAN="95">BLAH</TD></TR> <TR><TD>NEW ROW</TD><TD>FOO</TD><TD>BAR</TD><TD COLSPAN="96">TEST</TD></TR> </TABLE>
Если вы имеете дело с записями БД, которые могут быть пустыми или чем-то еще, этот псевдокод поможет вам начать:
foreach ($query as $row) { $max_elements = 5; //per your example $number_of_elements = count($row); $colspan = $max_elements - $number_of_elements; $i = 0; while ($i <= $number_of_elements-2) { echo "<td>".$row['$i']."</td>"; $i++; } echo "<td colspan='$colspan'>".$row['$number_of_elements-1']."</td>"; }
В этом непроверенном/непроверенном PHP предполагается подсчитать количество элементов для каждой строки и узнать, сколько их осталось (на основе максимального числа, например 5 в вашем примере). Затем отзовите каждый элемент запроса, а для последнего добавьте динамически сгенерированный colspan #.
Отладка оставлено в качестве упражнения для читателя.