2015-02-24 2 views
1

Так что у меня есть следующий HTML:HTML Таблица Форматирование: 2 Объединение столбцов ячейки путает ширину столбца

<table> 
    <tr> 
    <th>Heading:</th><td>text</td> 
    </tr> 
    <tr> 
    <th>Heading 2:</th><td>text</td> 
    </tr> 
    <tr> 
    <th colspan="2">Really long heading:</th> 
    </tr> 
    <tr> 
    <td></td><td>text</td> 
    </tr> 
</table> 

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

td:last-child { 
    width: 100%; 
} 

th, td { 
    white-space:nowrap; 
} 

Это делает так, чтобы в правой колонке было больше свободного места. И то, что у меня есть, работает, хотя заголовок «действительно длинный» длиннее/шире заголовка заголовка. Однако, когда я добавляю несколько слов к действительно длинному заголовку (но не делая его достаточно длинным, чтобы увеличить ширину всей таблицы), после определенной точки ширина левого столбца начинает увеличиваться с длиной длинного заголовок, уменьшая ширину правого столбца. Что происходит?

+0

Можете ли вы привести пример, чтобы объяснить это? Я сделал образец здесь http://jsfiddle.net/druqcg3t/ (также добавил границы, чтобы увидеть его ясно) – Stickers

+0

Ага, я воспроизвел то, что я вижу, добавив в заголовки «white-space: nowrap». Вот он: http://jsfiddle.net/s60twrrL/ Измените длину длинного заголовка, чтобы увидеть, как он влияет на ширину столбца. – Reyan

+0

Спасибо, и я добавил возможный ответ ниже. – Stickers

ответ

1

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

.col-left { 
 
    width: 20%; 
 
} 
 
.col-right { 
 
    width: 80%; 
 
}
<table> 
 
    <colgroup> 
 
    <col class="col-left"> 
 
    <col class="col-right"> 
 
    </colgroup> 
 
    <tr> 
 
    <th>Heading:</th><td>text</td> 
 
    </tr> 
 
    <tr> 
 
    <td colspan="2">Really long heading:</td> 
 
    </tr> 
 
    <tr> 
 
    <th>lorem ispum dolores hello</th><td>text</td> 
 
    </tr> 
 
</table>

Других уловки, чтобы установить ячейку на минимуме и, очевидно, еще одна клетки взять остальную часть ширины, которые, чтобы установить первый один в 1px:

table { 
 
    width: 200px; 
 
} 
 
th, td { 
 
    border: 1px solid #000; 
 
} 
 
th { 
 
    width:1px; 
 
}
<table> 
 
    <tr> 
 
     <th>hello</th> 
 
     <td>world</td> 
 
    </tr> 
 
    <tr> 
 
     <td colspan="2">hi</td> 
 
    </tr> 
 
    <tr> 
 
     <td></td> 
 
     <td>text</td> 
 
    </tr> 
 
</table>

+0

Установка ширины последнего столбца на 100% является стандартным способом, который я слышал о том, чтобы последний столбец занимал дополнительное пространство (и делал все остальные столбцы минимальной ширины для своего содержимого). Установка столбцов в явную ширину не является одинаковой. Кроме того, как я уже говорил, установка большей ширины столбца на 100% работает для меня в большинстве ситуаций, за исключением этого конкретного – Reyan

+0

Ах, если установить ширину левого столбца в 1px, похоже, работает - она ​​будет работать только для 2 столбцов , но в этом случае это все, что у меня есть. Я не понимаю, почему, но это действительно работает. спасибо – Reyan

Смежные вопросы