Подтвердить что ты не робот

Отображение CSS IE: встроенный блок

У меня возникает раздражающая проблема с IE мой код

CSS:

div {
    display: inline-block;
    margin-right:40px;
    border: 1px solid;
}

HTML:

<div>element</div>
<div>element</div>
<div>element</div>
<div>element</div>
<div>element</div>

Вот как он выглядит в firefox/chrome (ожидаемый дисплей)

enter image description here

Вот как это выглядит в IE

enter image description here

Я googled, если IE поддерживает отображение: inline-block и, по-видимому, он делает.

4b9b3361

Ответ 1

Добавьте DOCTYPE в свой html,

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

Он работает для меня после того, как я добавил это.

Примечание: в jsFiddle DOCTYPE был автоматически сгенерирован, поэтому он будет работать там.

Изменить 1: Проверьте этот для получения дополнительной информации,

Изменить 2: Вы можете больше узнать о стилевом блоке здесь

Ответ 2

Рабочее решение

Ниже показано, как правильно работать:

  • Режим Quirks
  • Стандарты IE 7
  • Стандарты IE 8
  • Стандарты IE 9
  • Режим совместимости IE 9

<!DOCTYPE html>
<html>
<head>
    <style>

    DIV {
        display: inline-block;
        *display: inline; /* leading asterisk IS correct */
        margin-right:40px;
        border: 1px solid;
        zoom: 1; /* seems to fix drawing bug on border in IE 7 */
    }

    </style>

</head>
<body>
    <div>element</div>
    <div>element</div>
    <div>element</div>
    <div>element</div>
    <div>element</div>
</body>
</html>

История ответов

http://jsfiddle.net/3sK4S/

Прекрасно работает для меня в стандартном режиме IE9. Не отображается правильно (как описано) в режиме quirks.

Тестирование с помощью IE9:

  • Режим Quirks: заблокирован (неверно)
  • Стандарты IE 7: блок (неверный)
  • Стандарты IE 8: встроенный (правильный)
  • Стандарты IE 9: встроенный (правильный)
  • Режим совместимости IE 9: встроенный (правильный)

Чтобы обмануть IE7:

div {
    display: inline-block;
    *display: inline; /* leading asterisk IS correct */
    margin-right:40px;
    border: 1px solid;
}

Взято из этой статьи. Работает для меня в режиме эмуляции IE 7.

За комментарий @SKS о doctype, я добавил полное решение с указанным типом doctype.

Ответ 3

Для меня работал добавление этого кода:

<meta http-equiv="X-UA-Compatible" content="IE=edge"/>

для информации заголовка.

Ответ 4

Есть CSS-хаки для IE, которые действительно работают, но их довольно много:

  • hasLayout

    hasLayout: true;

    --- Видимо, заставляет IE7 (?) рендеринг следовать правилам компоновки CSS для элемента вместо глобальных правил

  • * дисплей

    *display: inline;
    zoom: 1;
    

    - Звездный хак, который, по-видимому, "трюки", рендерит двигатель, чтобы выровнять div как встроенные элементы

  • поплавка

    float:left;

    - Хороший старый флот, даже IE6 должен его поддерживать, но я не знаю, почему вас беспокоит IE6, хотя статистика китайских браузеров, похоже, указывает на то, что IE6 по-прежнему довольно популярен в Китае, но это может быть уже история как я читал это некоторое время в прошлом году. Лично я считаю, что Северная Корея не должна беспокоиться, но это только я.

Однако существует еще один способ избежать всех этих хаков в пользу проекта онлайн-кода google под названием HTML Shim или Shiv. Цель состоит в том, чтобы сделать все версии IE до версии v9 для поддержки HTML5. Я заметил, что это помогает, и мне не нужно использовать все вышеперечисленное, чтобы работать с встроенным блоком. Это допустимо только в том случае, если вы не возражаете добавить JavaScript. С другой стороны, кто в обозримом будущем обходится без JS?

Конечно, есть также режим quirks (совместимость) или стандартные режимы, поэтому позаботьтесь о добавлении действительного doctype для начала. Для HTML5 это проще:   

<?DOCTYPE html>

(?) Не уверен, какая версия, но я думаю, что читаю 7 в режиме quirks.

Ответ 5

div {
    display: block;
    margin-right: 40px;
    float: left;
    border: 1px solid;
}

Проблема заключается только в IE7 или ранее, но это исправит это.

Ответ 6

display: inline;

и

zoom: 1;

работал нормально