Wie wähle ich das <li>
Element aus, das dem Ankerelement direkt übergeordnet ist?
Als Beispiel wäre mein CSS ungefähr so:
li < a.active {
property: value;
}
Natürlich gibt es Möglichkeiten, dies mit JavaScript zu tun, aber ich hoffe, dass es eine Art Problemumgehung gibt, die für CSS Level 2 typisch ist.
Das Menü, das ich zu gestalten versuche, wird von einem CMS ausgespuckt, sodass ich das aktive Element nicht in das <li>
Element verschieben kann ... (es sei denn, ich thematisiere das Menü zur Menüerstellung, was ich lieber nicht tun würde).
Irgendwelche Ideen?
quelle
!
jetzt:The subject of the selector can be explicitly identified by appending an exclamation mark (!) to one of the compound selectors in a selector.
$
angehängte sah für mich besser aus ... das angehängte!
kann leichter übersehen werden.:has()
Pseudo zu ersetzen, das jeder von jQuery kennen und lieben gelernt hat. Die letzte ED hat alle Verweise auf den Betreff-Indikator entfernt und durch den:has()
Pseudo- Indikator ersetzt . Ich kenne die genauen Gründe nicht, aber die CSSWG hat vor einiger Zeit eine Umfrage durchgeführt, und die Ergebnisse müssen diese Entscheidung beeinflusst haben. Dies ist höchstwahrscheinlich auf die Kompatibilität mit jQuery zurückzuführen (damit qSA ohne Änderungen genutzt werden kann) und weil sich die Syntax der Betreffindikatoren als zu verwirrend erwiesen hat.Ich glaube nicht, dass Sie das übergeordnete Element nur in CSS auswählen können.
Da Sie jedoch bereits eine
.active
Klasse zu haben scheinen , ist es einfacher, diese Klasse in dieli
(anstelle dera
) zu verschieben. Auf diese Weise können Sie nur über CSS auf dasli
und dasa
zugreifen.quelle
Sie können dieses Skript verwenden :
Dadurch wird ein übergeordnetes Element einer Texteingabe ausgewählt. Aber warte, es gibt noch viel mehr. Wenn Sie möchten, können Sie ein bestimmtes übergeordnetes Element auswählen:
Oder wählen Sie es aus, wenn es aktiv ist:
Schauen Sie sich diesen HTML-Code an:
Sie können dies auswählen,
span.help
wenn dasinput
aktiv ist, und es anzeigen:Es gibt viel mehr Möglichkeiten; Schauen Sie sich einfach die Dokumentation des Plugins an.
Übrigens funktioniert es in Internet Explorer.
quelle
patent()
wäre schneller. Dies muss jedoch getestet werden#a!
allein löst einen Fehler aus,#a! p
funktioniert), und daher funktionieren die anderen auch nicht, weilUncaught TypeError: Cannot call method 'split' of undefined
: siehe jsfiddle.net/HerrSerker/VkVPsWie von einigen anderen erwähnt, gibt es keine Möglichkeit, die übergeordneten Elemente eines Elements nur mit CSS zu formatieren, aber das Folgende funktioniert mit jQuery :
quelle
<
Selektor existiert nicht (überprüft mit jQuery 1.7.1).<
Steuer 2009 funktioniert, aber ich habe sie aktualisiert (für 2013).:has()
Selektor von jQuery :$("li:has(a.active)").css("property", "value");
. Es liest sich ähnlich wie der von CSS 4 vorgeschlagene!
Selektor. Siehe auch::parent
Selektor ,.parents()
Methode ,.parent()
Methode ..css("property", "value")
die ausgewählten Elemente zu formatieren, sollten Sie sie normalerweise.addClass("someClass")
in Ihrem CSS.someClass { property: value }
( via ) verwenden. Auf diese Weise können Sie den Stil mit der vollen Leistung von CSS und allen von Ihnen verwendeten Präprozessoren notieren.Ja:
:has()
Browserunterstützung: keine
quelle
Es gibt keinen übergeordneten Selektor. Genau so, wie es keinen vorherigen Geschwister-Selektor gibt. Ein guter Grund dafür, dass diese Selektoren nicht vorhanden sind, besteht darin, dass der Browser alle untergeordneten Elemente eines Elements durchlaufen muss, um zu bestimmen, ob eine Klasse angewendet werden soll oder nicht. Zum Beispiel, wenn Sie geschrieben haben:
Dann muss der Browser warten, bis er alles geladen und analysiert hat, bis
</body>
festgestellt wird, ob die Seite rot sein soll oder nicht.Der Artikel Warum wir keinen übergeordneten Selektor haben, erklärt dies ausführlich.
quelle
In CSS 2 gibt es keine Möglichkeit, dies zu tun. Sie können die Klasse hinzufügen
li
und auf Folgendes verweisena
:quelle
Versuchen Sie,
a
zurblock
Anzeige zu wechseln , und verwenden Sie dann einen beliebigen Stil. Dasa
Element füllt dasli
Element und Sie können sein Aussehen nach Ihren Wünschen ändern. Vergessen Sie nicht, dieli
Auffüllung auf 0 zu setzen.quelle
Der CSS-Selektor „ General Sibling Combinator “ kann möglicherweise für folgende Zwecke verwendet werden:
Dies entspricht jedem
F
Element, dem einE
Element vorangestellt ist.quelle
Soweit mir bekannt ist, nicht in CSS 2. CSS 3 verfügt über robustere Selektoren, ist jedoch nicht in allen Browsern konsistent implementiert. Selbst mit den verbesserten Selektoren glaube ich nicht, dass es genau das erreichen wird, was Sie in Ihrem Beispiel angegeben haben.
quelle
Ich weiß, dass das OP nach einer CSS-Lösung gesucht hat, aber es ist einfach, dies mit jQuery zu erreichen. In meinem Fall musste ich das
<ul>
übergeordnete Tag für ein<span>
im Kind enthaltenes Tag finden<li>
. jQuery verfügt über den:has
Selektor, sodass ein Elternteil anhand der darin enthaltenen untergeordneten Elemente identifiziert werden kann:wählt das
ul
Element aus, das ein untergeordnetes Element mit der ID someId hat . Oder um die ursprüngliche Frage zu beantworten, sollte etwas wie das Folgende den Trick tun (ungetestet):quelle
$yourSpan.closest("ul")
Sie und Sie erhalten die übergeordnete UL Ihres span-Elements. Trotzdem ist Ihre Antwort imho völlig offtopisch. Wir können alle CSS-Fragen mit einer jQuery-Lösung beantworten.Mit dem Pseudoelement
:focus-within
kann ein Elternteil ausgewählt werden, wenn ein Nachkomme den Fokus hat.Ein Element kann fokussiert werden, wenn es ein
tabindex
Attribut hat.Browserunterstützung für Focus-Within
Tabindex
Beispiel
quelle
.color:focus-within .change
mit.color:focus-within
. In meinem Fall verwende ich eine Bootstrap-Navigationsleiste, die die Klasse den untergeordneten Elementen hinzufügt, wenn sie aktiv ist, und ich möchte der übergeordneten .nav-Leiste eine Klasse hinzufügen. Ich denke, dies ist ein ziemlich häufiges Szenario, in dem ich das Markup besitze, aber die Komponente css + js ist Bootstrap (oder eine andere), sodass ich das Verhalten nicht ändern kann. Obwohl ich tabindex hinzufügen und dieses CSS verwenden kann. Vielen Dank!Dies ist der am meisten diskutierte Aspekt der Selectors Level 4- Spezifikation. Auf diese Weise kann ein Selektor ein Element entsprechend seinem untergeordneten Element formatieren, indem er ein Ausrufezeichen nach dem angegebenen Selektor (!) Verwendet.
Zum Beispiel:
setzt eine rote Hintergrundfarbe, wenn der Benutzer über einen Anker schwebt.
Wir müssen jedoch auf die Implementierung des Browsers warten :(
quelle
Sie können versuchen, einen Hyperlink als übergeordnetes Element zu verwenden und dann die inneren Elemente beim Hover ändern. So was:
Auf diese Weise können Sie den Stil in mehreren inneren Tags basierend auf dem Rollover des übergeordneten Elements ändern.
quelle
a
Tags jedoch nur auf bestimmte Elemente, wenn Sie den XHTML-Standards entsprechen möchten. Zum Beispiel können Sie nicht verwenden ,div
innerhalba
, ohne eine Warnung des Verstoßes gegen das Schema zu bekommen.Derzeit gibt es keinen übergeordneten Selektor und er wird in keinem der Gespräche von W3C diskutiert. Sie müssen verstehen, wie CSS vom Browser ausgewertet wird, um tatsächlich zu verstehen, ob wir es benötigen oder nicht.
Hier gibt es viele technische Erklärungen.
Jonathan Snook erklärt, wie CSS bewertet wird .
Chris Coyier über die Gespräche von Parent Selector .
Harry Roberts erneut über das Schreiben effizienter CSS-Selektoren .
Aber Nicole Sullivan hat einige interessante Fakten zu positiven Trends .
Diese Leute sind alle erstklassig im Bereich der Front-End-Entwicklung.
quelle
need
wird durch die Anforderungen der Webentwickler definiert. Ob es in der Spezifikation enthalten sein soll, hängt von anderen Faktoren ab.Nur eine Idee für horizontales Menü ...
Teil von HTML
Teil von CSS
Demo und der Rest des Codes aktualisiert
Ein weiteres Beispiel für die Verwendung mit Texteingaben: Wählen Sie das übergeordnete Feldset aus
quelle
Hier ist ein Hack
pointer-events
mithover
:quelle
Es gibt ein Plugin, das CSS um einige nicht standardmäßige Funktionen erweitert, die beim Entwerfen von Websites wirklich hilfreich sein können. Es heißt EQCSS .
EQCSS fügt unter anderem einen übergeordneten Selektor hinzu. Es funktioniert in allen Browsern, Internet Explorer 8 und höher. Hier ist das Format:
Hier haben wir also für jedes Element eine Elementabfrage geöffnet
a.active
, und für die Stile in dieser Abfrage sind Dinge wie$parent
sinnvoll, da es einen Referenzpunkt gibt. Der Browser kann das übergeordnete Element finden, da esparentNode
JavaScript sehr ähnlich ist .Hier ist eine Demo von
$parent
und eine weitere$parent
Demo, die in Internet Explorer 8 funktioniert , sowie ein Screenshot für den Fall, dass Sie nicht mit Internet Explorer 8 testen können .EQCSS enthält auch Meta-Selektoren :
$prev
für das Element vor einem ausgewählten Element und$this
nur für die Elemente, die einer Elementabfrage entsprechen, und mehr.quelle
Es ist jetzt 2019 und der neueste Entwurf des CSS-Verschachtelungsmoduls enthält tatsächlich so etwas. Einführung
@nest
in die Regeln.(Kopieren und Einfügen von der obigen URL).
Beispiel für gültige Selektoren unter dieser Spezifikation:
quelle
Technisch gibt es keinen direkten Weg, dies zu tun. Sie können dies jedoch entweder mit jQuery oder JavaScript klären.
Sie können jedoch auch so etwas tun.
jQuery
Wenn Sie dies mit jQuery erreichen möchten, finden Sie hier die Referenz für den übergeordneten jQuery-Selektor .
quelle
Das W3C schloss einen solchen Selektor aufgrund der enormen Auswirkungen auf die Leistung eines Browsers aus.
quelle
Die kurze Antwort lautet NEIN ; Wir haben derzeit keine
parent selector
in CSS, aber wenn Sie die Elemente oder Klassen sowieso nicht austauschen müssen, ist die zweite Option die Verwendung von JavaScript. Etwas wie das:Oder kürzer, wenn Sie jQuery in Ihrer Anwendung verwenden:
quelle
Obwohl es derzeit keinen übergeordneten Selektor in Standard-CSS gibt, arbeite ich an einem (persönlichen) Projekt namens ax (dh Augmented CSS Selector Syntax / ACSSSS ), das unter seinen 7 neuen Selektoren beides umfasst:
<
(der das entgegengesetzte Auswahl ermöglicht>
)^
(die die entgegengesetzte Auswahl ermöglicht[SPACE]
)ax befindet sich derzeit in einem relativ frühen BETA-Entwicklungsstadium.
Sehen Sie hier eine Demo:
http://rounin.co.uk/projects/axe/axe2.html
(Vergleichen Sie die beiden Listen auf der linken Seite mit Standard-Selektoren und die beiden Listen auf der rechten Seite mit Axt-Selektoren.)
quelle
<script src="https://rouninmedia.github.io/axe/axe.js"></script>
Sie sie kurz vor dem Ende Ihres HTML-Dokuments einfügen</body>
.Zumindest bis einschließlich CSS 3 können Sie dies nicht auswählen. Aber es kann heutzutage ziemlich einfach in JavaScript gemacht werden. Sie müssen nur ein bisschen Vanille-JavaScript hinzufügen. Beachten Sie, dass der Code ziemlich kurz ist.
quelle
CSS 4 wird Phantasie, wenn es einige fügt Haken in Fuß nach hinten . Bis dahin ist es möglich (wenn auch nicht ratsam) zu verwenden
checkbox
und / oderradio
input
s zu brechen die übliche Art und Weise , dass die Dinge verbunden sind, und durch das auch CSS erlauben außerhalb seines normalen Umfang zu betreiben ...... ziemlich eklig , aber mit nur CSS und HTML ist es möglich, alles andere als das
body
und:root
von fast überall zu berühren und erneut zu berühren, indem dieid
undfor
Eigenschaften vonradio
/checkbox
input
s undlabel
Triggern verknüpft werden . wahrscheinlich wird irgendwann jemand zeigen, wie man diese wieder berührt.Ich bin mir bei den anderen
:
Selektoren nicht sicher , aber ich:checked
für Pre-CSS 3. Wenn ich mich richtig erinnere, war es so etwas[checked]
, weshalb Sie es beispielsweise im obigen Code finden können, z.... aber für Dinge wie
::after
und:hover
bin ich mir überhaupt nicht sicher, in welcher CSS-Version diese zuerst erschienen sind.Bitte verwenden Sie dies niemals in der Produktion, auch nicht im Zorn. Ein Witz, oder mit anderen Worten, nur weil etwas getan werden kann , heißt das nicht immer, dass es getan werden sollte .
quelle
Nein, Sie können das übergeordnete Element nicht nur in CSS auswählen.
Da Sie jedoch bereits eine
.active
Klasse zu haben scheinen , ist es einfacher, diese Klasse in dieli
(anstelle dera
) zu verschieben. Auf diese Weise können Sie nur über CSS auf dasli
und dasa
zugreifen.quelle
Das Ändern des übergeordneten Elements basierend auf dem untergeordneten Element kann derzeit nur erfolgen, wenn sich ein
<input>
Element im übergeordneten Element befindet. Wenn eine Eingabe fokussiert wird, kann das entsprechende übergeordnete Element mithilfe von CSS beeinflusst werden.Das folgende Beispiel hilft Ihnen beim Verständnis der Verwendung
:focus-within
in CSS.quelle
Mit kaufmännischem Und in Sass ist das möglich :
CSS-Ausgabe:
quelle
h3
den Elternteil aus, der das Ziel war. Dies würdeh3
s auswählen, die Nachkommen von sind.some-parent-selector
.Ich würde dafür einen JavaScript-Code mieten. Fügen Sie beispielsweise in Reagieren, wenn Sie über ein Array iterieren, der übergeordneten Komponente eine weitere Klasse hinzu, die angibt, dass sie Ihre untergeordneten Komponenten enthält:
Und dann einfach:
quelle
Es gibt keinen übergeordneten CSS-Selektor (und daher in CSS-Präprozessoren) aufgrund von "Die Hauptgründe dafür, dass die CSS-Arbeitsgruppe Vorschläge für übergeordnete Selektoren zuvor abgelehnt hat, hängen mit der Browserleistung und inkrementellen Rendering-Problemen zusammen."
quelle