Застосовуйте стиль ТІЛЬКИ на IE


184

Ось мій блок CSS:

.actual-form table {
  padding: 5px 0 15px 15px;
  margin: 0 0 30px 0;
  display: block;
  width: 100%;
  background: #f9f9f9;
  border-top: 1px solid #d0d0d0;
  border-bottom: 1px solid #d0d0d0;
}

Я хочу лише, щоб IE 7, 8 і 9 "бачили" width: 100%

Який найпростіший спосіб досягти цього?


1
Чому ти намагаєшся це зробити? На яку версію IE націлено? Що з IE10? (не підтримує звичайні умовні коментарі)
— тридцять

Я намагаюся націлити на IE 7, 8 і 9.
— FastTrack

З якої причини ви могли б націлити на IE9, а не на IE10? Я хотів би знати ...
— тридцятьдот

1
IE не інтерпретує width: autoелементи блоків так само, як це роблять інші браузери, такі як Firefox або Chrome. У Chrome / Firefox width:autoзбільшить ширину блочного елемента на повну ширину контейнера. IE цього не робить і вимагаєwidth: 100%
— FastTrack

Відповіді:


102

Оновлення 2017 року

Залежно від середовища, умовні коментарі були офіційно застарілі та видалені в IE10 +.


Оригінал

Найпростіший спосіб - це, можливо, використовувати умовний коментар Internet Explorer у своєму HTML:

<!--[if IE]>
<style>
    .actual-form table {
         width: 100%;
    }
</style>
<![endif]-->

Ви можете використовувати численні хаки (наприклад, хакер підкреслення ), які дозволять орієнтуватися лише на IE у вашому аркуші стилів, але він стає дуже брудним, якщо ви хочете націлити всі версії IE на всіх платформах.


10
Чи є спосіб використовувати цей умовний коментар у моєму файлі CSS? Я хотів уникнути захаращування свого HTML, якщо я міг би допомогти йому.
— FastTrack

2
@FastTrack - Ні, умовні коментарі - це коментарі HTML, тому вони повинні з’являтися у вашій розмітці. Я прагну створити цілком новий таблицю стилів тільки для IE, а потім включити його як звичайне в умовні коментарі.
— Джеймс Еллардіс

Джеймс: Я думав зробити це, але потім мені доводиться боротися з оновленням двох окремих таблиць стилів кожен раз, коли я хочу щось змінити, правда?
— FastTrack

3
@FastTrack - Ні, ваш таблиця стилів IE міститиме лише стилі, характерні для IE. Включіть його після свого основного таблиці стилів, щоб ви могли змінити стилі, встановлені у вашому головному аркуші стилів, де це необхідно. Тож вам би потрібно було оновити його лише у тому випадку, якщо ви хочете змінити щось конкретне для IE.
— Джеймс Еллардіс

1
@FastTrack - Так. Коли щось зазначено у більш ніж одній таблиці стилів, перевага, що включається пізніше, має перевагу.
— Джеймс Еллардіс

284
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
   #myElement {
        /* Enter your style code */
   }
}

Пояснення: Це специфічний для Microsoft медіа-запит. Використовуючи властивість -ms-high-контраст, характерну для Microsoft IE, вона буде розбиратися лише в Internet Explorer 10 або новішої версії. Я використав обидві дійсні значення медіа-запиту, тому він буде розбиратися тільки IE, незалежно від того, чи у користувача включений високий контраст чи ні.


6
тільки він не працює на новому інтернет-досліднику (край), його потрібно додати без ms- теж
— Саад Ахмед

6
Дивіться тут, щоб націлити край: stackoverflow.com/questions/28417056/…
— Phyllis Sutherland

6
@SaadAhmed: Це насправді проблема? Edge - це досить добре сприйнятий браузер, набагато кращий, ніж IE у будь-якому разі, тому багато IE-хаків, ймовірно, не знадобляться (або розсудливі)?
— Майкл Шепер

1
Добре, що вирішив мої дурні проблеми з IE. Дякуємо за виправлення!
— Шестер

1
@MichaelScheper Ця помилка, опублікована в першому коментарі, досі застосовується в останньому краї (17 на сьогодні). Невелике виправлення Саада допомогло мені зняти цю примху.
— SimonRabbit

54

Окрім умовних коментарів IE, це оновлений список щодо орієнтації IE6 на IE10.

Перегляньте конкретні хаки CSS & JS за межами IE .

