2010-06-15 15 views

Odpowiedz

43

użyj komentarzy warunkowych w HTML, jak poniżej:

<!--[if IE 8]> 
<style>...</style> 
<![endif]--> 

Zobacz tutaj: http://www.quirksmode.org/css/condcom.html

można przetestować dla wersji IE niezawodnie i być pewny oth er przeglądarki nie będą zdezorientowane.

+8

Potrzebuję hack not conditional –

+3

Dlaczego potrzebujesz hack? Z natury należy unikać hacków (z wyjątkiem absolutnej ostatniej instancji). –

+0

Powinieneś być w stanie przejść długą drogę używając warunków (które sami są sami), ponieważ pozwalają ci na wykonanie określonej sekcji kodu tylko wtedy, gdy wykryta zostanie pewna wersja i która może zawierać CSS, HTML, JS, ... – Palantir

0

Nie możesz użyć hacka, który już pokazałeś, a następnie użyć IE7 i poniżej hack, aby to zmienić?

+4

* Pleeeeease * nie używaj hacków! Hacki do nadpisania * innych * hacków jest jeszcze gorsze! –

+1

@codeka - MGS nalegał już w komentarzu do innej odpowiedzi, że użyje tylko hacków, więc po prostu chodziłem z prądem. Gdyby to był ja, poszedłbym z warunkami, tak jak Plantir już odpowiedział. –

15

Użyj \0.

color: green\0; 

ja jednak zrobić polecić komentarzy warunkowych, ponieważ chcesz wykluczyć IE9, jak również i to jeszcze do przewidzenia, czy to wpłynie IE9 Hack jak również czy nie.

Bez względu na to, nigdy nie potrzebowałem specyficznego hackowania IE8. Co to jest, konkretny problem związany z IE8, który chciałbyś rozwiązać? Czy to jest renderowanie w trybie standardów IE8? Jego renderer jest całkiem niezły.

+9

Tak, ale nie zapomnij ** spacji ** tuż przed '\ 0' w przeciwnym razie wpłynie to również na IE9. – ed1nh0

2

Wykonanie czegoś takiego powinno zadziałać.

<!--[if IE 8]> 
<div id="IE8"> 
<![endif]--> 

*Your content* 

<!--[if IE 8]> 
</div> 
<![endif]--> 

Wtedy twój CSS może wyglądać następująco:

#IE8 div.something 
{ 
    color: purple; 
} 
36

użyć kwerendy multimedialnych oddzielić każdą przeglądarkę:

/* IE6/7 uses media, */ 
@media, { 
     .dude { color: green; } 
     .gal { color: red; } 
} 

/* IE8 uses \0 */ 
@media all\0 { 
     .dude { color: brown; } 
     .gal { color: orange; } 
} 

/* IE9 uses \9 */ 
@media all and (monochrome:0) { 
      .dude { color: yellow\9; } 
      .gal { color: blue\9; } 
} 

/* IE10 and IE11 both use -ms-high-contrast */ 
@media all and (-ms-high-contrast:none) 
{ 
.foo { color: green } /* IE10 */ 
*::-ms-backdrop, .foo { color: red } /* IE11 */ 
} 

Referencje

+4

Twoje rozwiązanie ie8 nie jest hackem zgodnym z IE8, próbuję go na moim komputerze, tzn. 9 i 10 również odziedziczy ten styl. Czy masz IE8 i poniżej hack? –

+3

@JackZhang Tak, użyj haseł IE9, IE10, IE11, itp., Aby zresetować reguły stylu ustawione przez hak IE8. Zaktualizowałem odpowiedź tymi hackami. –

+2

Rozwiązanie ie8 nadal nie działa dla IE8-only, '\ 0' będzie działało dla ie8, ie9 i ie10. Właściwie nie ma metody hackowania dla stylu tylko dla 8, z wyjątkiem warunkowego css. –

0

Istnieją różne sposoby, aby uzyskać klasę na elemencie HTML, który identyfikujące IE wersja jesteś twierdząc z: Modernizr, tym HTML 5 Boilerplate, etc - lub po prostu toczyć własną rękę . Wtedy możesz użyć tej klasy (np. .lt-ie9) w normalnym selektorze CSS, bez potrzeby hackowania. Jeśli chcesz tylko wpływać na IE8, a nie poprzednie wersje, przywróć poprzednią wartość za pomocą selektora .lt-ie8.

