Colspan все столбцы
Как я могу указать тег td
, должен охватывать все столбцы (когда точное количество столбцов в таблице будет переменным/трудным для определения при визуализации HTML)? w3schools упоминает, что вы можете использовать colspan="0"
, но он не говорит точно, какие браузеры поддерживают это значение (IE 6 находится в нашем списке поддержка).
Изменить: Похоже, что установка colspan
на значение, превышающее теоретическое количество столбцов, которые у вас могут быть, будет работать, но это не сработает, если у вас установлен формат таблицы. Есть ли недостатки в использовании автоматического макета с большим количеством для colspan
? Есть ли более правильный способ сделать это?
Ответы
Ответ 1
У меня есть IE 7.0, Firefox 3.0 и Chrome 1.0
Атрибут colspan = "0" в TD НЕ охватывает для всех TD в любом из указанных выше браузеров.
Возможно, не рекомендуется в качестве правильной практики разметки, но если вы дадите более высокое значение colspan, чем общее возможное нет. столбцов в других строках, тогда TD будет охватывать все столбцы.
Это НЕ работает, если свойство CSS табличного макета установлено на фиксированное.
Опять же, это не идеальное решение, но, похоже, работает в вышеупомянутых трех версиях браузера, когда свойство CSS табличного макета является автоматическим. Надеюсь, это поможет.
Ответ 2
Это хак и НЕ гарантирует, что ваша строка охватывает все столбцы
<ы > Просто используйте это:
colspan="100%"
Он работает на Firefox 3.6, IE 7 и Opera 11! (и я думаю, на других, я не мог попробовать)
С >
Внимание:
как упоминается в комментариях ниже, это на самом деле то же самое, что и colspan="100"
. Следовательно, это решение разбивается на таблицы с помощью css table-layout: fixed
или более 100 столбцов.
Ответ 3
Если вы хотите создать ячейку "title", которая охватывает все столбцы, как заголовок для вашей таблицы, вы можете использовать тег caption (http://www.w3schools.com/tags/tag_caption.asp/https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption) Этот элемент предназначен для этой цели. Он ведет себя как div, но не охватывает всю ширину родителя таблицы (например, div будет делать в том же положении (не пытайтесь это делать дома!)), Вместо этого он охватывает ширину Таблица. Есть некоторые проблемы с браузером с границами и такие (для меня это приемлемо). В любом случае, вы можете заставить его выглядеть как ячейка, которая охватывает все столбцы. Внутри вы можете создавать строки, добавляя div-элементы. Я не уверен, если вы можете вставить его между tr-элементами, но это будет хак, я думаю (так не рекомендуется). Другим вариантом будет беспорядок с плавающими div, но это yuck!
Do
<table>
<caption style="gimme some style!"><!-- Title of table --></caption>
<thead><!-- ... --></thead>
<tbody><!-- ... --></tbody>
</table>
Не
<div>
<div style="float: left;/* extra styling /*"><!-- Title of table --></div>
<table>
<thead><!-- ... --></thead>
<tbody><!-- ... --></tbody>
</table>
<div style="clear: both"></div>
</div>
Ответ 4
Для IE 6 вам нужно будет сопоставить colspan с количеством столбцов в вашей таблице. Если у вас 5 столбцов, вам нужно: colspan="5"
.
Причина в том, что IE обрабатывает colspans по-разному, он использует спецификацию HTML 3.2:
IE реализует определение HTML 3.2, он устанавливает colspan=0
как colspan=1
.
Ошибка хорошо документирована.
Ответ 5
Если вы используете jQuery (или не возражаете добавить его), это сделает работу лучше, чем любой из этих хаков.
function getMaxColCount($table) {
var maxCol = 0;
$table.find('tr').each(function(i,o) {
var colCount = 0;
$(o).find('td:not(.maxcols),th:not(.maxcols)').each(function(i,oo) {
var cc = Number($(oo).attr('colspan'));
if (cc) {
colCount += cc;
} else {
colCount += 1;
}
});
if(colCount > maxCol) { maxCol = colCount };
});
return maxCol;
}
Чтобы облегчить реализацию, я украшаю любой td/th, который мне нужно настроить с помощью класса, такого как "maxCol", тогда я могу сделать следующее:
$('td.maxcols, th.maxcols').each(function(i,o) {
$t = $($(o).parents('table')[0]); $(o).attr('colspan', getMaxColCount($t));
});
Если вы найдете реализацию, для которой это не сработает, не взламывайте ответ, не объясните в комментариях, и я обновлю его, если он будет закрыт.
Ответ 6
Другое работающее, но уродливое решение: colspan="100"
, где 100 - это значение, большее, чем общие столбцы, вам нужно colspan
.
В соответствии с W3C опция colspan="0"
действительна только с тегом COLGROUP
.
Ответ 7
Вы можете определить количество столбцов в таблице с чем-то вроде этого:
var firstRow = tableBody.getElementsByTagName('tr')[0];
var numcols = firstRow.getElementsByTagName('td').length;
И теперь используйте этот столбец в качестве диапазона столбцов. Это предполагает, что у вас есть ссылка на элемент body для таблицы, но это должно быть просто.
Ответ 8
Просто хочу добавить свой опыт и ответить на это.
Примечание. Он работает только тогда, когда у вас есть предварительно определенные table
и tr
с th
s, но загружаются в ваши строки (например, через AJAX) динамически.
В этом случае вы можете подсчитать количество th
в первой строке заголовка и использовать это для охвата всего столбца.
Это может потребоваться, если вы хотите передать сообщение, когда результаты не найдены.
Что-то вроде этого в jQuery, где table
- ваша таблица ввода:
var trs = $(table).find("tr");
var numberColumns = 999;
if (trs.length === 1) {
//Assume having one row means that there is a header
var headerColumns = $(trs).find("th").length;
if (headerColumns > 0) {
numberColumns = headerColumns;
}
}
Ответ 9
В соответствии со спецификацией colspan="0"
должна получиться ширина таблицы td.
Однако это верно только в том случае, если таблица имеет ширину! Таблица может содержать строки разной ширины. Таким образом, единственный случай, когда средство просмотра знает ширину таблицы, если вы задаете colgroup! В противном случае результат colspan = "0" является неопределяемым...
http://www.w3.org/TR/REC-html40/struct/tables.html#adef-colspan
Я не могу проверить его в старых браузерах, но это часть спецификации с 4.0...
Ответ 10
У меня была такая же проблема - как я решил свою проблему.. Поместите любые элементы управления, которые вы хотите разбить за один td
Ответ 11
Может быть, я прямой мыслитель, но я немного озадачен, разве вы не знаете номер столбца вашей таблицы?
Кстати, IE6 не соблюдает colspan = "0", с или без определенной группы.
Я также попытался использовать thead и th для генерации групп столбцов, но браузер не распознает форму colspan = "0".
Я пробовал Firefox 3.0 на windows и linux, и он работает только со строгим doctype.
Вы можете проверить тест на нескольких баусерах на
http://browsershots.org/http://hsivonen.iki.fi/test/wa10/tables/colspan-0.html
Я нашел тестовую страницу здесь http://hsivonen.iki.fi/test/wa10/tables/colspan-0.html
Изменить: скопируйте и вставьте ссылку, форматирование не будет принимать части двойного протокола в ссылке (или я не настолько умный, чтобы правильно ее форматировать).
Ответ 12
попробуйте использовать "colSpan" вместо "colspan". IE любит версию camelBack...