Хром и фиксированная ширина на div (или другие теги) - PullRequest
1 голос
/ 14 декабря 2009

У меня есть 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 это отображается как

fig       vitamin
apple     vitamin
coconut   vitamin

и все «витамины» хорошо выровнены. в Chrome этот пробел не создается, и поэтому он не очень хорошо отображается.

figvitamin
applevitamin
coconutvitamin

Вопрос в следующем: это проблема / ошибка в Chrome, или это потому, что HTML-код не является правильным и ie8 (в данном случае) просто угадывает мои намерения лучше?

Ответы [ 2 ]

4 голосов
/ 14 декабря 2009

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> s естественно 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>
...
1 голос
/ 14 декабря 2009

Вы можете использовать div, который перемещается влево для заголовков - это популярно для двухколоночных форм и т. П. На веб-сайтах, которые не хотят использовать таблицы или нуждаются в большей гибкости, чем строгая структура таблицы. ограничивает вас.

<div class="wrapper">
    <div style="float: left; width: 80px;">Banana</div>
    <div>Vitamin Awesome</div>
</div>

Полагаю, что внешний div можно заменить на <br clear="both" />.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...