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 2

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 #.

Отладка оставлено в качестве упражнения для читателя.