Prawdopodobnie odpowiadam na moje pytanie, ale jestem bardzo ciekawy.
Wiem, że CSS może wybierać pojedyncze dzieci rodzica, ale czy istnieje wsparcie w stylizowaniu dzieci kontenera, jeśli jego rodzic ma pewną liczbę dzieci.
na przykład
container:children(8) {
// style the parent this way if there are 8 children
}
Wiem, że to brzmi dziwnie, ale mój menedżer poprosił mnie o sprawdzenie, nie znalazłem niczego na własną rękę, więc postanowiłem zwrócić się do SO przed zakończeniem wyszukiwania.
css
css-selectors
Brodie
źródło
źródło
Odpowiedzi:
Wyjaśnienie:
Z powodu wcześniejszego sformułowania w pierwotnym pytaniu kilku SO obywateli wyraziło obawy, że ta odpowiedź może być myląca. Zauważ, że w CSS3 style nie mogą być stosowane do węzła nadrzędnego na podstawie liczby jego potomków. Jednak style można zastosować do węzłów potomnych na podstawie liczby ich rodzeństwa .
Oryginalna odpowiedź:
Niesamowicie, jest to teraz możliwe wyłącznie w CSS3.
Sztuką jest wybranie pierwszego dziecka, gdy jest ono także dzieckiem n-tym od ostatniego. To skutecznie wybiera na podstawie liczby rodzeństwa.
Podziękowania dla tej techniki należą André Luís (odkryty) i Lea Verou (wyrafinowany).
Nie lubisz tylko CSS3? 😄
Przykład CodePen:
Źródła:
źródło
:first-child:nth-last-child(1)
ciebie możesz również użyć:only-child
.Nie. Niezupełnie. Istnieje kilka selektorów, które mogą zbliżyć cię do siebie, ale prawdopodobnie nie będą działać w twoim przykładzie i nie będą miały najlepszej kompatybilności z przeglądarką.
:only-child
Jest
:only-child
to jeden z niewielu prawdziwych selektorów liczących w tym sensie, że jest stosowany tylko wtedy, gdy istnieje jedno dziecko elementu nadrzędnego elementu. Korzystając z wyidealizowanego przykładu, działa onchildren(1)
prawdopodobnie tak, jak by to zrobił.:nth-child
:nth-child
Selektor rzeczywistości może Cię tam, gdzie chcesz iść w zależności od tego, czego naprawdę chce robić. Jeśli chcesz stylizować wszystkie elementy, jeśli jest 8 dzieci, nie masz szczęścia. Jeśli jednak chcesz zastosować style do 8. i późniejszych elementów, spróbuj tego:Niestety, prawdopodobnie nie są to rozwiązania, których szukasz. W końcu prawdopodobnie będziesz musiał użyć niektórych kreatorów JavaScript, aby zastosować style oparte na liczbie - nawet jeśli użyjesz jednego z nich, musisz rzucić okiem na kompatybilność przeglądarki, zanim przejdziesz do czystego Rozwiązanie CSS.
W3 CSS3 Spec na pseudoklasy
EDYTOWAĆ Przeczytałem twoje pytanie nieco inaczej - istnieje kilka innych sposobów na stylizację rodzica , a nie dzieci. Pozwól mi rzucić kilka innych selektorów na swój sposób:
:empty
i:not
Stylizuje elementy, które nie mają dzieci. Sam w sobie nie jest to użyteczne, ale w połączeniu z
:not
selektorem możesz stylizować tylko te elementy, które mają dzieci:Nie możesz policzyć, ile dzieci jest dostępnych z czystym CSS, ale jest to kolejny interesujący selektor, który pozwala robić fajne rzeczy.
źródło
UWAGA: To rozwiązanie zwróci dzieci zestawów o określonych długościach, a nie element nadrzędny, o co prosiłeś. Mam nadzieję, że nadal jest przydatny.
Andre Luis wymyślił metodę: http://lea.verou.me/2011/01/styling-children-based-on-their-number-with-css3/ Niestety, działa tylko w IE9 i nowszych wersjach.
Zasadniczo łączysz: nth-child () z innymi pseudo klasami, które zajmują się pozycją elementu. To podejście pozwala określić elementy z zestawów elementów o określonych długościach .
Na przykład
:nth-child(1):nth-last-child(3)
dopasowuje pierwszy element w zestawie, będąc jednocześnie 3. elementem od końca zestawu. Robi to dwie rzeczy: gwarantuje, że zestaw ma tylko trzy elementy i że mamy pierwszy z trzech. Aby określić drugi element z zestawu trzech elementów, użylibyśmy:nth-child(2):nth-last-child(2)
.Przykład 1 - Wybierz wszystkie elementy listy, jeśli zestaw ma trzy elementy:
Przykład 1 alternatywa z Lea Verou:
Przykład 2 - celuj w ostatni element zestawu trzema elementami listy:
Przykład 2 alternatywa:
Przykład 3 - docelowy drugi element zestawu z czterema elementami listy:
źródło
li:nth-child(3):nth-last-child(1) { transform: rotate(120deg); } li:nth-child(2):nth-last-child(2) { transform: rotate(240deg); }
i tak dalej ...Pracując nad rozwiązaniem Matta, zastosowałem następującą implementację Compass / SCSS.
Pozwala to szybko zwiększyć liczbę przedmiotów.
źródło
tak, możemy to zrobić za pomocą n-tego dziecka
To sprawi, że dziecko 8-tej div stanie się czerwone. Mam nadzieję że to pomoże...
Ponadto, jeśli ktoś powie „hej, nie można tego zrobić za pomocą stylów za pomocą css, użyj JS !!!” zwątp w nie natychmiast. CSS jest obecnie niezwykle elastyczny
Przykład :: http://jsfiddle.net/uWrLE/1/
W przykładzie pierwszych 7 dzieci jest niebieskich, a następnie 8 jest czerwonych ...
źródło
Jeśli zamierzasz to zrobić w czystym CSS (używając scss), ale masz różne elementy / klasy w tej samej klasie nadrzędnej, możesz użyć tej wersji !!
źródło
Nie, nie ma czegoś takiego w CSS. Możesz jednak użyć JavaScript, aby obliczyć liczbę dzieci i zastosować style.
źródło