Odpowiedz

20

Od IE6 jest zasadniczo ograniczone do:

  • klasy selektorów
  • selektorów ID
  • (spacja) potomek selektorów
  • A: korzystających tylko pseudo-selektorów

jedynym Dostępne są następujące opcje:

  • używać więcej klas do identyfikacji elementów
  • użyć JavaScript (silnie nie zaleca wyjątkiem wyspecjalizowanych przypadków)

Uważam to za bardzo przydatne do skorzystania z możliwością przypisania wielu klas do element oddzielając je spacją: class="foo bar"

+0

jest poprawny html? – Ngm

+1

@ngm nie, zduplikowane specyfikacje atrybutów są niedozwolone –

+2

@ngm można jednak użyć class = "foo bar" – Dels

2

Używaj klas, to jedyne obejście, niestety.

+0

jest przycisk valid html? – Ngm

+0

użyj class = "button bar" zamiast tego –

+0

@ngm możesz użyć class = "foo bar" – Dels

26

To nie jest możliwe bez pieprzonego HTML ze stosem nieistniejących selektorów klas, niestety.

Zalecam zaprojektowanie witryny tak, aby całkowicie poprawny CSS działał dla osób korzystających z nowoczesnych przeglądarek, i że nadal można go używać w IE6, choć nie do końca poprawny wizualnie. Trzeba tylko znaleźć odpowiednią równowagę pomiędzy doprowadzeniem witryny do standardu i pochylaniem się do tyłu dla użytkowników, którzy nie dokonają aktualizacji. To zepsuta przeglądarka, traktuj ją jako taką.

+4

Podoba mi się ta odpowiedź +1 – alex

+1

Tak, to jest sposób Naprzód. Deweloperzy muszą przestać próbować tworzyć piksele w IE6. Na przykład skonfigurowałem kilka kolumn przy użyciu pseudo-selektora: pierwszy-dziecko, aby usunąć lewy margines w pierwszej kolumnie. Dla IE6 po prostu zmniejszyłem marginesy, więc nie zepsuło. – DisgruntledGoat

+1

Jest to możliwe dzięki wyrażeniom CSS. Zobacz http://stackoverflow.com/q/8231617/143739 – kzh

8

Jeśli chcesz selektor atrybutu w IE6, można użyć Dean Edward IE.js. http://dean.edwards.name/IE7/

To uczyni IE 5+ zachowują się bardziej jak IE7

 
supports the following CSS selectors: 
parent > child 
adjacent + sibling 
adjacent ~ sibling 
[attr], [attr="value"], [attr~="value"] etc 
.multiple.classes (fixes bug) 
:hover, :active, :focus (for all elements) 
:first-child, :last-child, only-child, nth-child, nth-last-child 
:checked, :disabled, :enabled 
:empty, :contains(), :not() 
:before/:after/content: 
:lang() 

nie mam używać IE6 (IE7), więc nie mogę powiedział, że to działa, ale dać mu spróbować

+4

To jest dobra opcja, ale bądź świadomy (i to nie z doświadczenia, ale z patrzenia na kod i sposób, w jaki implementuje obsługę), że twoje reguły CSS nie będą automatycznie "stosuje się" do dynamicznych zmian w elementach, które następują przez JS - dodawanie klas, elementów itp. nie spowoduje otrzymania oryginalnych reguł CSS. – Nicole

0

Jeśli używasz jQuery na swojej stronie, inna opcja to SuperSelectors - przechodzi przez arkusze stylów witryny, dynamicznie dodając klasy do elementów, dzięki czemu nawet IE6 może wygrzewać się w blasku odpowiednio wspierających selektorów CSS, takich jak ul li:first-child li:nth-child(odd) a:hover.

6

Można używać przeglądarki Internet Explorer wyrażeń CSS w połączeniu z bezpiecznym podkreślenia ("_", IE6 i wcześniejszych) CSS Hack:

/* Adds dotted bottom border to `<ABBR>` with a `title` attribute. */ 
abbr { 
     _border-bottom: expression(this.title ? '1px dotted' : 'none'); 
} 

abbr[title] { 
     border-bottom: 1px dotted; 
} 

Rozumiem, że prosiłem o "ważnej" CSS, ale jeśli zhakujesz CSS powyżej, to przeczytaj o Safe CSS Hacks.

Powyższe może zostać zmienione na:

.ie6 abbr { 
     _border-bottom: expression(this.title ? '1px dotted' : 'none'); 
} 

abbr[title] { 
     border-bottom: 1px dotted; 
} 

To, czy HTML rozpoczął jako:

<!--[if lt IE 7]><html class="ie6"><![endif]--> 
<!--[if IE 7]> <html class="ie7"><![endif]--> 
<!--[if IE 8]> <html class="ie8"><![endif]--> 
<!--[if gt IE 8]><!--><html><!--<![endif]--> 
+0

+1 dla wyrażenia expression(). Buduję strony internetowe i tworzę CSS od 12 lat i po raz pierwszy w życiu widzę to cudownie fajne gówno! –

+1

To nie działa w IE8. W końcu wyjęli go ze względu na problemy bezpieczeństwa, ale działa w IE7. IE ma również coś, co nazywa się "zachowaniami" w CSS. – kzh