Почему <td> высота не равна <img> высоте внутри него, когда DOCTYPE является XHTML 1.0 Strict?
-
11-09-2019 - |
Вопрос
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
</head>
<body>
<table width="100%" cellspacing="0" cellpadding="0">
<tr>
<td align="right" colspan="5">
<span class="validationInline">*</span>
<span class="hint">Required fields</span>
</td>
</tr>
<tr>
<td colspan="5" background="http://media.monster.com.hk/bgr_8.gif">
<img src="/static/cleardot.gif" height="1" width="1" />
</td>
</tr>
</table>
</body>
</html>
Можете проверить это здесь:http://maishudi.com/tt2.html
Я знал , что это вызвано DOCTYPE , потому что удаление этой части сделает ее нормальной:
Так что не так?Как я могу заставить это работать с DOCTYPE ?
Решение
Примечание:вероятно, это зависит от браузера.
Размер элемента уровня блока (td, div и т.д.), если он не указан, будет таким большим, какой необходим, в соответствии с пространством, занимаемым его содержимым.Если указано, он попытается соответствующим образом расшириться, за исключением если контент больше, то в этом случае он будет расширяться по мере необходимости.
В вашем примере ячейка содержит один символ (неразрывный пробел), который занимает размер одной строки.Следовательно, элемент блока должен иметь высоту не менее 1 строки;он не может принять меньший размер.Вот почему ваше объявление о росте было проигнорировано.
Возможно, вы захотите использовать этот стиль:
line-height: 1px;
При этом высота строки устанавливается равной 1 пикселю.Высота строки не является элементом, поэтому приведенное выше правило не применяется.
Другие советы
Добавьте блок стиля с помощью этого правила
td img {display: block;}
и увидеть https://developer.mozilla.org/en/Images ,_таблицы,_и_мистерические_гапсы для получения полного объяснения.
причина в том, что background не является стандартным атрибутом для элементов TD.Вместо этого используйте:
style="background: url(/path/to/image.png);"
Что касается вашего изображения в 1 пиксель, я предполагаю, что это просто для отображения ячейки таблицы?Если это так, то это не самый рекомендуемый способ сделать это.Вы можете либо сделать:
table { empty-cells: show; }
в CSS, хотя я не думаю, что IE6 поддерживает это.Более совместимый со стандартами способ заключается в использовании неразрывного пробела:
<td> </td>