Jak wybrać <li>
element, który jest bezpośrednim rodzicem elementu kotwiczącego?
Na przykład mój CSS byłby mniej więcej taki:
li < a.active {
property: value;
}
Oczywiście istnieją sposoby na zrobienie tego za pomocą JavaScript, ale mam nadzieję, że istnieje jakieś obejście, które istnieje natywnie dla CSS poziomu 2.
Menu, które próbuję stylizować, jest wyrzucane przez CMS, więc nie mogę przenieść aktywnego elementu do <li>
elementu ... (chyba, że motywuję moduł tworzenia menu, którego wolałbym nie robić).
Jakieś pomysły?
źródło
!
obecnie:The subject of the selector can be explicitly identified by appending an exclamation mark (!) to one of the compound selectors in a selector.
$
wyglądało dla mnie lepiej ...!
można łatwiej przeoczyć dołączone .:has()
pseudo, które wszyscy znają i kochają z jQuery. Najnowsza wersja językowa usunęła wszystkie odniesienia do wskaźnika podmiotu i zastąpiła go:has()
pseudo. Nie znam dokładnych powodów, ale CSSWG przeprowadziła ankietę jakiś czas temu i wyniki musiały wpłynąć na tę decyzję. Najprawdopodobniej jest to zgodne z jQuery (dzięki czemu może wykorzystywać qSA bez modyfikacji), a ponieważ składnia wskaźnika podmiotu okazała się zbyt myląca.Nie sądzę, że możesz wybrać rodzica tylko w CSS.
Ale ponieważ wydaje się, że masz już
.active
klasę, łatwiej byłoby przenieść tę klasę doli
(zamiasta
). W ten sposób możesz uzyskać dostęp zarówno do, jakli
ia
poprzez CSS.źródło
Możesz użyć tego skryptu :
Spowoduje to wybranie dowolnego rodzica wprowadzania tekstu. Ale czekaj, jest jeszcze wiele więcej. Jeśli chcesz, możesz wybrać określonego rodzica:
Lub wybierz go, gdy jest aktywny:
Sprawdź ten HTML:
Możesz wybrać,
span.help
gdyinput
jest aktywny i pokazać go:Istnieje wiele innych możliwości; po prostu sprawdź dokumentację wtyczki.
BTW, działa w Internet Explorerze.
źródło
patent()
byłoby szybsze. Trzeba to jednak przetestować#a!
sam zgłasza błąd,#a! p
działa), więc inne nie będą działać z powoduUncaught TypeError: Cannot call method 'split' of undefined
: patrz jsfiddle.net/HerrSerker/VkVPsJak wspomniało kilka innych, nie ma sposobu na stylizację elementów nadrzędnych elementu przy użyciu tylko CSS, ale następujące funkcje działają z jQuery :
źródło
<
Selektora nie istnieje (zweryfikowane jQuery 1.7.1).<
-syntax zadziałał w 2009 roku, ale zaktualizowałem go (dla 2013 roku).:has()
selektor :$("li:has(a.active)").css("property", "value");
. Odczytuje podobnie do proponowanego!
selektora CSS 4 . Zobacz także::parent
selektor ,.parents()
metoda ,.parent()
metoda ..css("property", "value")
do stylizowania wybranych elementów, powinieneś zwykle.addClass("someClass")
i mieć w swoim CSS.someClass { property: value }
( via ). W ten sposób możesz zanotować styl z pełną mocą CSS i dowolnych używanych przez ciebie preprocesorów.Tak:
:has()
Obsługa przeglądarki: brak
źródło
Nie ma selektora rodzica; dokładnie tak, jak nie ma poprzedniego selektora rodzeństwa. Jednym z dobrych powodów braku tych selektorów jest to, że przeglądarka musi przeglądać wszystkie elementy potomne elementu, aby ustalić, czy należy zastosować klasę. Na przykład, jeśli napisałeś:
Następnie przeglądarka będzie musiała poczekać, aż załaduje się i przeanalizuje wszystko, aż
</body>
do ustalenia, czy strona powinna być czerwona, czy nie.Artykuł Dlaczego nie mamy selektora rodzica wyjaśnia go szczegółowo.
źródło
W CSS 2 nie ma na to sposobu. Możesz dodać klasę do
li
i odwołać się doa
:źródło
Spróbuj przełączyć
a
nablock
wyświetlanie, a następnie użyj dowolnego stylu.a
Elementem wypełnili
elementu, a będziesz w stanie zmienić swój wygląd, jak chcesz. Nie zapomnij ustawićli
padding na 0.źródło
Selektor CSS „ General Sibling Combinator ” może być użyty do tego, co chcesz:
To pasuje do każdego
F
elementu poprzedzonego przezE
element.źródło
O ile mi wiadomo, nie w CSS 2. CSS 3 ma bardziej niezawodne selektory, ale nie jest konsekwentnie wdrażany we wszystkich przeglądarkach. Nawet przy ulepszonych selektorach nie wierzę, że osiągnie dokładnie to, co podałeś w swoim przykładzie.
źródło
Wiem, że OP szukał rozwiązania CSS, ale można to łatwo osiągnąć za pomocą jQuery. W moim przypadku musiałem znaleźć
<ul>
tag nadrzędny dla<span>
tagu zawartego w dziecku<li>
. jQuery ma:has
selektor, dzięki czemu możliwe jest zidentyfikowanie rodzica przez zawarte w nim dzieci:wybierze
ul
element, który ma element potomny o identyfikatorze someId . Lub, aby odpowiedzieć na pierwotne pytanie, coś podobnego powinno załatwić sprawę (niesprawdzone):źródło
$yourSpan.closest("ul")
a dostaniesz nadrzędną UL swojego elementu rozpiętości. Niemniej jednak twoja odpowiedź jest całkowicie nie na temat, imho. Możemy odpowiedzieć na wszystkie pytania oparte na CSS za pomocą rozwiązania jQuery.Pseudoelement
:focus-within
pozwala na wybranie rodzica, jeśli fokus jest aktywny.Element może być skoncentrowany, jeśli ma
tabindex
atrybut.Obsługa przeglądarki dla fokusu
Tabindex
Przykład
źródło
.color:focus-within .change
z.color:focus-within
. W moim przypadku używam paska nawigacyjnego bootstrap, który dodaje klasę do dzieci, gdy są aktywne, i chcę dodać klasę do nadrzędnego paska .nav. Myślę, że jest to dość powszechny scenariusz, w którym jestem właścicielem znaczników, ale komponent css + js to bootstrap (lub inny), więc nie mogę zmienić zachowania. Chociaż mogę dodać tabindex i użyć tego css. Dzięki!Jest to najczęściej dyskutowany aspekt specyfikacji Selektor Poziom 4 . Dzięki temu selektor będzie mógł stylizować element zgodnie z jego dzieckiem, używając wykrzyknika po danym selektorze (!).
Na przykład:
ustawi czerwony kolor tła, jeśli użytkownik najedzie kursorem na dowolną kotwicę.
Ale musimy poczekać na implementację przeglądarki :(
źródło
Możesz spróbować użyć hiperłącza jako elementu nadrzędnego, a następnie zmienić elementy wewnętrzne po najechaniu myszą. Lubię to:
W ten sposób możesz zmienić styl w wielu znacznikach wewnętrznych, w oparciu o najazd elementu nadrzędnego.
źródło
a
znaczniku tylko do niektórych elementów, jeśli chcesz zachować zgodność ze standardami XHTML. Na przykład nie można użyć elementudiv
wewnętrznegoa
bez ostrzeżenia o naruszeniu schematu.Obecnie nie ma selektora rodziców i nie jest nawet omawiany w żadnym z rozmów W3C. Musisz zrozumieć, jak CSS jest oceniany przez przeglądarkę, aby zrozumieć, czy jest to potrzebne, czy nie.
Jest tu wiele technicznych wyjaśnień.
Jonathan Snook wyjaśnia, jak ocenia się CSS .
Chris Coyier o rozmowach selektora rodziców .
Harry Roberts ponownie o pisaniu wydajnych selektorów CSS .
Ale Nicole Sullivan ma kilka interesujących faktów na temat pozytywnych trendów .
Ci ludzie są najwyższej klasy w dziedzinie rozwoju front-endu.
źródło
need
Jest określona przez wymagania developerzy, czy mieć go w spec decydują inne czynniki.Pomysł na poziome menu ...
Część HTML
Część CSS
Zaktualizowano wersję demonstracyjną i resztę kodu
Kolejny przykład, jak używać go do wprowadzania tekstu - wybierz nadrzędny zestaw pól
źródło
Oto hack za
pointer-events
pomocąhover
:źródło
Istnieje wtyczka, która rozszerza CSS o niektóre niestandardowe funkcje, które mogą naprawdę pomóc w projektowaniu stron internetowych. To się nazywa EQCSS .
Jedną z rzeczy, które dodaje EQCSS, jest selektor nadrzędny. Działa we wszystkich przeglądarkach, Internet Explorer 8 i nowszych. Oto format:
Więc tutaj otworzyliśmy kwerendę elementu dla każdego elementu
a.active
, a dla stylów w tym zapytaniu rzeczy takie$parent
mają sens, ponieważ istnieje punkt odniesienia. Przeglądarka może znaleźć element nadrzędny, ponieważ jest bardzo podobny doparentNode
JavaScript.Oto demo
$parent
i kolejne$parent
demo, które działa w Internet Explorerze 8 , a także zrzut ekranu na wypadek, gdybyś nie miał programu Internet Explorer 8 do przetestowania .EQCSS obejmuje również meta-selektory :
$prev
dla elementu przed wybranym elementem i$this
tylko dla tych elementów, które pasują do zapytania o element, i więcej.źródło
Jest teraz 2019, a najnowsza wersja CSS Nesting Module faktycznie ma coś takiego. Przedstawiamy
@nest
zasady.(Skopiuj i wklej z powyższego adresu URL).
Przykład prawidłowych selektorów w ramach tej specyfikacji:
źródło
Technicznie nie ma na to bezpośredniego sposobu. Możesz to jednak rozwiązać za pomocą jQuery lub JavaScript.
Możesz jednak zrobić coś takiego.
jQuery
Jeśli chcesz to osiągnąć za pomocą jQuery, tutaj znajduje się odwołanie do selektora nadrzędnego jQuery .
źródło
W3C wykluczył taki selektor ze względu na ogromny wpływ na wydajność, jaki miałby na przeglądarkę.
źródło
Krótka odpowiedź brzmi NIE ; nie mamy
parent selector
na tym etapie CSS, ale jeśli i tak nie musisz zamieniać elementów ani klas, drugą opcją jest JavaScript. Coś takiego:Lub krócej, jeśli używasz jQuery w swojej aplikacji:
źródło
Chociaż obecnie nie ma selektora rodzica w standardowym CSS, pracuję nad (osobistym) projektem o nazwie ax (tj. Augmented CSS Selector Syntax / ACSSSS ), który wśród 7 nowych selektorów obejmuje zarówno:
<
(który umożliwia wybór przeciwny do>
)^
(który umożliwia wybór przeciwny do[SPACE]
)topór jest obecnie na stosunkowo wczesnym etapie rozwoju BETA.
Zobacz demo tutaj:
http://rounin.co.uk/projects/axe/axe2.html
(porównaj dwie listy po lewej ze stylowymi selektorami i dwie listy po prawej ze stylowymi selektorami)
źródło
<script src="https://rouninmedia.github.io/axe/axe.js"></script>
na samym końcu dokumentu HTML, tuż przed</body>
.Przynajmniej do CSS 3 włącznie, nie można tak wybrać. Ale w JavaScript można to teraz zrobić dość łatwo, wystarczy dodać trochę waniliowego JavaScript, zauważ, że kod jest dość krótki.
źródło
CSS 4 będzie fantazyjny, jeśli doda trochę haków do chodzenia wstecz . Do tego czasu możliwe (choć nie wskazane) jest użycie
checkbox
i / lubradio
input
s, aby przerwać zwykły sposób łączenia rzeczy, a dzięki temu CSS może działać poza swoim normalnym zakresem ...... dość brutto , ale tylko z CSS i HTML można dotknąć i re-touch coś, ale
body
i:root
z niemal dowolnego miejsca przez przyłączenieid
ifor
właściwości zradio
/checkbox
input
s ilabel
wyzwala ; prawdopodobnie ktoś kiedyś pokaże, jak je ponownie dotknąć.Nie jestem pewien co do innych
:
selektorów, ale ja:checked
dla wersji wcześniejszej niż CSS 3. Jeśli dobrze pamiętam, to było coś takiego i[checked]
dlatego możesz znaleźć to w powyższym kodzie, na przykład:... ale dla rzeczy takich jak
::after
i:hover
, nie jestem wcale pewien, w której wersji CSS pojawiły się te pierwsze.To wszystko powiedziane, proszę, nigdy nie używaj tego w produkcji, nawet w gniewie. Na pewno żart, innymi słowy tylko dlatego, że coś można zrobić, nie zawsze oznacza, że powinno .
źródło
Nie, nie możesz wybrać rodzica tylko w CSS.
Ale ponieważ wydaje się, że masz już
.active
klasę, łatwiej byłoby przenieść tę klasę doli
(zamiasta
). W ten sposób możesz uzyskać dostęp zarówno do, jakli
ia
poprzez CSS.źródło
Zmiana elementu nadrzędnego na podstawie elementu podrzędnego może obecnie nastąpić tylko wtedy, gdy mamy
<input>
element wewnątrz elementu nadrzędnego. Gdy wejście zostanie zogniskowane, odpowiedni element nadrzędny może zostać zmieniony za pomocą CSS.Poniższy przykład pomoże ci zrozumieć korzystanie
:focus-within
z CSS.źródło
Jest to możliwe z ampersand w Sass :
Dane wyjściowe CSS:
źródło
h3
rodzica, który był celem. To wybrałobyh3
s potomków.some-parent-selector
.W tym celu wynająłbym kod JavaScript. Na przykład w React podczas iteracji po tablicy dodaj kolejną klasę do komponentu nadrzędnego, co oznacza, że zawiera on twoje dzieci:
A potem po prostu:
źródło
Nie ma selektora nadrzędnego css (a zatem w preprocesorach css) z powodu „Główne powody, dla których grupa robocza CSS wcześniej odrzucała propozycje selektorów nadrzędnych są związane z wydajnością przeglądarki i problemami z renderowaniem przyrostowym”.
źródło