Wiem, że nie istnieje selektor rodzica CSS , ale czy można stylizować element rodzicielski po najechaniu kursorem na element potomny bez takiego selektora?
Oto przykład: rozważ przycisk usuwania, który po najechaniu kursorem podświetli element, który ma zostać usunięty:
<div>
<p>Lorem ipsum ...</p>
<button>Delete</button>
</div>
Jak za pomocą czystego CSS zmienić kolor tła tej sekcji, gdy mysz znajduje się nad przyciskiem?
Odpowiedzi:
Cóż, to pytanie zadawane jest już wiele razy, a krótka typowa odpowiedź brzmi: nie można tego zrobić za pomocą czystego CSS. Jest w nazwie: Kaskadowe arkusze stylów obsługują stylizację tylko w kierunku kaskadowym, a nie w górę.
Ale w większości przypadków, w których pożądany jest ten efekt, jak w podanym przykładzie, nadal istnieje możliwość wykorzystania tych kaskadowych charakterystyk, aby osiągnąć pożądany efekt. Rozważ ten pseudo znacznik:
Sztuczka polega na tym, aby dać rodzeństwu taki sam rozmiar i pozycję jak rodzic i nadać styl rodzeństwu zamiast rodzica. To będzie wyglądać tak, jakby stylizowany był rodzic!
A teraz, jak wystylizować rodzeństwo?
Kiedy dziecko unosi się w powietrzu, rodzic również, ale rodzeństwo nie. To samo dotyczy rodzeństwa. To kończy się trzema możliwymi ścieżkami selektorów CSS do stylizacji rodzeństwa:
Te różne ścieżki dają kilka fajnych możliwości. Na przykład uwolnienie tej sztuczki na przykładzie w pytaniu skutkuje następującymi skrzypcami :
Oczywiście w większości przypadków ta sztuczka polega na zastosowaniu pozycjonowania absolutnego, aby nadać rodzeństwu taki sam rozmiar jak rodzic, a jednocześnie pozwolić dziecku pojawić się w nim.
Czasami konieczne jest użycie bardziej kwalifikowanej ścieżki selektora, aby wybrać określony element, jak pokazano na tym skrzypcach, które implementują tę sztuczkę wiele razy w menu drzewiastym. Całkiem niezłe.
źródło
Wiem, że to stare pytanie, ale udało mi się to zrobić bez pseudo dziecka (ale pseudo wrapper).
Jeśli ustawisz rodzica na nie
pointer-events
, a następnie dzieckodiv
zpointer-events
ustawieniem naauto
, to działa :)Zauważ, że
<img>
tag (na przykład) nie załatwia sprawy.Należy również pamiętać, aby ustawić
pointer-events
sięauto
do innych dzieci, które mają swój własny detektor zdarzeń lub inaczej stracą swoją funkcjonalność kliknięcia.Edycja:
Jak uprzejmie zauważył Shadow Wizard : warto wspomnieć, że to nie będzie działać dla IE10 i starszych. (Stare wersje FF i Chrome, zobacz tutaj )
źródło
Innym, prostszym podejściem (do starego pytania) ...
byłoby umieszczenie elementów jako rodzeństwa i użycie:
Selektor sąsiadującego rodzeństwa (
+
) lub Ogólny selektor rodzeństwa (~
)Demo Fiddle tutaj .
źródło
nie ma selektora CSS do wyboru rodzica wybranego dziecka.
możesz to zrobić za pomocą JavaScript
źródło
Jak wspomniano wcześniej, „nie ma selektora CSS do wyboru rodzica wybranego dziecka”.
Więc albo:
Oto przykład dla JavaScript / jQuery rozwiązanie
Po stronie javascript:
A po stronie CSS miałbyś coś takiego:
źródło
To rozwiązanie zależy w pełni od projektu, ale jeśli masz nadrzędny element DIV, na którym chcesz zmienić tło podczas najeżdżania na dziecko, możesz spróbować naśladować rodzica za pomocą
::after
/::before
.CSS:
Zobacz pełny przykład skrzypiec tutaj
źródło
Proste rozwiązanie jquery dla tych, którzy nie potrzebują czystego rozwiązania CSS:
źródło
W Sass jest to niezwykle łatwe! Nie zagłębiaj się w JavaScript w tym celu. Selektor & w sass robi dokładnie to.
http://thesassway.com/intermediate/referencing-parent-selectors-using-ampersand
źródło