/***** Attribute Hacks ******/

/* IE6 */
#once { _color: blue }

/* IE6, IE7 */
#doce { *color: blue; /* or #color: blue */ }

/* Everything but IE6 */
#diecisiete { color/**/: blue }

/* IE6, IE7, IE8, but also IE9 in some cases :( */
#diecinueve { color: blue\9; }

/* IE7, IE8 */
#veinte { color/*\**/: blue\9; }

/* IE6, IE7 -- acts as an !important */
#veintesiete { color: blue !ie; } /* string after ! can be anything */

/* IE8, IE9 */
#anotherone  {color: blue\0/;} /* must go at the END of all rules */

/* IE9, IE10, IE11 */
@media screen and (min-width:0\0) {
    #veintidos { color: red}
}


/***** Selector Hacks ******/

/* IE6 and below */
* html #uno  { color: red }

/* IE7 */
*:first-child+html #dos { color: red }

/* IE8 (Everything but IE 6,7) */
html>/**/body #cuatro { color: red }

/* Everything but IE6-8 */
:root *> #quince { color: red  }

/* IE7 */
*+html #dieciocho {  color: red }

/* IE 10+ */
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
   #veintiun { color: red; }
}

1
Я спробував \9і \0/для displayна селекторі класу, але обидва будуть застосовуватися до IE10 , а також. Чи є спосіб подати заявку лише на IE9 [і нижче чи ні]?
— Том Бріто

Можна спробувати: \0/IE9але не перевіряли. Інакше я не знаю іншого способу націлити на IE9, якщо ви не використовуєте умовні пункти:<!--[if IE 9]><link rel="stylesheet" type="text/css" href="ie9-specific.css" /><![endif]-->
— Oriol

1
@media screen and (min-width:0\0) {Хак , здається, розбирається IE11, а - так що це не 9 , а 10 тільки - будь ласка , перевірити ще раз і оновити свої коментарі.
— Рольф

Я використовував екран @media і (-ms-high-контраст: активний), (-ms-high-контраст: жоден) {} Це спрацювало чудово.
— Гарсимер

43

Існує кілька хакерів, доступних для IE

Використання умовних коментарів із таблицею стилів

<!--[if IE]>
<link rel="stylesheet" type="text/css" href="only-ie.css" />
<![endif]-->

Використання умовних коментарів із заголовком css

<!--[if IE]>
<style type="text/css">
    /************ css for all IE browsers ****************/
</style>
<![endif]-->

Використання умовних коментарів з елементами HTML

<!--[if IE]> <div class="ie-only"> /*content*/ </div> <![endif]-->

Використання медіа-запиту

 IE10+
 @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
 selector { property:value; }
 }

 IE6,7,9,10
 @media screen and (min-width: 640px), screen\9 {
 selector { property:value; }
 }

 IE6,7
 @media screen\9 {
  selector { property:value; }
 }

 IE8
 @media \0screen {
  selector { property:value; }
 }

 IE6,7,8
 @media \0screen\,screen\9 {
  selector { property:value; }
 }

 IE9,10
 @media screen and (min-width:0\0){
  selector { property:value; }
 }

Зауважте, що останній з перерахованих ( min-width:0\0) також стосується IE11
— CBarr

26

Окрім умовного коментаря, можна також скористатись селектором браузера CSS http://rafael.adm.br/css_browser_selector/, оскільки це дозволить орієнтуватися на конкретні веб-переглядачі. Потім ви можете встановити CSS як

.ie .actual-form table {
    width: 100%
    }

Це також дозволить орієнтуватися на конкретні веб-переглядачі в основній таблиці стилів, не вимагаючи умовних коментарів.


Це, мабуть, не впливає на IE9
— FastTrack

Я не розумію, чому ні, спробуйте .ie9 .actual-form таблиці {width: 100%} у своєму CSS. Сподіваємось, це працює для вас.
— frontendzzzguy

.ie9не працює, оскільки він не оновлювався з 2010 року.
— Ханна

Це, безумовно, найелегантніший підхід. Особисто я віддаю перевагу додати сторону сервера селекторів браузера при візуалізації сторінки.
— opsb

1
це спрацьовує, якщо ви використовуєте рядки агентів та динамічно додаєте селекторний клас до тіла.
— pikapika

6

