Ошибка ширины ячейки таблицы Internet Explorer 8 с набором colspan
У меня есть следующая страница html:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>A title</title>
</head>
<body>
<table style="width: 700px; border: solid 1px green">
<tr>
<td style="border: solid 1px red;" colspan="2">A cell with a bunch of text. The amount of text here increases the 'x' cell.<td>
</tr>
<tr>
<td style="width: 100px; border: solid 1px purple;" >x</td>
<td style="border: solid 1px blue;">Some sample text</td>
</tr>
</table>
</body>
</html>
Во всех браузерах, кроме Internet Explorer (8), ячейка с содержимым "x" имеет ширину 100 пикселей, а соседняя ячейка заполняет остальную часть таблицы. В Internet explorer 8 он немного больше, и размер варьируется в зависимости от того, сколько текста находится в ячейке с набором colspan = "2". Есть ли исправление для этой ошибки в IE?
Ответы
Ответ 1
Вот мой результат для неудачной ширины td
в IE8:
<table style="width: 100%;" border="1">
<tr>
<td style="width:auto;">td1</td>
<td style="width:15px;">td2</td>
<td style="width:20px;">td3</td>
</tr>
<tr>
<td colspan="3" style="width:auto;">ds fasdf asdf asdf asdf asfd asf asdf asdf adf sadf asdf asdf asdf asdf asdf asfasdf dasf sdaf asd</td>
</tr>
</table>
<!-- IE8 HACK 100% WIDTH -->
<table style="width: 100%;" border="1">
<tr>
<td style="width:100%;">td1</td>
<td style="width:15px;">td2</td>
<td style="width:20px;">td3</td>
</tr>
<tr>
<td colspan="3" style="width:auto;">ds fasdf asdf asdf asdf asfd asf asdf asdf adf sadf asdf asdf asdf asdf asdf asfasdf dasf sdaf asd</td>
</tr>
</table>
Ответ 2
Хорошо, это чистое безумие. Ответ Ray работал для первоначального теста, но не для моего примера реальной жизни, что привело меня к созданию второго тестового примера с исправлением Ray:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>title</title>
</head>
<body>
<form>
<table style="width: 700px;">
<tr>
<td colspan="2">Here is some really long text. For some reason, in internet explorer 8, the long text in a table cell that spans two columns above some other cells affects the cell below it. I have no idea why. Also, if the contents of the first cell below this one is some text rather than a checkbox, then the effect is not as dramatic, though it still there.</td>
</tr>
<tr>
<td style="width:100px; background: green;"><input type="checkbox" value="1" /></td>
<td style="width:600px;">blah</td>
</tr>
</table>
<table style="width: 700px;" border="0">
<tr>
<td colspan="2">Some short text</td>
</tr>
<tr>
<td style="width: 100px; background: red;"><input type="checkbox" value="1" /></td>
<td style="width: 600px;">blah</td>
</tr>
</table>
</form>
</body>
</html>
По какой-то причине наличие входных элементов в первой ячейке таблицы делает решение Ray совсем неработоспособным.
Решение, которое в конечном итоге разрешило реальный мир, мы пытались исправить необходимое добавление "таблицы-макета: исправлено" к таблицам, а в первой строке таблицы есть пустые ячейки с установленной шириной. Здесь измененная версия предыдущего примера с исправлением, который я только что описал:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>title</title>
</head>
<body>
<form>
<table style="table-layout: fixed; width: 700px;">
<tr>
<td style="width: 100px;"></td>
<td style="width: 600px;"></td>
</tr>
<tr>
<td colspan="2">Here is some really long text. For some reason, in internet explorer 8, the long text in a table cell that spans two columns above some other cells affects the cell below it. I have no idea why. Also, if the contents of the first cell below this one is some text rather than a checkbox, then the effect is not as dramatic, though it still there.</td>
</tr>
<tr>
<td style="background: green;"><input type="checkbox" value="1" /></td>
<td>blah</td>
</tr>
</table>
<table style="width: 700px; table-layout: fixed;" border="0">
<tr>
<td style="width: 100px;"></td>
<td style="width: 600px;"></td>
</tr>
<tr>
<td colspan="2">Some short text</td>
</tr>
<tr>
<td style="background: red;"><input type="checkbox" value="1" /></td>
<td>blah</td>
</tr>
</table>
</form>
</body>
</html>
Действительно Internet Explorer??? На самом деле?
Ответ 3
Ответ Люка с "табличным макетом: исправлено" - это то, что в итоге я сделал для меня. Без "table-layout: fixed", IE продолжал игнорировать объявления явной ширины для ячеек non-colspan. С его помощью все работало, хотя и явным образом рассказывало всем ячейкам не-colspan, что их ширина вместо того, чтобы просто течь влево, как и любой другой браузер на планете.
Итоговый результат:
Люк: +1
IE: Сосать.
Ответ 4
Используйте функцию setAttribute
. Атрибут Name = "colSpan"
. Это также работает на IE 8 и Firefox.
Пример:
cell.setAttribute("colSpan", 9);
Ответ 5
Поскольку вы знаете размер таблицы (700), вы можете обойти ошибку, установив ширину обеих ячеек во второй строке. Когда вторая ячейка установлена в 600 пикселей, таблица ведет себя.
Но он все еще сосет.
Редактировать - вот еще один способ решения sucky - добавьте пустое изображение в первую ячейку, чтобы заставить размер, затем добавьте ширину 100% к ячейке xsecond:
<tr>
<td style="width: 100px; border: solid 1px purple;" >x<img src="\images\blank.gif" width="100" height="1" /></td>
<td style="border: solid 1px blue;width:100%;">Some sample text</td>
</tr>
Ответ 6
Если вы установите ширину первого td (с colspan = "2" ) равным 100px, вы получите нужное поведение, по крайней мере, для этого тестового примера.
Насколько я могу судить, поведение IE8 корректно в соответствии со спецификацией CSS 2.1: http://www.w3.org/TR/CSS2/tables.html#width-layout раздел 17.5.2.2 Автоматическая таблица раскладка. Шаг 3 выглядит подозрительно.
Однако это, вероятно, ошибка спецификации, поскольку все это кажется очень неопределенным в отношении многих деталей. Алгоритм в CSS 3 выглядит более тщательно.
EDIT: Это также работает со вторым тестовым случаем.