Підтримка IE8 для CSS Media Query


178

Чи IE8 не підтримує наступний медіа-запит CSS:

@import url("desktop.css") screen and (min-width: 768px);

Якщо ні, то який альтернативний спосіб написання? Це ж чудово працює у Firefox.

Якісь проблеми з кодом нижче?

@import url("desktop.css") screen; 
@import url("ipad.css") only screen and (device-width:768px);

для тих, хто хоче спробувати вбудований css з медіа та використовувати response (.min) .js response, не працює в цій ситуації - здається, це працює для .css файлів
NoWomenNoCry

Відповіді:


77

Версії Internet Explorer до IE9 не підтримують медіа-запити .

Якщо ви шукаєте спосіб деградації дизайну для користувачів IE8, ви можете вважати корисними коментарі IE корисними. Використовуючи це, ви можете вказати специфічну таблицю стилів IE 8/7/6, яка надписує попередні правила.

Наприклад:

<link rel="stylesheet" type="text/css" media="all" href="style.css"/>
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="style-ie.css"/>
<![endif]-->

Це не дозволить чуйного дизайну в IE8, але може бути більш простим і доступним рішенням, ніж використання плагіна JS.


94
Я не бачу, як умовні таблиці стилів вирішать проблему дизайну, що реагує на них.
Джеймс Вестгейт

8
Я не розумію, як це рішення вирішить чуйний дизайн в IE? Завантаження різних таблиць стилів залежно від браузера не мало нічого спільного з використанням різних властивостей стилю залежно, наприклад, від розміру браузера.
Кликерко

13
Я думаю, що правильна відповідь полягає в тому, що IE8 не підтримує медіа-запити . Цей різновид відповідей говорить про це, але це не зовсім зрозуміло на перший погляд. Незважаючи на те, я думав, що у нього є підтримка, і ця відповідь допомогла мені зрозуміти інше.
Джейсон

54
Це правда, що ця відповідь не є чуйним рішенням, але для мене це величезне "АЛЕ", справа в тому, що IE8 не використовується на iPad або планшетах Android. IE8 може використовуватися на комп'ютерах XP / Vista, здебільшого з 2003 по 2009 рік, екрани в основному шириною 1024 пікселів. Windows Mobile знаходиться під IE6, а Windows Pone - під IE9 +. Справжнє питання тут - запитати себе, чи реагування на IE8 реально корисне?
Gregoire D.

16
@GregoireD. Так. Тому що є люди, які переглядають веб-сторінки із збільшенням. У моїй компанії ми форматуємо сторінки з 4-кратним збільшенням 800x600, щоб отримати доступність. Це робить екран на зразок ширини 400px. Медіа-запити для цього дуже корисні, незважаючи на обраний браузер (і IE8 включений).
Аркана

341

css3-mediaqueries-js - це, мабуть, те, що ви шукаєте: цей скрипт імітує медіа-запити. Однак (з сайту сценарію) він "не працює на @importтаблицях стилів Ed (якими ви не повинні користуватися з міркувань продуктивності). Також не слухатиме медіа-атрибут елементів <link>та <style>елементів".

У цьому ж ключі у вас є простіший Respond.js , який дозволяє лише min-widthта max-widthмедіа-запити.


7
Чому це не позначено як відповідь? Ідеально для мене дякую. До речі, ви не повинні використовувати імпорт css запитів через накладні витрати.
RichW

ідеально, саме те, що я шукав!
somdow

Дякую!! Ця відповідь і response.js заощадила мені багато часу, намагаючись вирішити медіа-запити в ie8.
Інгусмат

3
nevermind -> .js слід включити після файлів .css ... xD
kaljak

4
Відповісти спрацювало, але css3-медіа-запити не зробили. Я думаю, це тому, що Respond є автономним, але css3-mediaqueries покладається на деякі функції jQuery, такі як виявлення агента користувача, і ці функції були зняті та видалені (див. Документи jQuery).
Антон Борицький

50

Найкраще рішення, яке я знайшов, - це Respond.js, особливо якщо ваша головна проблема - переконатися, що ваш дизайн, що реагує, працює в IE8. Він досить легкий на 1 кбіт, коли min / gzipped, і ви можете переконатися, що завантажують його лише клієнти IE8:

<!--[if lt IE 9]>
<script src="respond.min.js"></script>
<![endif]-->

Це також рекомендований метод, якщо ви використовуєте bootstrap: http://getbootstrap.com/getting-started/#support-ie8-ie9


14

IE8 (і нижчі версії) та Firefox до 3.5 не підтримують медіа-запити. Safari 3.2 частково його підтримує.

Існує декілька обхідних завдань, які використовують JavaScript, щоб додати підтримку медіа-запитів до цих браузерів. Спробуйте такі:

Плагін jQuery для медіа-запитів (стосується лише максимальної / хв ширини)

css3-mediaqueries-js - бібліотека, яка має на меті додати підтримку медіа-запитів до непідтримуючих браузерів


Гаразд. Я просто включив css3-mediaqueries.js на свою сторінку. Доки він не працює в IE..як-медіа-запит "@import url (" desktop.css ") не лише на екрані та (ширина пристрою: 768px); " а також "@import url (" desktop.css ") не екран і (ширина пристрою: 768px);"
testndtv

Не впевнений, чи потрібно мені щось додатково робити .. окрім сценарію ..
testndtv

