IE7 делает мою жизнь несчастной! Получение пробелов между столбцами таблицы html (w / colspan) с помощью CSS-переключателя
скопируйте / вставьте этот фрагмент кода html и попробуйте его в IE7. При переключении скрытых столбцов он оставляет зазор между столбцами. В Firefox он отлично работает, столбцы касаются при минимизации. Еще не пробовал IE8, было бы любопытно услышать, как он там работает. Есть идеи? Я пробовал кучу вещей в CSS, таких как table-layout:исправлено, но не повезло.
Примечание: не ищет другой метод переключения, потому что таблица, с которой я действительно имею дело, имеет ширину 50 + столбцов и 4000 + строк, поэтому методы цикла / jquery слишком медленные.
вот код - если кто-то может повторно опубликовать его рабочую версию, я немедленно дам им чек и навсегда останусь у вас в долгу!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script>
function toggle() {
var tableobj = document.getElementById("mytable");
if (tableobj.className == "") {
tableobj.className = "hide1 hide2";
}
else {
tableobj.className = "";
}
}
</script>
<style>
table { border-collapse: collapse; }
td, th { border: 1px solid silver; }
.hide1 .col1 { display: none; }
.hide2 .col2 { display: none; }
</style>
</head>
<body>
<input type="button" value="toggle" onclick="toggle();" />
<table id="mytable">
<tr>
<th>A</th>
<th colspan="2">B</th>
<th colspan="2" class="col1">B1</th>
<th colspan="2">C</th>
<th colspan="2" class="col2">C1</th>
</tr>
<tr>
<td>123</td>
<td>456</td>
<td>789</td>
<td class="col1">123</td>
<td class="col1">456</td>
<td>789</td>
<td>123</td>
<td class="col2">456</td>
<td class="col2">789</td>
</tr>
</table>
</body>
</html>
3 ответов
вот решение, которое использует JQuery для переключения заголовков столбцов (см. Мой другой ответ для обоснования). Помимо материала JQuery, остальная часть html-страницы одинакова.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>
<script>
function toggle() {
var tableobj = document.getElementById("mytable");
if (tableobj.className == "") {
tableobj.className = "hide1 hide2";
$('th[class^=col]').hide();
}
else {
tableobj.className = "";
$('th[class^=col]').show();
}
}
</script>
<style>
table { border-collapse: collapse; }
td, th { border: 1px solid silver; }
.hide1 .col1 { display: none; }
.hide2 .col2 { display: none; }
</style>
</head>
<body>
<input type="button" value="toggle" onclick="toggle();" />
<table id="mytable">
<tr>
<th>A</th>
<th colspan="2">B</th>
<th colspan="2" class="col1">B1</th>
<th colspan="2">C</th>
<th colspan="2" class="col2">C1</th>
</tr>
<tr>
<td>123</td>
<td>456</td>
<td>789</td>
<td class="col1">123</td>
<td class="col1">456</td>
<td>789</td>
<td>123</td>
<td class="col2">456</td>
<td class="col2">789</td>
</tr>
</table>
</body>
</html>
пока нет объяснения того, почему IE делает это, но вот что происходит, и вот как это обойти.
1) Если вы установите класс таблицы в "hide1 hide2" в html, то таблица будет отображаться правильно (без пробелов). Поэтому проблема, похоже, связана с тем, как IE обрабатывает изменения в таблице через стили.
2) зазор между столбцами-это ширина заголовка охватываемого столбца.
3) Если вы исключаете охват столбца (и дополнительные столбцы), тогда все работает нормально.
Я нашел два способа решения. Первый-использовать код для переключения дисплея, но вы отклонили этот вариант.
альтернативой является устранение colspans. Есть множество способов сделать это. Один из них заключается в преобразовании группы ячеек во встроенную таблицу (то есть вместо двух элементов TD у вас будет один TD, который содержит таблицу с одним TR и двумя TDs). Или вы можете использовать пяди для уборщика код (с, скажем, границей-правом для всех ячеек, кроме последней).
попробуйте это объявление doctype:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">