Moim celem jest zastosowanie CSS na końcu li
, ale tak się nie dzieje.
#refundReasonMenu #nav li:last-child {
border-bottom: 1px solid #b5b5b5;
}
<div id="refundReasonMenu">
<ul id="nav">
<li><a id="abc" href="#">abcde</a></li>
<li><a id="def" href="#">xyz</a></li>
</ul>
</div>
Jak mogę wybrać tylko ostatnie dziecko?
css
css-selectors
Miral
źródło
źródło
:last-child
. I to nie jest takie ciekawe.:first-child
jest pseudoklasą CSS2, pseudoklasą:last-child
CSS3.:last-child
.Innym rozwiązaniem, które może Ci się przydać, jest odwrócenie relacji. Więc ustawiasz obramowanie dla wszystkich elementów listy. Następnie użyłbyś first-child, aby usunąć obramowanie dla pierwszego przedmiotu. Pierwsze dziecko jest obsługiwane statycznie we wszystkich przeglądarkach (co oznacza, że nie może być dodawane dynamicznie przez inny kod, ale pierwsze dziecko jest selektorem CSS2, podczas gdy ostatnie dziecko zostało dodane w specyfikacji CSS3)
Uwaga: Działa to tak, jak zamierzałeś, tylko wtedy, gdy masz na liście tylko 2 elementy, takie jak przykład. Każda trzecia i następna pozycja będzie miała zastosowane obramowanie.
źródło
Jeśli myślisz, że możesz używać Javascript, to od czasu obsługi jQuery
last-child
możesz użyć metody css jQuery i dobrze, że będzie ona obsługiwać prawie wszystkie przeglądarkiPrzykładowy kod:
Więcej informacji na ten temat można znaleźć tutaj: http://api.jquery.com/css/#css2
źródło
$("#nav li:last-child").addClass('last-child')
, żebyś mógł zachować swój styl w swoich arkuszach stylów.div:last-child
idiv.last-child
. Wygląda na to, że uważa:last-child
składnię za niepoprawną i żadna klasa z tym pseudo-selektorem nie zostanie zastosowana.Jeśli liczba elementów listy jest stała, możesz użyć sąsiedniego selektora, np. Jeśli masz tylko trzy
<li>
elementy, możesz wybrać ostatni za<li>
pomocą:źródło
li + #nav li
wybierali
wnętrze,#nav
które nastąpi późniejli
. Twój selektor powinien po prostu być#nav li + li + li
.Jeśli często potrzebujesz selektorów CSS3, zawsze możesz skorzystać z biblioteki selectivizr w swojej witrynie:
http://selectivizr.com/
Jest to skrypt JS, który dodaje obsługę prawie wszystkich selektorów CSS3 do przeglądarek, które inaczej by ich nie obsługiwały.
Wrzuć to do swojego
<head>
tagu za pomocą warunku IE:źródło
Pseudoklasa last-child nie działa w IE
Zgodność z CSS i Internet Explorer
Selektory CSS w IE7: jak zawodzą
źródło
Alternatywnie do używania klasy możesz użyć szczegółowej listy, ustawiając elementy potomne dt tak, aby miały jeden styl, a elementy potomne dd, aby miały inny. Twój przykład wyglądałby następująco:
html:
Żadna metoda nie jest lepsza od drugiej i zależy to tylko od osobistych preferencji.
źródło
Innym sposobem jest użycie selektora ostatniego potomka w jQuery, a następnie użycie metody .css (). Bądź jednak zmęczony, ponieważ niektórzy ludzie wciąż są w epoce kamienia łupanego i używają przeglądarek z wyłączoną obsługą JavaScript.
źródło
Dlaczego nie zastosować obramowania do spodu UL?
źródło
padding-bottom
na<ul>
elemencie lubmargin-bottom
na ostatnim<li>
elemencie, nie będzie to miało pożądanego umieszczenia tuż pod ostatnim<li>
elementem. W przeciwnym razie jest to dobre rozwiązanie.Jeśli pływasz elementami, możesz odwrócić kolejność
to znaczy
float: right;
zamiastfloat: left;
Następnie użyj tej metody, aby wybrać pierwsze dziecko klasy.
W rzeczywistości jest to stosowanie tej klasy tylko do OSTATNIEJ instancji, ponieważ jest teraz w odwrotnej kolejności.
Oto działający przykład:
źródło
Trudno powiedzieć, nie widząc reszty CSS, ale spróbuj dodać
!important
kolor przed obramowaniem, aby wyglądało tak:źródło