Зверніть увагу, що він не працює на імпортованому css. спробуйте це: <link rel = "stylesheet" type = "text / css" media = "не екран і (ширина пристрою: 768px)" href = "desktop.css" />
Faraz Kelhini

ой добре .. бачу. Насправді в цьому випадку це може не допомогти мені, тому що я шукаю щось, не роблячи нічого на сторінці ... це лише зовні в CSS ..
testndtv

Цей скрипт googletrunk css3 js вказує, що він працює лише з медіа-запитом, який використовується всередині таблиці стилів CSS, а не зовнішньо, наприклад, "лише екран і ....". Це означає, що вам потрібно об’єднати свої таблиці стилів в одну, а всередині них зробити те, що ви хотіли зробити зовні: @media screen та (max-width: 980px) {
Capagris

11

Взяте зі сторінки проекту css3mediaqueries.js.

Примітка. Не працює на таблицях стилів @ import'ed (які ви не повинні використовувати з міркувань продуктивності). Також не слухатиме медіа-атрибут елементів <link>та <style>елементів.


+1 за те, що ви сказали, що не працює на таблицях стилів @ import'ed! Заощадите мені багато часу на моїй дочірній темі WP.
Вініцій Гарсія

8

Простий спосіб використання css3-mediaqueries-js - це включити наступне перед тегом body body:

<!-- css3-mediaqueries.js for IE less than 9 -->
<!--[if lt IE 9]>
<script 
   src="//css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js">
</script>
<![endif]-->

6

Відредагована відповідь: IE розуміє просто екран та друк як імпортний носій. Усі інші CSS, що постачаються разом із заявою імпорту, змушують IE8 ігнорувати оператор імпорту. У такої проблеми у веб-переглядача Geco, як-от сафарі або мозіла, не було.


Мій IE не перебуває в режимі сумісності. Так само є інший замінник для IE .. В основному я хочу вибрати лише все, крім екранного пристрою
768px

Також, як обговорювалося на посиланні, яке ви надали, я намагався встановити докттип як <! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" " w3.org/TR/xhtml1/DTD/xhtml1-transitional. dtd "> ... Ще не працює ..
testndtv

1
Я не заперечую, чи правильно я тебе зрозумів. Ви можете використовувати JavaScript для виявлення роздільної здатності екрана? З CSS іншого шляху немає. Ви впевнені, що не маєте жодної пов'язаної помилки з тим, що викликає переосмислення або ігнорування мінімуму. Отримана порада - це панель інструментів для розробників. При тому , що ви можете перевірити жити без pagereloads
SRA

Перехід у режим вигадки дуже швидко, ви це перевірили? Це також може призвести до небажаного результату. Quirkmode замінить ваш тип. Це також практика бога перевіряти те, що ви хочете, в супер крихітному проекті, щоб переконатися, що це не пов'язана помилка / результат
sra

Ок ... Ось як я оновив зараз ... у мене є common.css і всередині нього я кажу; ... @import url ("desktop.css") екран; @import url ("ipad.css") лише на екрані та (ширина пристрою: 768px); Не впевнений, чи такий підхід правильний, але працює як для настільних ПК (IE / FF), так і для iPad. Чи може виникнути якесь питання з таким підходом?
testndtv

6

Медіа-запити взагалі не підтримуються в IE8 та нижче.


Обхід на основі Javascript

Щоб додати підтримку IE8, ви можете використовувати одне з декількох рішень JS. Наприклад, відповідь можна додати, щоб додати підтримку медіа-запитів до IE8 лише із наступним кодом:

<!--[if lt IE 9]>
<script 
   src="respond.min.js">
</script>
<![endif]-->

CSS Mediaqueries - це ще одна бібліотека, яка робить те саме. Код для додавання цієї бібліотеки до вашого HTML буде ідентичним:

<!--[if lt IE 9]>
<script 
   src="css3-mediaqueries.js">
</script>
<![endif]-->

Альтернатива

Якщо вам не подобається рішення на базі JS, слід також розглянути можливість додавання таблиці стилів IE <9, де ви налаштовуєте свій стиль, специфічний для IE <9. Для цього слід додати такий код у свій код:

<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="style-ielt9.css"/>
<![endif]-->

Примітка :

Технічно це ще одна альтернатива: використання хаксів CSS для націлювання на IE <9. Це має такий самий вплив, як таблиця стилів IE <9, але для цього вам не потрібна окрема таблиця стилів. Я не рекомендую цей варіант, оскільки вони виробляють недійсний код CSS (що є однією з декількох причин, чому використання CSS-хаків сьогодні взагалі спокушається).


5

До Internet Explorer 8 не було підтримки медіа-запитів. Але залежно від вашого випадку ви можете спробувати використовувати умовні коментарі для націлювання лише на Internet Explorer 8 і новіші версії. Вам просто потрібно використовувати належну архітектуру файлів CSS.


4

http://blog.keithclark.co.uk/wp-content/uploads/2012/11/ie-media-block-tests.php

Я використовував, @media \0screen {}і це працює добре для мене в РЕАЛЬНОму IE8.


Правила стилю, визначені в цьому блоці, застосовуватимуться лише в IE8, інші браузери їх ігнорують .
Лука

@Luca Крім того, це не дозволяє вказувати мінімальну ширину, максимальну ширину тощо
John Slegers

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.