встроенный блок в режиме совместимости с IE9

В настоящее время я разрабатываю меню html/css. Моя проблема заключается в том, что страница, на которую будет вставлено меню, при загрузке заставляет браузер переходить в режим причуд и совместимости. Я не могу контролировать это.

Вот мой css:

.community-menu {    
    margin: 5px;
    display: inline-block;
    text-align: center;
    vertical-align: middle;
    padding: 15px 30px;
    cursor: pointer;
}

#container {
    width: 100%; 
    position: relative;
    text-align: center;
}

Моя проблема заключается в том, что встроенный блок в причудах IE и режиме совместимости заставляет меню занимать всю ширину своего родительского div.

Вот как выглядят элементы div в Chrome и Firefox:

Отображение встроенного блока в Chrome и Firefox

В IE те же div расширяются до полной ширины родительского div.

Визуализация встроенного блока в IE

Чего я пытаюсь добиться, так это центрированных div, размер которых изменяется с текстовым содержимым, которое при изменении размера браузера автоматически смещается вниз.

Я нашел некоторый код из другого вопроса SO, который показывает мою проблему здесь при просмотре в IE в режиме совместимости и особенностей.

После комментария Spudley вот картинка, показывающая режим загрузки по умолчанию.

введите здесь описание изображения

Несмотря на то, что он говорит IE8, конечный результат тот же, что и в IE9. Сегодня на другом компе :)


person Bruno    schedule 03.06.2013    source источник
comment
Не могли бы вы опубликовать рабочий пример? HTML был бы удобен.   -  person ralph.m    schedule 03.06.2013
comment
Проблема с IE заключается в том, что режим quirks использует более старый движок рендеринга, который не знает о таких вещах, как inline-block. Обойти это невозможно. Почему нельзя использовать режим соответствия стандартам?   -  person Mr Lister    schedule 03.06.2013
comment
Вы можете управлять режимом совместимости с IE. Добавьте заголовок HTTP-ответа X-UA-Compatible: IE=edge в настройки вашего сервера или добавьте элемент <meta http-equiv="X-UA-Compatible" content="IE=edge" />, чтобы запретить переход в режим просмотра совместимости.   -  person Marat Tanalin    schedule 03.06.2013
comment
Мой код должен быть добавлен на веб-страницу, которую я не могу контролировать. У меня также нет контроля над заголовками http, отправленными с ответом.   -  person Bruno    schedule 03.06.2013
comment
Но как тогда вы будете добавлять код? Конечно, если вы можете добавлять что-то, вы можете добавить метаэлементы или объявление DOCTYPE?   -  person Mr Lister    schedule 03.06.2013
comment
@MrLister Я не контролирую веб-страницу, поскольку она динамически генерируется CMS, а объявление типа документа уже определено. Я добавляю код в раздел веб-страницы. Можно ли переопределить тип документа, добавив в тело метаэлемент X-UA-Compatible?   -  person Bruno    schedule 03.06.2013
comment
Вы не можете переопределить объявление DOCTYPE, но если вы действительно в отчаянии, вы можете попробовать, если размещение метаэлемента в теле имеет какой-либо эффект. Удачи.   -  person Mr Lister    schedule 03.06.2013
comment
Режим Quirks — это режим совместимости для эмуляции IE5. (Да, IE5. Вы хоть представляете, сколько ему лет?) Это означает, что ему не хватает тонны функций, что, в свою очередь, означает, что вам будет очень трудно заставить работать современный веб-код. с этим. inline-block будет наименьшей из ваших проблем; есть гораздо худшие вещи, чем в режиме Quirks. Кроме того, режим Quirks должен вообще вступать в игру только в том случае, если тип документа отсутствует или недействителен. Если у вас есть тип документа и вы все еще переходите в режим причуд, у вас могут возникнуть более серьезные проблемы, чем просто работа с отсутствующими функциями.   -  person Spudley    schedule 03.06.2013
comment
Кроме того, для уточнения: режим Quirks и режим совместимости — это совершенно разные вещи. Нет режима причуд совместимости. Они все плохие, но режим quirks на порядки хуже. Было бы очень полезно, если бы вы могли отредактировать вопрос, чтобы четко указать, в каком режиме на самом деле находится IE. Если бы мы знали, это помогло бы нам помочь вам. (чтобы узнать наверняка, нажмите F12 в IE, пока вы находитесь на странице, и посмотрите информацию о режиме в окне инструментов разработчика в правом верхнем углу).   -  person Spudley    schedule 03.06.2013
comment
@Spudley Спасибо за это. Очень информативно. Знаете ли вы, можно ли внедрить объявление типа документа или это что-то, что нельзя изменить?   -  person Bruno    schedule 03.06.2013
comment
@Bruno - с ним нельзя манипулировать в Javascript, поскольку (1) он находится за пределами DOM и (2) его необходимо указывать при загрузке страницы, когда браузер решает, какой режим использовать. Его нужно будет изменить в вашем коде на стороне сервера; то есть в CMS. Однако я бы добавил, что проблема, скорее всего, в шаблоне вашей страницы, а не в самой CMS; это, вероятно, будет очень легко исправить.   -  person Spudley    schedule 03.06.2013
comment
Кстати: спасибо за скриншот режима; это полезно. Первая часть (режим браузера) показывает, как браузер идентифицирует себя на сервере, т.е. в этом случае он сообщает серверу, что это IE8, через строку агента пользователя. Вторая часть (режим документа) — это режим, который используется для рендеринга страницы. В данном случае это режим причуд, что означает, что ваш тип документа неисправен или отсутствует. (Если у вас есть тип документа, это может быть связано с пустым пространством или другим содержимым на странице перед ним; это может привести к тому, что IE проигнорирует тип документа)   -  person Spudley    schedule 03.06.2013
comment
Кроме того, вы можете прочитать мою запись в блоге на эту тему; здесь больше информации, чем я могу рассказать в комментариях.   -  person Spudley    schedule 03.06.2013


Ответы (2)


"отображение: встроенный блок;" лучше поменять на: { float:left|right; дисплей: встроенный; масштаб: 1; }

person Foker    schedule 03.06.2013

Когда мне нужно эмулировать встроенный блок в старом и причудливом IE, я просто заменяю встроенный блок на встроенный. (с условным комментарием)

person FLX    schedule 03.06.2013
comment
Я думал об этом, однако, когда я использую встроенное объявление, объявления поля и заполнения игнорируются, и в результате элементы меню перекрываются при переходе на новую строку. - person Bruno; 03.06.2013