Я думаю, що для найкращої практики вам слід написати умовне твердження IE всередині <head>тегу, що всередині має посилання на ваш спеціальний таблицю стилів Це повинно бути після вашого користувальницького посилання css, щоб воно перекривало останнє, у мене є невеликий сайт, тому я використовую той самий, тобто css для всіх сторінок.

<link rel="stylesheet" type="text/css" href="index.css" />
<!--[if IE]>
    <link rel="stylesheet" type="text/css" href="all-ie-only.css" />
<![endif]-->

це відрізняється від відповіді Джеймса, як я думаю (особиста думка, тому що я працюю з командою дизайнерів, і я не хочу, щоб вони торкалися моїх html-файлів і псували щось там), ви ніколи не повинні включати стилі у свій HTML-файл.


6

Трохи запізнювався на цьому, але це спрацювало мені ідеально, коли я намагався приховати тло IE6 та 7

.myclass{ 
    background-image: url("images/myimg.png");
    background-position: right top;
    background-repeat: no-repeat;
    background-size: 22px auto;
    padding-left: 48px;
    height: 42px;
    _background-image: none;
    *background-image: none;
}

Я отримав цей злом за допомогою: http://briancray.com/posts/target-ie6-and-ie7-with-only-1-extra-character-in-your-css/

#myelement
{
    color: #999; /* shows in all browsers */
    *color: #999; /* notice the * before the property - shows in IE7 and below */
    _color: #999; /* notice the _ before the property - shows in IE6 and below */
}

5

Welcome BrowserDetect - приголомшлива функція.

<script>
    var BrowserDetect;
    BrowserDetect = {...};//  get BrowserDetect Object from the link referenced in this answer
    BrowserDetect.init();
    // On page load, detect browser (with jQuery or vanilla)
    if (BrowserDetect.browser === 'Explorer') {
      // Add 'ie' class on every element on the page.
      $('*').addClass('ie');
    }
</script>

<!-- ENSURE IE STYLES ARE AVAILABLE -->
<style>
    div.ie {
       // do something special for div on IE browser.
    }
    h1.ie {
     // do something special for h1 on IE browser.
    }
</style>

Object BrowserDetect також надає versionінформацію , щоб ми могли додати певні класи - напр. $('*').addClass('ie9');якщо (BrowserDetect.version == 9).

Щасти....


4

Це дійсно залежить від версій IE ... Я знайшов цей чудовий ресурс, який оновлений з IE6-10 :

CSS-хак для Internet Explorer 6

Він називається Star HTML Hack і виглядає так:

  • html .color {color: # F00;} Цей хак використовує повністю дійсний CSS.

Злом CSS для Internet Explorer 7

Це називається Star Plus Hack.

*: first-child + html .color {color: # F00;} Або скорочена версія:

* + html .color {color: # F00;} Як і зірковий HTML-хакер, і для цього використовується дійсний CSS.

Злом CSS для Internet Explorer 8

@media \ 0screen {.color {color: # F00;}} Цей хак не використовує дійсний CSS.

Злом CSS для Internet Explorer 9

: root .color {color: # F00 \ 9;} Цей хакер також не використовує дійсний CSS.

Додано 2013.02.04: На жаль, IE10 розуміє цей злом.

CSS-хак для Internet Explorer 10

@media екран та (-ms-high-контраст: активний), (-ms-high-контраст: жоден) {.color {color: # F00;}} Цей хакер також не використовує дійсний CSS.


Останній також стосується IE11
— CBarr

2

Для / * Internet Explorer 9+ (однолінійний) * /

_::selection, .selector { property:value\0; }

Тільки це рішення прекрасно працює для мене.


Я знаю, що це некромент, але це виглядає надзвичайно струнко. Однак я не впевнений, що саме робить, оскільки це виглядає трохи таємно / візантійсько. Хтось знає семантику цього твердження? (на кшталт _ :: і \ 0 наприкінці?)
— Адам Р. Тернер

1
Також застосовується правило для Chrome: /
— trincot

2
<!--[if !IE]><body<![endif]-->
<!--[if IE]><body class="ie"> <![endif]-->

body.ie .actual-form table {
    width: 100%
}

2

Для IE9 +

@media screen and (min-width:0\0) and (min-resolution: +72dpi) {
   // IE9+ CSS
   .selector{
      color: red;
   }
}

IE Edge 12+

@supports (-ms-ime-align: auto) {
  .selector {
    color: red;
  }
}

Цей працює на Edge та всіх IE

:-ms-lang(x), .selector { color: red; }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.