Как заставить работать стандартный режим, а также режим причуд?

Следующий HTML отлично подходит для меня в FireFox или IE7 / 8 (с тегом стиля или без него)

<!-- Deliberately no DocType to induce Quirks Mode -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <style type="text/css">
        Input.quirks
        {
            margin: 1px 0px 1px 0px;
            border: solid black 1px;
        }
    </style>
</head>
<body>
Should work in Quirks Mode <br />
    <input class="quirks" type="text" style="width: 300px;" /><br />
    <input class="quirks" type="text" style="width: 147px;" /><img src="./Graphics/SpacerPixel.gif" border="0" /><input class="quirks" type="text" maxlength="25" style="width: 150px;" /><br />
    <input class="quirks" type="text" style="width: 94px;" /><img src="./Graphics/SpacerPixel.gif" border="0" /><input class="quirks" type="text" style="width: 100px;" /><img src="./Graphics/SpacerPixel.gif" border="0" /><input class="quirks" type="text" value="DA8 1DE" style="width: 100px;" />
</body>
</html>

Однако мне сказали, что отсутствие DocType в верхней части указанного HTML заставляет оба браузера работать в режиме «Quirks».

Мне сказали, что это плохо.

Я пробовал несколько типов DocType, но не нашел комбинации DocType / HTML, которая дает правильный рендеринг в обоих браузерах.

Все, кроме режима «Причуд», заставляет браузеры по-разному реагировать на попытку установить ширину текстового поля. Похоже, это приводит к тому, что я могу исправить свои инструкции для FF или IE, и вдруг другой выйдет из строя.

Немного подробностей ...

1.> Задача состоит в том, чтобы 3 строки выглядели одинаковой ширины при отображении в каждом браузере. Необязательно, чтобы отображаемая ширина была одинаковой во всех браузерах, просто чтобы они отображались правильно выровненными / выровненными внутри каждого браузера.

2.> Указанное изображение представляет собой разделительное изображение шириной 3 пикселя и высотой 1 пикселя (альтернатива этому также была бы хорошей).

3.> Я не хочу вводить таблицы, если это вообще возможно.

Кажется, что режим Quirks - единственный режим, который согласован во всех браузерах. Однако меня беспокоит, что в окончательной версии IE8 или даже в каком-нибудь будущем браузере режим причуд не будет использоваться по умолчанию.

Что мне делать? Как указать DocType (и, возможно, изменить мой html), который обеспечит единообразный вид во всех браузерах?


person Rory Becker    schedule 06.01.2009    source источник


Ответы (2)


Основное различие между режимами «Причуд» и «Соответствие стандартам» заключается в другой «блочной модели», которая приводит к различным способам расчета размеров на основе настроек ширины / высоты, отступов, полей и границ. В режиме «Стандартное соответствие» эффективная ширина и высота поля рассчитывается путем сложения всех этих параметров (подробности можно найти в Интернете).

Итак, поскольку вы указываете границу в 1 пиксель, ваши первые поля ввода будут иметь ширину 302 пикселя (300 пикселей + 2 * 1 пиксель для границы слева и справа). Несоответствие между FF и IE, о котором вы упомянули, может быть вызвано разными «значениями по умолчанию» для параметра «padding». Я только что протестировал ваш код с DOCTYPE и без заполнения для полей ввода - оба браузера отображали его одинаково.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Теперь по поводу изображений-разделителей: не используйте их. Они тебе не нужны. Просто используйте правое поле «3 пикселя» для полей ввода для промежутка.

input.quirks {
    margin: 1px 3px 1px 0px;  /* 3px right margin */
    border: solid black 1px;
    padding: 0px;             /* so that IE and FF use the same padding */
}

Затем выполните математические вычисления, чтобы определить правильные настройки «ширины», чтобы сумма всех значений ширины (включая отступы, границы и поля!) В каждой строке была равной, например:

300px + 5px = 305px
145px + 150px + 2*5px = 305px
90px + 100px + 100px + 3*5px = 305px

Обратите внимание, что «5px» состоит из 3px-правого поля и 2-кратной границы (1px).

Вот и все. Если вы хотите использовать другой отступ для лучшего внешнего вида, просто включите его в свои расчеты!

person Ferdinand Beyer    schedule 06.01.2009
comment
Что я могу сказать ... Я провел весь вчерашний день, занимаясь проблемами такого рода ... Я выполнил указанные шаги, и это работает ОТЛИЧНО! Большое спасибо. Возможно ли, что изображения вызывали дополнительные проблемы? .. Мне нравится, что они не нужны. код еще проще читать: D - person Rory Becker; 06.01.2009
comment
Не думаю, что изображения должны вызывать дополнительные проблемы. Но, поскольку вы не указали атрибуты ширины и высоты в теге ‹img›, браузеру необходимо загрузить изображение, прежде чем он узнает, сколько места для него нужно сохранить, что, вероятно, приведет к скачку макета при загрузке. - person Ferdinand Beyer; 06.01.2009
comment
При работе с блочной моделью в необычном или стандартном режиме очень помогает атрибут CSS box-sizing, см. quirksmode.org/css/box.html. Это мешает вам делать математику самостоятельно. - person Julien Kronegg; 25.02.2013

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

person A. Rex    schedule 24.01.2009