2010-09-24 13 views
6

Mam następujący kod:: last-child selektor klasy pseudo CSS i Internet Explorer

ul.myList li{ 
    border-right: 1px dotted #000; 
} 

Jednak na ostatnim elemencie, muszę usunąć tę granicę jako projekt, który pracuję od dyktatu że ostatni element nie wymaga obramowania jako separatora.

Więc muszę kierować się ostatnie dziecko z listy, a więc w moim css Dodałem

ul.myList li:last-child{ 
    border-right: none; 
} 

które jak wszyscy wiemy, działa prawidłowo w Firefox, Safari i Chrome.

Problem leży kiedy wyświetlić stronę w przeglądarce Internet Explorer 6 aż do 8.

Odpowiedz

11

Tak, po kilka kopanie wokół, znalazłem odpowiedź:

Jeśli przeglądarka jest IE < 8 określ stylów tak:

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

iw granicach swojego IE stylów określić następujące zasady :

ul.myList li{ 
    border-right: expression(this.nextSibling==null?'none':'inherit'); 
} 

wyrażenie nextSibling sprawdza, czy istnieje element po nim, a jeśli nie ma dziedziczy regułę określoną w t domyślny arkusz stylów, jeśli nie, stosuje nową regułę.

Więcej informacji można znaleźć here

+1

+1 To okropne, ale może po prostu działać. Plus jeden ode mnie za znalezienie praktycznego rozwiązania dla IE. (I minus jeden milion punktów za IE za to, że sprawił, że wpadliśmy na takie hacki w pierwszej kolejności). Warto zauważyć, że IE9 (obecnie w wersji beta) może go wspierać, więc możesz chcieć dostosować [jeśli IE] do IE8 lub tylko niższego. – Spudley

+0

Dzięki za odpowiedź, nie byłem w 100%, jeśli IE 9 będzie go wspierać. Zmienię mój post, aby odzwierciedlić za IE 8 i poniżej. –

+1

IE9 WSPIERA to, zgodnie z ich własną dokumentacją. Jakkolwiek jest to niezawodne. – Kyle

1

Możesz to zrobić za pomocą jQuery. Zamiast polegać na CSS. Użyj selektorów jQuery, aby ustawić właściwość twojego ostatniego elementu. Rozumiem, że nie nazwałeś go swoim pytaniem.

jQuery('ul.myList li:last-child').css("Key","value"); 
2

jak Internet Explorer, zanim wersja 9 (który jest jeszcze w fazie rozwoju) nie obsługuje :last-child wybierak w ogóle, moim najlepszym rozwiązaniem, niestety, byłoby ustawić klasę lub identyfikator na ostatni element na liście i spróbuj to wybrać.

Oczywiście, jeśli pozostawienie prawej krawędzi dla IE nie spowoduje całkowitego złamania układu, możesz chcieć zostawić swój kod w niezmienionym stanie, jeśli nie przeszkadza Ci to, że IE trochę zarabia na renderowaniu.

Powiązane problemy