2013-03-29 15 views
13

li > ul > li wybiera wszystkie elementy li, które są głębsze niż pierwszy poziom ul.CSS, aby wybrać najwyższy poziom ul

li wybiera wszystkie elementy li

li:not(li > ul > li) należy wybrać wszystkie elementy, które są li nie głębiej niż w pierwszym poziomie ul czyli regulują to jedyne elementy pierwszego stopnia - ale tak nie jest. Czemu?

Dzięki!

+3

': not' akceptuje tylko [selektorów prostych] (http: //www.w3. org/TR/css3-selectors/# simple-selectors-dfn). –

+0

@Lotuzum: Dodałem link do specyfikacji ... –

+0

@Lotus: Według specyfikacji, ': nth-child' jest pseudo-klasą i dlatego powinno być prostym selektorem. –

Odpowiedz

7

Powód, dla którego li:not(li > ul > li) nie działa, ponieważ li > ul > li nie jest prostym selektorem (jak Felix Kling zauważył w komentarzach do twojego pytania).

Najprostszym sposobem na uzyskanie najwyższego poziomu jest dać klasę lub identyfikator zewnętrznej najbardziej ul a następnie wykonaj:

.ulClassNameOrID > li {} 

Jednak następujące dostaje to, czego pragnie również (see fiddle), jak to robi nie wybrać dowolną ul że jest bezpośrednim dzieckiem poprzedniego li (więc nie jest podmenu listy zewnętrznej):

:not(li) > ul > li {} 
+0

Chce wybrać elementy pierwszego poziomu, a nie najwyższy poziom. – Michael

+0

Czy możesz pokazać to działając w jsfiddle? –

+2

@JonHarding: Już dostarczyłem skrzypce. – ScottS

Powiązane problemy