Ich weiß, dass es keinen übergeordneten CSS-Selektor gibt , aber ist es möglich, ein übergeordnetes Element zu formatieren, wenn ein untergeordnetes Element ohne einen solchen Selektor bewegt wird?
Um ein Beispiel zu nennen: Betrachten Sie eine Schaltfläche zum Löschen , die beim Bewegen des Mauszeigers das Element hervorhebt, das gelöscht werden soll:
<div>
<p>Lorem ipsum ...</p>
<button>Delete</button>
</div>
Wie kann man mit reinem CSS die Hintergrundfarbe dieses Abschnitts ändern, wenn sich die Maus über der Schaltfläche befindet?
Antworten:
Nun, diese Frage wird schon oft gestellt, und die kurze typische Antwort lautet: Sie kann nicht mit reinem CSS durchgeführt werden. Es ist im Namen: Cascading Style Sheets unterstützt das Styling nur in kaskadierender Richtung, nicht nach oben.
Aber in den meisten Fällen , in denen dieser Effekt gewünscht wird, wie in dem gegebenen Beispiel, gibt es immer noch die Möglichkeit , diese Kaskadierung Eigenschaften zu verwenden , um den gewünschten Effekt zu erreichen. Betrachten Sie dieses Pseudo-Markup:
Der Trick besteht darin, dem Geschwister die gleiche Größe und Position wie dem Elternteil zu geben und das Geschwister anstelle des Elternteils zu stylen. Dies wird so aussehen, als ob die Eltern gestylt sind!
Wie soll man das Geschwister stylen?
Wenn das Kind schwebt, ist es auch der Elternteil, das Geschwister jedoch nicht. Gleiches gilt für die Geschwister. Dies schließt in drei möglichen CSS-Auswahlpfaden für das Styling des Geschwisters:
Diese verschiedenen Wege bieten einige schöne Möglichkeiten. Wenn Sie beispielsweise diesen Trick auf das Beispiel in der Frage loslassen, führt dies zu folgender Geige :
In den meisten Fällen hängt dieser Trick natürlich von der Verwendung der absoluten Positionierung ab, um dem Geschwister die gleiche Größe wie dem Elternteil zu geben und das Kind dennoch im Elternteil erscheinen zu lassen.
Manchmal ist es erforderlich, einen qualifizierteren Auswahlpfad zu verwenden, um ein bestimmtes Element auszuwählen, wie in dieser Geige gezeigt, die den Trick mehrmals in einem Baummenü implementiert. Wirklich ganz nett.
quelle
Ich weiß, dass es eine alte Frage ist, aber ich habe es gerade ohne ein Pseudo-Kind (aber einen Pseudo-Wrapper) geschafft.
Wenn Sie die Eltern mit nicht so festgelegt
pointer-events
, und dann einem Kinddiv
mitpointer-events
Satzauto
, es funktioniert :)Beachten Sie, dass
<img>
Tag (zum Beispiel) nicht den Trick.Denken Sie auch daran zu setzen ,
pointer-events
umauto
für andere Kinder , die ihre eigenen Ereignis - Listener haben, oder sonst werden sie ihre Klick - Funktionalität verlieren.Bearbeiten:
Wie Shadow Wizard freundlicherweise bemerkte: Es ist erwähnenswert, dass dies für IE10 und darunter nicht funktioniert. (Alte Versionen von FF und Chrome auch hier )
quelle
Ein anderer, einfacherer Ansatz (für eine alte Frage)
wäre, Elemente als Geschwister zu platzieren und zu verwenden:
Angrenzender Geschwister-Selektor (
+
) oder allgemeiner Geschwister-Selektor (~
)Demo Fiddle hier .
quelle
Es gibt keinen CSS-Selektor zum Auswählen eines Elternteils eines ausgewählten Kindes.
Sie könnten es mit JavaScript tun
quelle
Wie bereits erwähnt, "gibt es keinen CSS-Selektor zum Auswählen eines Elternteils eines ausgewählten Kindes".
Also Sie entweder:
Hier ist das Beispiel für die Javascript / jQuery- Lösung
Auf der Javascript-Seite:
Und auf der CSS-Seite hätten Sie so etwas:
quelle
Diese Lösung hängt vollständig vom Design ab. Wenn Sie jedoch ein übergeordnetes Div haben, auf dem Sie den Hintergrund ändern möchten, wenn Sie den Mauszeiger über ein Kind bewegen, können Sie versuchen, das übergeordnete Element mit einem
::after
/ nachzuahmen::before
.CSS:
Sehen Sie hier ein vollständiges Geigenbeispiel
quelle
Eine einfache Abfragelösung für diejenigen, die keine reine CSS-Lösung benötigen:
quelle
Dies ist in Sass extrem einfach! Tauchen Sie dafür nicht in JavaScript ein. Der & Selektor in sass macht genau das.
http://thesassway.com/intermediate/referencing-parent-selectors-using-ampersand
quelle