Хром и фиксированная ширина на div (или другие теги)
У меня есть HTML, который выглядит так:
<div style="{ display:inline; width: 80px}">fig</div>vitamin c<br>
<div style="{ display:inline; width: 80px}">apple</div>vitamin a<br>
<div style="{ display:inline; width: 80px}">coconut</div>vitamin <br>
в IE.8 это показано как
фиговый витамин яблочный витамин витамин кокоса
и все "витамины" хорошо выровнены. в Chrome этот пробел не создается, и поэтому он не очень хорошо отображается.
figvitamin applevitamin coconutvitamin
Вопрос в том, является ли это проблемой / ошибкой в Chrome или потому, что HTML-код неверен, а ie8 (в данном случае) просто угадает мои намерения?
2 ответа
Chrome и Firefox верны. Ширина не является допустимым свойством стиля для встроенных элементов. У вас есть несколько вариантов:
Встроенные блоки
Вы можете сделать это:
<span>fig</span>vitamin<br>
<span>apple</span>vitamin<br>
<span>coconut</span>vitamin
с:
span { display: inline-block; width: 80px; }
Вы заметите, я использовал <span>
вместо <div>
, Для этого есть причина. <span>
с естественно display: inline
и в соответствии с Quirksmode:
В IE 6 и 7
inline-block
работает только на элементах, которые имеют естественныйdisplay: inline
,Firefox 2 и ниже не поддерживают это значение. Ты можешь использовать
-moz-inline-box
, но имейте в виду, что это не то же самое, чтоinline-block
и в некоторых ситуациях это может работать не так, как вы ожидаете.
Поплавки
Вы можете перемещать левые метки:
<div>fig</div>vitamin<br>
<div>apple</div>vitamin<br>
<div>coconut</div>vitamin
с:
div { float: left; clear: left; width: 80px; }
Если текст после <div>
достаточно большой, он будет перенесен в начало строки (не с буфером 80px). Вы можете хотеть этого или нет.
Список определений
Используя эту разметку:
<dl>
<dt>fig</dt><dd>vitamin</dd>
<dt>apple</dt><dd>vitamin</dd>
<dt>coconut</dt><dd>vitamin</dd>
</dl>
с:
dt { float: left; width: 80px; }
таблицы
<table>
<tbody>
<tr>
<td class="left">fig</td>
<td>vitamin</td>
</tr>
<td>apple</td>
<td>vitamin</td>
</tr>
<td>coconut</td>
<td>vitamin</td>
</tr>
</tbody>
</table>
с:
table { border-collapse: collapse; }
td.left { width: 80px; }
Таблицы будут безусловно наиболее обратно совместимым решением (начиная с IE5 или более ранней), поэтому они все еще часто используются в ситуациях, когда некоторые могут утверждать, что они не подходят. Идеалы так называемой семантической сети являются благими намерениями, и их следует придерживаться, где это возможно, но вы также часто будете сталкиваться с ситуациями, когда вы выбираете между "семантической чистотой" и обратной совместимостью, поэтому необходимо определенное количество прагматизма. преимущественную силу.
При этом, если вы не говорите нам что-то, вам не нужно идти по этому пути, если вы не хотите.
Наконец, всегда размещайте объявление DOCTYPE на своих страницах. Это вынуждает IE переходить из режима совместимости в режим соответствия стандартам (оба эвфемизма). Например:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
...
Вы могли бы использовать div, который перемещается влево для заголовков - это популярно для двухколоночных форм и т. П. На веб-сайтах, которые не хотят использовать таблицы, или нуждаются в большей гибкости, чем строгая компоновка, которую ограничивает таблица.,
<div class="wrapper">
<div style="float: left; width: 80px;">Banana</div>
<div>Vitamin Awesome</div>
</div>
Я думаю, что внешний div можно заменить на <br clear="both" />
после этого.