8

razie potrzeby niewielkie zmiany w użyciu CSS \ 9 to kierowanej IE8 i poniżej (IE6, IE7, IE8)

.element { 
    color:green \9; 
} 

Najlepszym sposobem jest użycie komentarzy warunkowych w HTML, jak poniżej:

<!--[if IE 8]> 
<style>...</style> 
<![endif]--> 
+0

Próbowałem z własnością 'content' i nie zmieni się ona w IE8 (nie sprawdziłem innych wersji IE). Zgaduję, że dzieje się tak dlatego, że przekazujemy wartość w cudzysłowach i ten hack (a może i inne hacki) może nie być z nią zgodny. 'content:" \ 0020 "\ 9;' – adi518

0

To będzie pracować dla wersji Bellow IE8

.lt-IE9 #yourID {

kod css

}

0

Na sam IE8 natywnej przeglądarki:

.classname{ 
    *color: green; /* This is for IE8 Native browser alone */ 
} 
2

więc ostatnie pytanie skłoniło mnie do zawiadomienia selektor ustawiony włamać do wykluczenia IE 8 tylko.

.selector, #excludeIE8::before {} spowoduje, że IE 8 wyrzuci cały zestaw selektora, podczas gdy 5-7 i 9-11 odczyta go w porządku. Dowolny z selektorów :: (::first-line, ::before, ::first-letter, ::selection) zadziała, ja wybrałem tylko ::before, więc linia odczytuje dokładnie. Należy pamiętać, że celem fałszywych ::before selektora jest być fałszywy, więc należy go zmienić na coś innego, jeśli rzeczywiście mają element z identyfikatorem wystarczająco excludeIE8

Co ciekawe, w nowoczesnych przeglądarkach (FF 45 -52, GC 49-57, Edge 25/13), zły selektor :: zjada cały zestaw selektorów (dabblet demo). Wydaje się , że ostatnia wersja Safari w systemie Windows (i LTE IE 7, lol) nie ma takiego zachowania, wciąż rozumiejąc ::before. Dodatkowo, nie mogę znaleźć niczego w the spec, aby wskazać, że jest to zamierzone zachowanie, a ponieważ mogłoby spowodować pęknięcie dowolnego selektora zestaw zawierający: ::future-legitimate-pseudoelement ... Jestem skłonny powiedzieć, że to błąd - i taki, który W przyszłości skubimy nasze reszki.


Jednakże, jeśli tylko chcesz coś na poziomie usługi (zamiast poziomu reguły), Ziga powyżej miał najlepsze rozwiązanie poprzez dodanie  \9 (przestrzeń jest klucz; NIE CopyPaste że inline jak to wykorzystuje nbsp):

/*property-level hacks:*/ 
/*Standards, Edge*/ 
prop:val; 
/*lte ie 11*/ 
prop:val\9; 
/*lte ie 8*/ 
prop:val \9; 
/*lte ie 7*/ 
*prop:val; 
/*lte ie 6*/ 
_prop:val; 

/*other direction...*/ 
/*gte ie 8, NOT Edge*/ 
prop:val\0; 

marginesie, czuję się brudny necromancer- ale chciałem gdzieś do udokumentowania wykluczyć-IE8 tylko selektor ustawiony Hack znalazłem dzisiaj, a to wydawało się być najbardziej odpowiednie miejsce.

0

Szukałem dobrym rozwiązaniem dla IE10 i poniżej CSS stylizacji (ale będzie pracować dla IE8 tylko jak dobrze) i wpadłem na ten pomysł:

<!--[if lt IE 10]><div class="column IE10-fix"><![endif]--> 
<!--[if !lt IE 10]><!--><div class="column"><!--<![endif]--> 

Deklaruję div lub cokolwiek chcę z dodatkową klasą, to pozwala mi mieć dodatkowy CSS w tym samym arkuszu stylów w bardzo czytelny sposób.

To jest W3C ważny, a nie dziwny hack CSS.

Powiązane problemy