Comment sélectionner l' <li>
élément qui est un parent direct de l'élément d'ancrage?
Par exemple, mon CSS serait quelque chose comme ceci:
li < a.active {
property: value;
}
De toute évidence, il existe des moyens de le faire avec JavaScript, mais j'espère qu'il existe une sorte de solution de contournement qui existe nativement au niveau CSS 2.
Le menu que j'essaye de styliser est craché par un CMS, donc je ne peux pas déplacer l'élément actif vers l' <li>
élément ... (sauf si je thème le module de création de menu que je préfère ne pas faire).
Des idées?
la source
!
maintenant:The subject of the selector can be explicitly identified by appending an exclamation mark (!) to one of the compound selectors in a selector.
$
me paraissait mieux ... le préfixé!
peut être ignoré plus facilement.:has()
pseudo que tout le monde connaît et aime de jQuery. Le dernier ED a supprimé toutes les références à l'indicateur de sujet et l'a remplacé par le:has()
pseudo. Je ne connais pas les raisons exactes, mais le CSSWG a tenu un sondage il y a quelque temps et les résultats ont dû influencer cette décision. C'est très probablement pour la compatibilité avec jQuery (afin qu'il puisse tirer parti de qSA sans modifications), et parce que la syntaxe des indicateurs de sujet s'est avérée trop confuse.Je ne pense pas que vous pouvez sélectionner le parent en CSS uniquement.
Mais comme vous semblez déjà avoir une
.active
classe, il serait plus facile de déplacer cette classe vers lali
(au lieu de laa
). De cette façon, vous pouvez accéder à la fois auli
eta
via CSS uniquement.la source
Vous pouvez utiliser ce script :
Cela sélectionnera n'importe quel parent d'une entrée de texte. Mais attendez, il y a encore beaucoup plus. Si vous le souhaitez, vous pouvez sélectionner un parent spécifié:
Ou sélectionnez-le lorsqu'il est actif:
Consultez ce HTML:
Vous pouvez sélectionner cela
span.help
lorsque leinput
est actif et l'afficher:Il y a beaucoup plus de capacités; il suffit de consulter la documentation du plugin.
BTW, cela fonctionne dans Internet Explorer.
la source
patent()
serait plus rapide. Cela doit cependant être testé#a!
seul déclenche une erreur,#a! p
fonctionne), et donc les autres ne fonctionneront pas non plus à cause deUncaught TypeError: Cannot call method 'split' of undefined
: voir jsfiddle.net/HerrSerker/VkVPsComme mentionné par quelques autres, il n'y a pas de moyen de styliser les parents d'un élément en utilisant uniquement CSS, mais ce qui suit fonctionne avec jQuery :
la source
<
sélecteur n'existe pas (vérifié à l'aide de jQuery 1.7.1).<
syntaxe a fonctionné en 2009, mais je l'ai mise à jour (pour 2013).:has()
sélecteur :$("li:has(a.active)").css("property", "value");
. Il se lit de manière similaire au!
sélecteur proposé par CSS 4 . Voir aussi::parent
sélecteur ,.parents()
méthode ,.parent()
méthode ..css("property", "value")
pour styliser les éléments sélectionnés, vous devriez généralement.addClass("someClass")
et avoir dans votre CSS.someClass { property: value }
( via ). De cette façon, vous pouvez noter le style avec toute la puissance de CSS et des préprocesseurs que vous utilisez.Oui:
:has()
Prise en charge du navigateur: aucun
la source
Il n'y a pas de sélecteur de parents; juste comme il n'y a pas de sélecteur de frère précédent. Une bonne raison de ne pas disposer de ces sélecteurs est que le navigateur doit parcourir tous les enfants d'un élément pour déterminer si une classe doit être appliquée ou non. Par exemple, si vous avez écrit:
Ensuite, le navigateur devra attendre jusqu'à ce qu'il ait tout chargé et analysé jusqu'au
</body>
pour déterminer si la page doit être rouge ou non.L'article Pourquoi nous n'avons pas de sélecteur parent l' explique en détail.
la source
Il n'y a aucun moyen de le faire en CSS 2. Vous pouvez ajouter la classe à
li
et référencer lea
:la source
Essayez de passer
a
à l'block
affichage, puis utilisez le style de votre choix. L'a
élément remplira l'li
élément et vous pourrez modifier son apparence comme vous le souhaitez. N'oubliez pas de mettre leli
remplissage à 0.la source
Le sélecteur CSS " General Sibling Combinator " pourrait être utilisé pour ce que vous voulez:
Cela correspond à tout
F
élément précédé d'unE
élément.la source
Pas en CSS 2 pour autant que je sache. CSS 3 a des sélecteurs plus robustes mais n'est pas implémenté de manière cohérente dans tous les navigateurs. Même avec les sélecteurs améliorés, je ne pense pas que cela accomplira exactement ce que vous avez spécifié dans votre exemple.
la source
Je sais que l'OP recherchait une solution CSS mais c'est simple à réaliser en utilisant jQuery. Dans mon cas, j'avais besoin de trouver la
<ul>
balise parent d'une<span>
balise contenue dans l'enfant<li>
. jQuery a le:has
sélecteur donc il est possible d'identifier un parent par les enfants qu'il contient:sélectionnera l'
ul
élément qui a un élément enfant avec l'id someId . Ou pour répondre à la question d'origine, quelque chose comme ce qui suit devrait faire l'affaire (non testé):la source
$yourSpan.closest("ul")
et vous obtiendrez l'UL parent de votre élément span. Néanmoins, votre réponse est à mon humble avis complètement hors sujet. Nous pouvons répondre à toutes les questions de CSS avec une solution jQuery.Le pseudo-élément
:focus-within
permet de sélectionner un parent si un descendant a le focus.Un élément peut être focalisé s'il a un
tabindex
attribut.Prise en charge du navigateur pour la mise au point interne
Tabindex
Exemple
la source
.color:focus-within .change
par.color:focus-within
. Dans mon cas, j'utilise bootstrap nav-bar qui ajoute la classe aux enfants lorsqu'il est actif et je veux ajouter une classe au parent .nav-bar. Je pense que c'est un scénario assez courant où je possède le balisage mais le composant css + js est bootstrap (ou autre) donc je ne peux pas changer le comportement. Bien que je puisse ajouter tabindex et utiliser ce CSS. Merci!Il s'agit de l'aspect le plus discuté de la spécification des sélecteurs de niveau 4 . Avec cela, un sélecteur sera en mesure de styliser un élément en fonction de son enfant en utilisant un point d'exclamation après le sélecteur donné (!).
Par exemple:
définira une couleur d'arrière-plan rouge si l'utilisateur survole une ancre.
Mais il faut attendre l'implémentation des navigateurs :(
la source
Vous pouvez essayer d'utiliser un lien hypertexte comme parent, puis modifier les éléments internes au survol. Comme ça:
De cette façon, vous pouvez modifier le style dans plusieurs balises internes, en fonction du survol de l'élément parent.
la source
a
balise à certains éléments uniquement, si vous souhaitez vous conformer aux normes XHTML. Par exemple, vous ne pouvez pas utiliser undiv
dedansa
sans recevoir un avertissement de violation du schéma.Actuellement, il n'y a pas de sélecteur de parents et il n'est même pas discuté dans aucune des discussions du W3C. Vous devez comprendre comment CSS est évalué par le navigateur pour comprendre si nous en avons besoin ou non.
Il y a beaucoup d'explications techniques ici.
Jonathan Snook explique comment le CSS est évalué .
Chris Coyier sur les pourparlers de Parent selector .
Harry Roberts à nouveau sur l'écriture de sélecteurs CSS efficaces .
Mais Nicole Sullivan a quelques faits intéressants sur les tendances positives .
Ces personnes sont toutes de première classe dans le domaine du développement frontal.
la source
need
est défini par les exigences des développeurs Web, si le fait de l'avoir dans la spécification est décidé par d'autres facteurs.Juste une idée de menu horizontal ...
Partie de HTML
Fait partie de CSS
Démo mise à jour et le reste du code
Un autre exemple comment l'utiliser avec des entrées de texte - sélectionner le jeu de champs parent
la source
Voici un hack à utiliser
pointer-events
avechover
:la source
Il existe un plugin qui étend CSS pour inclure des fonctionnalités non standard qui peuvent vraiment aider lors de la conception de sites Web. Cela s'appelle EQCSS .
Une des choses qu'EQCSS ajoute est un sélecteur parent. Il fonctionne dans tous les navigateurs, Internet Explorer 8 et plus. Voici le format:
Donc, ici, nous avons ouvert une requête d'élément sur chaque élément
a.active
, et pour les styles à l'intérieur de cette requête, des choses comme du$parent
sens, car il y a un point de référence. Le navigateur peut trouver le parent, car il est très similaire àparentNode
JavaScript.Voici une démo de
$parent
et une autre$parent
démo qui fonctionne dans Internet Explorer 8 , ainsi qu'une capture d'écran au cas où vous ne disposez pas d'Internet Explorer 8 pour tester .EQCSS comprend également des méta-sélecteurs :
$prev
pour l'élément avant un élément sélectionné et$this
uniquement pour les éléments qui correspondent à une requête d'élément, et plus encore.la source
C'est maintenant 2019, et la dernière version du module d'imbrication CSS a en fait quelque chose comme ça. Présentation
@nest
des règles at.(Copiez et collez à partir de l'URL ci-dessus).
Exemple de sélecteurs valides sous cette spécification:
la source
Techniquement, il n'y a aucun moyen direct de le faire. Cependant, vous pouvez trier cela avec jQuery ou JavaScript.
Cependant, vous pouvez également faire quelque chose comme ça.
jQuery
Si vous souhaitez y parvenir en utilisant jQuery, voici la référence du sélecteur parent jQuery .
la source
Le W3C a exclu un tel sélecteur en raison de l'énorme impact sur les performances qu'il aurait sur un navigateur.
la source
La réponse courte est NON ; nous n'en avons pas
parent selector
à ce stade en CSS, mais si vous n'avez pas à échanger les éléments ou les classes de toute façon, la deuxième option utilise JavaScript. Quelque chose comme ça:Ou d'une manière plus courte si vous utilisez jQuery dans votre application:
la source
Bien qu'il n'y ait pas de sélecteur parent dans CSS standard à l'heure actuelle, je travaille sur un projet (personnel) appelé ax (c'est-à-dire Syntaxe de sélecteur CSS augmentée / ACSSSS ) qui, parmi ses 7 nouveaux sélecteurs, comprend les deux:
<
(qui permet à la sélection opposée de>
)^
(qui permet à la sélection opposée de[SPACE]
)ax est actuellement à un stade de développement BETA relativement précoce.
Voir une démo ici:
http://rounin.co.uk/projects/axe/axe2.html
(comparer les deux listes de gauche avec des sélecteurs standard et les deux listes de droite avec des sélecteurs de haches)
la source
<script src="https://rouninmedia.github.io/axe/axe.js"></script>
à la fin de votre document html, juste avant</body>
.Au moins jusqu'à CSS 3 inclus, vous ne pouvez pas sélectionner comme ça. Mais cela peut être fait assez facilement de nos jours en JavaScript, il vous suffit d'ajouter un peu de JavaScript vanille, notez que le code est assez court.
la source
CSS 4 sera fantaisiste s'il ajoute des crochets à la marche arrière . Jusque - là , il est possible (mais pas recommandé) d'utiliser
checkbox
et / ouradio
input
s pour briser la manière habituelle que les choses sont reliées, et par qui permettent également CSS de fonctionner en dehors de son champ d' application normale ...... assez dégoûtant , mais avec seulement CSS et HTML, il est possible de toucher et de retoucher tout sauf le
body
et:root
de n'importe où en reliant les propriétésid
etfor
deradio
/checkbox
input
s et deslabel
déclencheurs ; quelqu'un va probablement montrer comment les retoucher à un moment donné.Je ne suis pas sûr des autres
:
sélecteurs, mais je:checked
pour pré-CSS 3. Si je me souviens bien, c'était quelque chose comme ça, c'est[checked]
pourquoi vous pouvez le trouver dans le code ci-dessus, par exemple,... mais pour des choses comme
::after
et:hover
, je ne sais pas du tout dans quelle version CSS celles-ci sont apparues en premier.Cela dit, veuillez ne jamais utiliser cela dans la production, pas même dans la colère. Comme une plaisanterie bien sûr, ou en d'autres termes simplement parce que quelque chose peut être fait ne signifie pas toujours que cela devrait .
la source
Non, vous ne pouvez pas sélectionner le parent uniquement en CSS.
Mais comme vous semblez déjà avoir une
.active
classe, il serait plus facile de déplacer cette classe vers lali
(au lieu de laa
). De cette façon, vous pouvez accéder à la fois auli
eta
via CSS uniquement.la source
La modification de l'élément parent basé sur l'élément enfant ne peut actuellement se produire que lorsque nous avons un
<input>
élément à l'intérieur de l'élément parent. Lorsqu'une entrée obtient le focus, son élément parent correspondant peut être affecté à l'aide de CSS.L'exemple suivant vous aidera à comprendre l'utilisation
:focus-within
en CSS.la source
C'est possible avec esperluette à Sass :
Sortie CSS:
la source
h3
le parent de, ce qui était l'objectif. Cela sélectionnerait lesh3
s qui sont des descendants de.some-parent-selector
.J'embaucherais du code JavaScript pour le faire. Par exemple, dans React lorsque vous parcourez un tableau, ajoutez une autre classe au composant parent, ce qui indique qu'il contient vos enfants:
Et puis simplement:
la source
Il n'y a pas de sélecteur parent css (et donc dans les préprocesseurs css) en raison de "Les principales raisons pour lesquelles le groupe de travail CSS rejetait précédemment les propositions de sélecteurs parents sont liées aux performances du navigateur et aux problèmes de rendu incrémentiel."
la source