क्या सीएसएस अभिभावक चयनकर्ता है?


3175

मैं उस <li>तत्व का चयन कैसे करूं जो लंगर तत्व का प्रत्यक्ष अभिभावक है?

एक उदाहरण के रूप में, मेरा CSS कुछ इस प्रकार होगा:

li < a.active {
    property: value;
}

जाहिर है कि जावास्क्रिप्ट के साथ ऐसा करने के तरीके हैं, लेकिन मैं उम्मीद कर रहा हूं कि सीएसएस लेवल 2 के मूल में कुछ प्रकार का वर्कअराउंड मौजूद है।

मेनू है कि मैं शैली के लिए कोशिश कर रहा हूँ एक सीएमएस द्वारा उगल दिया जा रहा है, इसलिए मैं सक्रिय तत्व को तत्व में स्थानांतरित नहीं कर सकता <li>... (जब तक कि मैं मेनू निर्माण मॉड्यूल को थीम नहीं देता जो मैं नहीं करता)।

कोई विचार?

जवाबों:


2529

वर्तमान में सीएसएस में एक तत्व के माता-पिता का चयन करने का कोई तरीका नहीं है।

यदि ऐसा करने का कोई तरीका था, तो यह वर्तमान सीएसएस चयनकर्ताओं के चश्मे में से किसी एक में होगा:

उस ने कहा, चयनकर्ता स्तर 4 वर्किंग ड्राफ्ट में एक :has()छद्म वर्ग शामिल है जो इस क्षमता को प्रदान करेगा। यह jQuery के कार्यान्वयन के समान होगा ।

li:has(> a.active) { /* styles to apply to the li tag */ }

हालाँकि, मई 2020 तक, यह अभी भी किसी भी ब्राउज़र द्वारा समर्थित नहीं है

इस बीच, यदि आपको किसी मूल तत्व का चयन करने की आवश्यकता है, तो आपको जावास्क्रिप्ट का सहारा लेना होगा।


68
ऐसा लगता है कि यह पहले से ही सुझाया गया है और खारिज कर दिया गया है: stackoverflow.com/questions/45004/…
RobM

14
की तरह दिखता है विषय चयनकर्ता , पर दोबारा गौर किया गया है को छोड़कर एक का उपयोग करके !: अबThe subject of the selector can be explicitly identified by appending an exclamation mark (!) to one of the compound selectors in a selector.
animuson

13
प्रीपेड $मेरे लिए बेहतर लग रहा था ... एप्लाइड !को और अधिक आसानी से अनदेखा किया जा सकता है।
क्रिस्टोफ

51
प्रमुख साजिश मोड़! चयनकर्ता 4 WD बस अद्यतन किया गया था आज तेजी से प्रोफाइल, जो सीएसएस कार्यान्वयन द्वारा इस्तेमाल किया जा रहा है से विषय सूचक बाहर करने के लिए। यदि यह परिवर्तन बना रहता है, तो इसका मतलब है कि आप अब स्टाइलशीट में सब्जेक्ट इंडिकेटर का उपयोग नहीं कर पाएंगे (जब तक कि आप किसी अन्य उत्तर में वर्णित किसी तरह के पॉलीफिल को किसी प्रकार से नहीं जोड़ते हैं ) - आप इसे सिलेक्टर्स एपीआई और कहीं भी उपयोग कर सकते हैं और पूरी प्रोफ़ाइल लागू हो सकती है।
BoltClock

55
एक और प्रमुख अद्यतन: ऐसा लगता है कि वे विषय चयनकर्ता वाक्य रचना के साथ पूरी तरह से दूर करने पर विचार कर रहे हैं और इसे :has()छद्म के साथ हर किसी को पता है और jQuery से प्यार करना है। नवीनतम ईडी ने विषय सूचक के सभी संदर्भों को हटा दिया है, और इसे :has()छद्म के साथ बदल दिया है । मुझे सटीक कारणों का पता नहीं है, लेकिन कुछ समय पहले CSSWG ने एक चुनाव आयोजित किया था और परिणामों ने इस निर्णय को प्रभावित किया होगा। यह jQuery के साथ संगतता के लिए सबसे अधिक संभावना है (इसलिए यह संशोधनों के बिना qSA का लाभ उठा सकता है), और क्योंकि विषय सूचक वाक्यविन्यास भी भ्रामक साबित हुआ।
BoltClock

152

मुझे नहीं लगता कि आप केवल सीएसएस में माता-पिता का चयन कर सकते हैं।

लेकिन जैसा कि आपको लगता है कि पहले से ही एक .activeवर्ग है, उस वर्ग को li(के बजाय a) स्थानांतरित करना आसान होगा । इस तरह से आप केवल CSS liके aमाध्यम से और इसके माध्यम से दोनों का उपयोग कर सकते हैं ।


4
आप छद्म चयनकर्ता को सूची आइटम में स्थानांतरित नहीं कर सकते, क्योंकि यह एक ध्यान देने योग्य तत्व नहीं है। वह उपयोग कर रहा है: सक्रिय चयनकर्ता, इसलिए जब एंकर सक्रिय होता है तो वह चाहता है कि सूची आइटम प्रभावित हो। सूची आइटम कभी भी सक्रिय स्थिति में नहीं होंगे। एक तरफ के रूप में, यह दुर्भाग्यपूर्ण है कि ऐसे चयनकर्ता मौजूद नहीं हैं। पूरी तरह से कीबोर्ड सुलभ होने के लिए शुद्ध सीएसएस मेनू प्राप्त करना इसके बिना असंभव प्रतीत होता है (सिबलिंग चयनकर्ताओं का उपयोग करके आप नेस्टेड सूचियों का उपयोग करके बनाए गए सबमेनस बना सकते हैं, लेकिन एक बार सूची प्राप्त करने पर ध्यान केंद्रित करने पर यह फिर से छिप जाता है)। अगर इस विशेष शंकु के लिए कोई सीएसएस-केवल समाधान हैं

12
@Dominic Aquilina सवाल पर एक नज़र डालें, ओपी एक वर्ग का उपयोग कर रहा है, न कि छद्म चयनकर्ता।
jeroen

125

आप इस स्क्रिप्ट का उपयोग कर सकते हैं :

*! > input[type=text] { background: #000; }

यह टेक्स्ट इनपुट के किसी भी अभिभावक का चयन करेगा। लेकिन रुकिए, अभी और भी बहुत कुछ है। यदि आप चाहें, तो आप एक निर्दिष्ट माता-पिता का चयन कर सकते हैं:

.input-wrap! > input[type=text] { background: #000; }

या सक्रिय होने पर उसका चयन करें:

.input-wrap! > input[type=text]:focus { background: #000; }

इस HTML को देखें:

<div class="input-wrap">
    <input type="text" class="Name"/>
    <span class="help hide">Your name sir</span>
</div>

आप चुन सकते हैं कि span.helpकब inputसक्रिय है और इसे दिखाएं:

.input-wrap! .help > input[type=text]:focus { display: block; }

कई और क्षमताएं हैं; बस प्लगइन के प्रलेखन की जाँच करें।

BTW, यह इंटरनेट एक्सप्लोरर में काम करता है।


5
मान लें कि जेकरी का उपयोग patent()करना तेज होगा। हालाँकि, इसके परीक्षण की आवश्यकता है
Dan

2
@Idered यह विफल हो जाता है जब आपके पास कोई बच्चा चयनकर्ता ( #a!अकेले एक त्रुटि फेंकता है, #a! pकाम करता है) के साथ एक चयनकर्ता विषय की सीएसएस घोषणा होती है , और इसलिए अन्य लोग या तो काम नहीं करेंगे Uncaught TypeError: Cannot call method 'split' of undefined: jsfiddle.net/HerrSerker
-VkVPs

3
@ हेरसेकर मुझे लगता है कि # ए! अमान्य चयनकर्ता है, उसे क्या चुनना चाहिए?
१३

2
@ मुझे पता नहीं है। युक्ति यह नहीं कहती है कि यह अवैध है। #ए! खुद का चयन करना चाहिए। जावास्क्रिप्ट में कम से कम उनकी कोई त्रुटि नहीं होनी चाहिए
yunzen

5
स्वीकृत उत्तर पर मेरी टिप्पणी के अनुसार, ऐसा लगता है कि पॉलीफ़िल की आवश्यकता निकट भविष्य में भी आवश्यक हो सकती है, क्योंकि सीएसएस में ब्राउज़रों द्वारा विषय सूचक को कभी लागू नहीं किया जा सकता है।
BoltClock

108

जैसा कि दूसरों के एक जोड़े ने उल्लेख किया है, एक तत्व के माता-पिता को स्टाइल करने का एक तरीका नहीं है, बस सीएसएस का उपयोग करना है लेकिन निम्नलिखित काम करता है jQuery :

$("a.active").parents('li').css("property", "value");

21
<चयनकर्ता मौजूद नहीं है (jQuery 1.7.1 का उपयोग कर सत्यापित)।
रोब डब्ल्यू

6
शायद उस <-syntax ने 2009 में काम किया था लेकिन मैंने इसे (2013 के लिए) अपडेट किया है।
एलेस्टेयर

5
और भी बेहतर, jQuery के अंतर्निहित का उपयोग :has()चयनकर्ता : $("li:has(a.active)").css("property", "value");। यह CSS 4 के प्रस्तावित !चयनकर्ता के समान है। यह भी देखें: :parentचयनकर्ता , .parents()विधि , .parent()विधि
रोरी ओ'केन

7
और .css("property", "value")चयनित तत्वों की शैली का उपयोग करने के बजाय , आपको आमतौर पर .addClass("someClass")और अपने सीएसएस .someClass { property: value }(के माध्यम से ) में होना चाहिए । इस तरह, आप CSS की पूरी शक्ति और आपके द्वारा उपयोग किए जा रहे किसी भी पूर्वप्रक्रम के साथ शैली को सूचित नहीं कर सकते।
रोरी ओ'केन


69

कोई अभिभावक चयनकर्ता नहीं है; जिस तरह से पिछले सिबलिंग सिलेक्टर नहीं है। इन चयनकर्ताओं के नहीं होने का एक अच्छा कारण यह है कि ब्राउज़र को किसी तत्व के सभी बच्चों के माध्यम से यह निर्धारित करना है कि कक्षा को लागू किया जाना चाहिए या नहीं। उदाहरण के लिए, यदि आपने लिखा है:

body:contains-selector(a.active) { background: red; }

तब ब्राउज़र को तब तक इंतजार करना होगा जब तक यह लोड न हो जाए और सब कुछ पार्स न हो जाए, </body>यह निर्धारित करने के लिए कि पृष्ठ लाल होना चाहिए या नहीं।

लेख हमारे पास माता-पिता चयनकर्ता क्यों नहीं है, इसके बारे में विस्तार से बताते हैं।


11
इसलिए ब्राउज़र को तेज़ करें। इंटरनेट ही तेजी से। यह चयनकर्ता निश्चित रूप से आवश्यक है, और इसे लागू नहीं करने का कारण, दुख की बात है, क्योंकि हम एक धीमी, आदिम दुनिया में रहते हैं।
विस्कॉन्सिन

11
वास्तव में, चयनकर्ता बहुत तेज़ ब्राउज़र को धीमा दिखाई देगा।
सलमान एक

5
मुझे विश्वास है कि ब्राउज़र डेवलपर्स एक कार्यान्वयन के साथ आएंगे जो (कम से कम) जावास्क्रिप्ट संस्करण के रूप में तेज़ है, जो कि वैसे भी एक व्यक्ति का उपयोग करके समाप्त होता है।
मार्क.2377

"हम एक धीमी गति से, आदिम दुनिया में रहते हैं" खाँसी खाँसी नई सेब घड़ी खाँसी खांसी
मार्विन

@ Marc.2377 यदि आप अपनी वेबसाइट पर JS में उपरोक्त उदाहरण की कोशिश करते हैं, तो मैं इसे कभी नहीं देखूंगा। दूसरी तरफ, मैं कहूंगा कि ज्यादातर समय, आप केवल तत्काल बच्चों की परवाह करते हैं, इसलिए यदि यह केवल तत्काल बच्चों तक सीमित था, तो यह बहुत अधिक प्रभाव के बिना एक अच्छा अतिरिक्त होगा।
xryl669

54

वहाँ आप के लिए वर्ग जोड़ सकते हैं सीएसएस 2 में यह करने के लिए एक तरीका नहीं है liऔर संदर्भ a:

li.active > a {
    property: value;
}

3
एक तत्व प्रदर्शन करके: ब्लॉक करके आप इसे पूरे ली क्षेत्र में फिट करने के लिए स्टाइल कर सकते हैं। यदि आप बता सकते हैं कि आप किस शैली की तलाश कर रहे हैं तो शायद मैं एक समाधान के साथ मदद कर सकता हूं।
जोश

यह वास्तव में एक सरल और सुरुचिपूर्ण समाधान है और, कई मामलों में, यह माता-पिता पर कक्षा निर्धारित करने के लिए समझ में आता है।
रिकार्डो

35

प्रदर्शित aकरने के लिए स्विच करने का प्रयास करें block, और फिर अपनी इच्छित शैली का उपयोग करें। aतत्व भर जाएगा liतत्व है, और आप के रूप में आप चाहते हैं अपने रूप को संशोधित करने में सक्षम हो जाएगा। li0 पर पैडिंग सेट करना न भूलें ।

li {
  padding: 0;
  overflow: hidden;
}
a {
  display: block;
  width: 100%;
  color: ..., background: ..., border-radius: ..., etc...
}
a.active {
  color: ..., background: ...
}

31

CSS चयनकर्ता " जनरल सिबलिंग कॉम्बीनेटर " शायद आप जो चाहते हैं उसके लिए इस्तेमाल किया जा सकता है:

E ~ F {
    property: value;
}

यह किसी भी Fतत्व से मेल खाता है जो एक Eतत्व से पहले है ।


24
यह सिर्फ चयनकर्ता है, यह बच्चा, माता-पिता नहीं है ... वास्तव में इस सवाल का जवाब नहीं दे रहा है
एलिरेज़ा

26

सीएसएस 2 में नहीं जहाँ तक मैं जानता हूँ। CSS 3 में अधिक मजबूत चयनकर्ता हैं लेकिन सभी ब्राउज़रों में लगातार लागू नहीं होते हैं। यहां तक ​​कि बेहतर चयनकर्ताओं के साथ, मुझे विश्वास नहीं है कि यह वही होगा जो आपने अपने उदाहरण में निर्दिष्ट किया है।


24

मुझे पता है कि ओपी एक सीएसएस समाधान की तलाश में था लेकिन यह jQuery का उपयोग करके प्राप्त करना सरल है। मेरे मामले में मुझे बच्चे में निहित <ul>टैग के लिए मूल टैग खोजने की आवश्यकता थी । jQuery का चयनकर्ता है, इसलिए इसमें शामिल बच्चों द्वारा माता-पिता की पहचान करना संभव है:<span><li>:has

$("ul:has(#someId)")

उस ulतत्व का चयन करेगा जिसमें id someId के साथ एक बाल तत्व है । या मूल प्रश्न का उत्तर देने के लिए, निम्नलिखित की तरह कुछ करना चाहिए:

$("li:has(.active)")

3
या उपयोग करें $yourSpan.closest("ul")और आपको अपने स्पैन तत्व का मूल UL मिल जाएगा। फिर भी आपका जवाब पूरी तरह से अपमानजनक है। हम एक jQuery समाधान के साथ सीएसएस-टेड प्रश्नों के सभी का जवाब दे सकते हैं।
रॉबिन वैन बालन

1
जैसा कि अन्य उत्तरों में पहचाना गया है, CSS 2 का उपयोग करने का कोई तरीका नहीं है। उस बाधा को देखते हुए, मैंने जो उत्तर दिया है वह एक ऐसा है जो मुझे पता है कि प्रभावी है और जावास्क्रिप्ट imho का उपयोग करके प्रश्न का उत्तर देने का सबसे सरल तरीका है।
डेविड क्लार्क

आपके उत्थान को देखते हुए, कुछ लोग आपसे सहमत हैं। लेकिन एकमात्र उत्तर स्वीकृत एक ही रहता है; सादा और सरल "यह नहीं कर सकता जिस तरह से आप इसे चाहते हैं"। यदि सवाल यह है कि साइकिल पर 60mph को कैसे संग्रहीत किया जाए और आप इसे "सरल" के साथ उत्तर देते हैं, तो एक कार में जाओ और गैस को मारो। ", यह अभी भी एक जवाब नहीं है। इसलिए मेरी टिप्पणी।
रॉबिन वैन बालन

1
यह दृष्टिकोण SO को लगभग पूरी तरह से बेकार बना देगा। मैं समस्याओं को हल करने के लिए एसओ खोजता हूं, "केवल जवाब" खोजने के लिए नहीं मुद्दे को संबोधित करता है। यही कारण है कि एसओ इतना भयानक है, क्योंकि एक बिल्ली की त्वचा के लिए हमेशा एक से अधिक तरीके होते हैं।
डेविड क्लार्क

23

छद्म तत्व :focus-withinएक अभिभावक का चयन करने की अनुमति देता है अगर एक वंशज का ध्यान केंद्रित हो।

एक तत्व पर ध्यान केंद्रित किया जा सकता है अगर इसमें एक tabindexविशेषता है।

फोकस के भीतर ब्राउज़र का समर्थन

tabindex

उदाहरण

.click {
  cursor: pointer;
}

.color:focus-within .change {
  color: red;
}

.color:focus-within p {
  outline: 0;
}
<div class="color">
  <p class="change" tabindex="0">
    I will change color
  </p>
  <p class="click" tabindex="1">
    Click me
  </p>
</div>


2
यह मेरे मामले में ठीक काम करता है, धन्यवाद! यदि आप माता-पिता को रंग बदलते हैं, तो भाई-बहन को नहीं, यह बदले के .color:focus-within .changeसाथ बदल जाएगा .color:focus-within। मेरे मामले में मैं बूटस्ट्रैप नव-बार का उपयोग कर रहा हूं जो सक्रिय होने पर बच्चों को कक्षा जोड़ता है और मैं माता-पिता के लिए एक वर्ग जोड़ना चाहता हूं। मुझे लगता है कि यह एक बहुत ही सामान्य परिदृश्य है जहां मैं मार्कअप का मालिक हूं लेकिन घटक सीएसएस + जेएस बूटस्ट्रैप (या अन्य) है, इसलिए मैं व्यवहार को नहीं बदल सकता। हालांकि मैं टैबइंडेक्स जोड़ सकता हूं और इस सीएसएस का उपयोग कर सकता हूं। धन्यवाद!
कर्कबरो

22

यह चयनकर्ता स्तर 4 विनिर्देशन का सबसे चर्चित पहलू है । इसके साथ, एक चयनकर्ता दिए गए चयनकर्ता (!) के बाद विस्मयादिबोधक चिह्न का उपयोग करके अपने बच्चे के अनुसार एक तत्व को स्टाइल करने में सक्षम होगा।

उदाहरण के लिए:

body! a:hover{
   background: red;
}

यदि उपयोगकर्ता किसी भी एंकर पर मंडराता है तो लाल पृष्ठभूमि-रंग सेट करेगा।

लेकिन हमें ब्राउज़र के कार्यान्वयन के लिए इंतजार करना होगा :(


21

आप पेरेंट के रूप में हाइपरलिंक का उपयोग करने की कोशिश कर सकते हैं, और फिर होवर पर आंतरिक तत्वों को बदल सकते हैं। ऐशे ही:

a.active h1 {color:red;}

a.active:hover h1 {color:green;}

a.active h2 {color:blue;}

a.active:hover h1 {color:yellow;}

इस तरह आप मूल तत्व के रोलओवर के आधार पर कई आंतरिक टैग में शैली को बदल सकते हैं।


1
यह सही है, लेकिन aटैग के भीतर मार्कअप कोड को केवल कुछ तत्वों तक सीमित करता है , यदि आप XHTML मानकों के अनुरूप होना चाहते हैं। उदाहरण के लिए, आप स्कीमा के उल्लंघन की चेतावनी प्राप्त किए बिना, divभीतर का उपयोग नहीं कर सकते a
Ivaylo Slavov

2
टोटल राइट आइवालो! "a" एक गैर-ब्लॉक तत्व है, इसलिए इसके अंदर ब्लॉक तत्वों का उपयोग नहीं किया जा सकता है।
रिवरस्टॉर्म

1
HTML5 में लिंक के अंदर ब्लॉक एलिमेंट्स डालना पूरी तरह से ठीक है।
मैथ्यू जेम्स टेलर

2
... यदि यह शब्द गलत था, तो उन्होंने इसे HTML5 में अनुमति नहीं दी थी, जहां यह पहले नहीं था।
BoltClock

14

वर्तमान में कोई अभिभावक चयनकर्ता नहीं है और W3C की किसी भी वार्ता में इसकी चर्चा भी नहीं की जा रही है। आपको यह समझने की आवश्यकता है कि ब्राउज़र द्वारा सीएसएस का मूल्यांकन कैसे किया जाता है वास्तव में यह समझने के लिए कि हमें इसकी आवश्यकता है या नहीं।

यहां बहुत सारी तकनीकी व्याख्या है।

जोनाथन स्नूक बताते हैं कि सीएसएस का मूल्यांकन कैसे किया जाता है

पैरेंट सिलेक्टर की बातचीत पर क्रिस कॉयर

हैरी रॉबर्ट फिर से कुशल सीएसएस चयनकर्ताओं के लेखन पर

लेकिन निकोल सुलिवन के सकारात्मक रुझानों पर कुछ दिलचस्प तथ्य हैं

ये लोग फ्रंट एंड डेवलपमेंट के क्षेत्र में सभी टॉप क्लास हैं।


12
needवेब डेवलपर्स की आवश्यकताओं द्वारा परिभाषित किया गया है, चाहे वह पाने के लिए कल्पना अन्य कारकों से निर्धारित होता है।
निकोडेमस 13

14

क्षैतिज मेनू के लिए बस एक विचार ...

HTML का हिस्सा

<div class='list'>
  <div class='item'>
    <a>Link</a>
  </div>
  <div class='parent-background'></div>
  <!-- submenu takes this place -->
</div>

सीएसएस का हिस्सा

/* Hide parent backgrounds... */
.parent-background {
  display: none; }

/* ... and show it when hover on children */
.item:hover + .parent-background {
  display: block;
  position: absolute;
  z-index: 10;
  top: 0;
  width: 100%; }

अपडेटेड डेमो और बाकी कोड

एक और उदाहरण है कि इसे टेक्स्ट-इनपुट के साथ कैसे उपयोग किया जाए - मूल फ़ील्ड चुनें


3
यह मेरे लिए बिल्कुल भी स्पष्ट नहीं है कि आप इसका मतलब कुछ / कई / अधिकांश माता-पिता चयनकर्ताओं के मामलों का सामान्यीकरण कैसे कर सकते हैं, या यहां तक ​​कि वास्तव में इस सीएसएस के कौन से हिस्से क्या कर रहे हैं। क्या आप पूरी तरह से स्पष्टीकरण जोड़ सकते हैं?
नाथन टग्गी

2
मैंने इसे वास्तविक दुनिया के परिदृश्यों पर लागू करने की कोशिश नहीं की, यही कारण है कि मैं कहता हूं "उत्पादन के लिए नहीं"। लेकिन मुझे लगता है कि इसे 2-स्तर मेनू पर केवल निश्चित आइटम चौड़ाई के साथ लागू किया जा सकता है। "इस सीएसएस के कौन से हिस्से क्या कर रहे हैं" - यहाँ पर सबसे ज्यादा सिबलिंग वास्तव में पेरेंट आइटम (सीएसएस की अंतिम पंक्ति) की पृष्ठभूमि है।
इल्या बी।

2
जोड़ा स्पष्टीकरण (jsfiddle का सीएसएस अनुभाग, "मुख्य भाग" से शुरू) ... और मुझसे गलती हुई थी - किसी भी संख्या में sublevels हो सकते हैं।
इल्या बी।

13

यहाँ एक हैक का उपयोग कर रहा pointer-eventsहै hover:

<!doctype html>
<html>
	<head>
		<title></title>
		<style>
/* accessory */
.parent {
	width: 200px;
	height: 200px;
	background: gray;
}
.parent, 
.selector {
	display: flex;
	justify-content: center;
	align-items: center;
}
.selector {
	cursor: pointer;
	background: silver;
	width: 50%;
	height: 50%;
}
		</style>
		<style>
/* pertinent */
.parent {
	background: gray;
	pointer-events: none;
}
.parent:hover {
	background: fuchsia;
}
.parent 
.selector {
	pointer-events: auto;
}
		</style>
	</head>
	<body>
		<div class="parent">
			<div class="selector"></div>
		</div>
	</body>
</html>


12

एक प्लगइन है जो सीएसएस का विस्तार करता है जिसमें कुछ गैर-मानक विशेषताएं शामिल हैं जो वेबसाइटों को डिजाइन करते समय वास्तव में मदद कर सकती हैं। इसे EQCSS कहा जाता है ।

EQCSS चीजों में से एक माता-पिता का चयनकर्ता है। यह सभी ब्राउज़र, इंटरनेट एक्सप्लोरर 8 और इसके बाद के संस्करण में काम करता है। यहाँ प्रारूप है:

@element 'a.active' {
  $parent {
    background: red;
  }
}

इसलिए यहां हमने हर तत्व पर एक तत्व क्वेरी खोली है a.active, और उस क्वेरी के अंदर की शैलियों के लिए, चीजों $parentको समझ में आता है, क्योंकि एक संदर्भ बिंदु है। ब्राउज़र माता-पिता को ढूंढ सकता है, क्योंकि यह parentNodeजावास्क्रिप्ट में बहुत समान है ।

यहाँ एक डेमो$parent और दूसरा $parentडेमो है जो इंटरनेट एक्सप्लोरर 8 में काम करता है , साथ ही साथ एक स्क्रीनशॉट भी है जिसमें आपके पास परीक्षण करने के लिए इंटरनेट एक्सप्लोरर 8 नहीं है

EQCSS में मेटा-चयनकर्ता भी शामिल हैं : $prevएक चयनित तत्व से पहले तत्व के लिए और $thisकेवल उन तत्वों के लिए जो एक तत्व क्वेरी से मेल खाते हैं, और बहुत कुछ।


11

यह अब 2019 है, और सीएसएस नेस्टिंग मॉड्यूल के नवीनतम मसौदे में वास्तव में कुछ ऐसा है। @nestनियमों का परिचय ।

3.2। द नेस्टिंग एट-रूल: @nest

जबकि प्रत्यक्ष घोंसला अच्छा दिखता है, यह कुछ हद तक नाजुक है। कुछ मान्य नेस्टिंग चयनकर्ता, जैसे .foo &, को अस्वीकृत किया जाता है, और चयनकर्ता को कुछ तरीकों से संपादित करने से नियम को अनपेक्षित रूप से लागू किया जा सकता है। साथ ही, कुछ लोग घोंसले के शिकार को आसपास की घोषणाओं से नेत्रहीन रूप से अलग करने के लिए चुनौतीपूर्ण पाते हैं।

इन सभी मुद्दों में सहायता के लिए, यह विनिर्देश @nest नियम को परिभाषित करता है, जो शैली के घोंसले के नियमों को कम से कम प्रतिबंध लगाता है। इसका सिंटैक्स है:

@nest = @nest <selector> { <declaration-list> }

शैली नियम के लिए @nest नियम कार्यशील रूप से कार्य करता है: यह एक चयनकर्ता के साथ शुरू होता है, और उन घोषणाओं को शामिल करता है जो चयनकर्ताओं के तत्वों पर लागू होती हैं। अंतर केवल इतना है कि एक @nest नियम में उपयोग किया गया चयनकर्ता घोंसला युक्त होना चाहिए, जिसका अर्थ है कि इसमें कहीं एक घोंसले का चयनकर्ता है। चयनकर्ताओं की सूची घोंसले युक्त होती है यदि इसके सभी व्यक्तिगत जटिल चयनकर्ता घोंसले वाले होते हैं।

(ऊपर के URL से कॉपी और पेस्ट किया गया)।

इस विनिर्देश के तहत वैध चयनकर्ताओं का उदाहरण:

.foo {
  color: red;
  @nest & > .bar {
    color: blue;
  }
}
/* Equivalent to:
   .foo { color: red; }
   .foo > .bar { color: blue; }
 */

.foo {
  color: red;
  @nest .parent & {
    color: blue;
  }
}
/* Equivalent to:
   .foo { color: red; }
   .parent .foo { color: blue; }
 */

.foo {
  color: red;
  @nest :not(&) {
    color: blue;
  }
}
/* Equivalent to:
   .foo { color: red; }
   :not(.foo) { color: blue; }
 */

10

तकनीकी रूप से ऐसा करने का कोई सीधा तरीका नहीं है। हालाँकि, आप इसे jQuery या जावास्क्रिप्ट के साथ सॉर्ट कर सकते हैं।

हालाँकि, आप ऐसा कुछ भी कर सकते हैं।

a.active h1 {color: blue;}
a.active p {color: green;}

jQuery

$("a.active").parents('li').css("property", "value");

यदि आप इसे jQuery का उपयोग करके प्राप्त करना चाहते हैं, तो jQuery के माता-पिता चयनकर्ता के लिए संदर्भ है ।


9

W3C ने ऐसे चयनकर्ता को बाहर कर दिया क्योंकि विशाल प्रदर्शन प्रभाव के कारण यह एक ब्राउज़र पर होगा।


27
असत्य। क्योंकि DOM एक पेड़ है, उन्हें बच्चे के पास जाने से पहले माता-पिता के पास जाना है, इसलिए बस एक नोड वापस जाना है। oo
NullVoxPopuli 16

9
CSS चयनकर्ता एक कतार है इसलिए दस्तावेज़ XPath या DOM पदानुक्रम के बजाय चयनकर्ता आदेश का मूल्यांकन किया जाता है।
पॉल स्वेट्टे

3
@rgb कम से कम उन्होंने जो हमें बताया है।
यंगजेन

9

संक्षिप्त उत्तर सं है ; हमारे पास parent selectorCSS में इस स्तर पर नहीं है , लेकिन अगर आपको तत्वों या वर्गों को वैसे भी स्वैप नहीं करना है, तो दूसरा विकल्प जावास्क्रिप्ट का उपयोग कर रहा है। कुछ इस तरह:

var activeATag = Array.prototype.slice.call(document.querySelectorAll('a.active'));

activeATag.map(function(x) {
  if(x.parentNode.tagName === 'LI') {
    x.parentNode.style.color = 'red'; // Your property: value;
  }
});

या एक छोटा तरीका यदि आप अपने आवेदन में jQuery का उपयोग करते हैं:

$('a.active').parents('li').css('color', 'red'); // Your property: value;

5

हालाँकि वर्तमान में मानक CSS में कोई अभिभावक चयनकर्ता नहीं है, लेकिन मैं कुल्हाड़ी नामक एक (व्यक्तिगत) परियोजना पर काम कर रहा हूँ (यानी। संवर्धित CSS चयनकर्ता Syntax / ACSSSS ) जो इसके 7 नए चयनकर्ताओं में शामिल है:

  1. एक तत्काल माता-पिता चयनकर्ता <(जो विपरीत चयन को सक्षम बनाता है >)
  2. एक किसी भी पूर्वज चयनकर्ता ^ (जो करने के लिए विपरीत चयन सक्षम बनाता है [SPACE])

कुल्हाड़ी वर्तमान में विकास के एक अपेक्षाकृत प्रारंभिक बीटा चरण में है।

यहाँ एक डेमो देखें:

http://rounin.co.uk/projects/axe/axe2.html

(मानक चयनकर्ताओं के साथ बाईं ओर स्थित दो सूचियों की तुलना करें और कुल्हाड़ी चयनकर्ताओं के साथ दाईं ओर दो सूचियां)


3
परियोजना वर्तमान में एक प्रारंभिक बीटा चरण में है। आप कम से कम (वर्तमान में) अपने सीएसएस <script src="https://rouninmedia.github.io/axe/axe.js"></script>डॉक्यूमेंट में बहुत पहले से अपने सीएसएस शैलियों में कुल्हाड़ी चयनकर्ताओं को सक्रिय कर सकते हैं </body>
रौनिन

4

कम से कम सीएसएस 3 को शामिल करें और आप उस तरह का चयन नहीं कर सकते। लेकिन यह आजकल जावास्क्रिप्ट में बहुत आसानी से किया जा सकता है, आपको बस वेनिला जावास्क्रिप्ट को जोड़ने की आवश्यकता है, ध्यान दें कि कोड बहुत छोटा है।

cells = document.querySelectorAll('div');
[].forEach.call(cells, function (el) {
    //console.log(el.nodeName)
    if (el.hasChildNodes() && el.firstChild.nodeName=="A") {
        console.log(el)
    };
});
<div>Peter</div>
<div><a href="#">Jackson link</a></div>
<div>Philip</div>
<div><a href="#">Pullman link</a></div>


4

कोई विचार?

अगर यह कुछ जोड़ता है तो सीएसएस 4 फैंसी होगा पीछे की ओर चलने में हुक है । तब तक यह संभव है (हालांकि उचित नहीं ) उपयोग करने के लिए checkboxऔर / या radio inputएस सामान्य तरीके को तोड़ने के लिए जो चीजें जुड़ी हुई हैं, और इसके माध्यम से सीएसएस को अपने सामान्य दायरे से बाहर काम करने की भी अनुमति है ...

/* Hide things that may be latter shown */
.menu__checkbox__selection,
.menu__checkbox__style,
.menu__hidden {
  display: none;
  visibility: hidden;
  opacity: 0;
  filter: alpha(opacity=0); /* Old Microsoft opacity */
}


/* Base style for content and style menu */
.main__content {
  background-color: lightgray;
  color: black;
}

.menu__hidden {
  background-color: black;
  color: lightgray;
  /* Make list look not so _listy_ */
  list-style: none;
  padding-left: 5px;
}

.menu__option {
  box-sizing: content-box;
  display: block;
  position: static;
  z-index: auto;
}

/* &#9660; - \u2630 - Three Bars */
/*
.menu__trigger__selection::before {
  content: '\2630';
  display: inline-block;
}
*/

/* &#9660; - Down Arrow */
.menu__trigger__selection::after {
  content: "\25BC";
  display: inline-block;
  transform: rotate(90deg);
}


/* Customize to look more `select` like if you like */
.menu__trigger__style:hover,
.menu__trigger__style:active {
  cursor: pointer;
  background-color: darkgray;
  color: white;
}


/**
 * Things to do when checkboxes/radios are checked
 */

.menu__checkbox__selection:checked + .menu__trigger__selection::after,
.menu__checkbox__selection[checked] + .menu__trigger__selection::after {
  transform: rotate(0deg);
}

/* This bit is something that you may see elsewhere */
.menu__checkbox__selection:checked ~ .menu__hidden,
.menu__checkbox__selection[checked] ~ .menu__hidden {
  display: block;
  visibility: visible;
  opacity: 1;
  filter: alpha(opacity=100); /* Microsoft!? */
}


/**
 * Hacky CSS only changes based off non-inline checkboxes
 * ... AKA the stuff you cannot unsee after this...
 */
.menu__checkbox__style[id="style-default"]:checked ~ .main__content {
  background-color: lightgray;
  color: black;
}

.menu__checkbox__style[id="style-default"]:checked ~ .main__content .menu__trigger__style[for="style-default"] {
  color: darkorange;
}

.menu__checkbox__style[id="style-one"]:checked ~ .main__content {
  background-color: black;
  color: lightgray;
}

.menu__checkbox__style[id="style-one"]:checked ~ .main__content .menu__trigger__style[for="style-one"] {
  color: darkorange;
}

.menu__checkbox__style[id="style-two"]:checked ~ .main__content {
  background-color: darkgreen;
  color: red;
}

.menu__checkbox__style[id="style-two"]:checked ~ .main__content .menu__trigger__style[for="style-two"] {
  color: darkorange;
}
<!--
  This bit works, but will one day cause troubles,
  but truth is you can stick checkbox/radio inputs
  just about anywhere and then call them by id with
  a `for` label. Keep scrolling to see what I mean
-->
<input type="radio"
       name="colorize"
       class="menu__checkbox__style"
       id="style-default">
<input type="radio"
       name="colorize"
       class="menu__checkbox__style"
       id="style-one">
<input type="radio"
       name="colorize"
       class="menu__checkbox__style"
       id="style-two">


<div class="main__content">

  <p class="paragraph__split">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
    quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
  </p>

  <input type="checkbox"
         class="menu__checkbox__selection"
         id="trigger-style-menu">
  <label for="trigger-style-menu"
         class="menu__trigger__selection"> Theme</label>

  <ul class="menu__hidden">
    <li class="menu__option">
      <label for="style-default"
             class="menu__trigger__style">Default Style</label>
    </li>

    <li class="menu__option">
      <label for="style-one"
             class="menu__trigger__style">First Alternative Style</label>
    </li>

    <li class="menu__option">
      <label for="style-two"
             class="menu__trigger__style">Second Alternative Style</label>
    </li>
  </ul>

  <p class="paragraph__split">
    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
    proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </p>

</div>

... सुंदर सकल , लेकिन सिर्फ सीएसएस के साथ और एचटीएमएल उसे स्पर्श करें और फिर से स्पर्श कुछ भी संभव है, लेकिन bodyऔर :rootजोड़ने के द्वारा बस के बारे में कहीं से भी idऔर forके गुणों radio/ checkbox inputs और label चलाता ; संभावना है कि कोई दिखाएगा कि किसी बिंदु पर उन लोगों को कैसे फिर से स्पर्श किया जाए।

एक अतिरिक्त चेतावनी यह है कि केवल एक input विशिष्ट idउपयोग किए जाने वाले एक, पहले checkbox/ दूसरे शब्दों में एक भीगे हुए राज्य को radio जीतता है ... लेकिन कई लेबल सभी को एक ही इंगित कर सकते हैं input, हालांकि यह एचटीएमएल और सीएसएस दोनों को भी ग्रॉसर दिखाई देगा।


... मैं उम्मीद कर रहा हूं कि सीएसएस लेवल 2 के मूल में मौजूद कुछ प्रकार के वर्कअराउंड हैं ...

मुझे अन्य :चयनकर्ताओं के बारे में निश्चित नहीं है , लेकिन मैं :checkedप्री-सीएसएस 3 के लिए। अगर मुझे सही याद है, तो यह कुछ ऐसा था, [checked]जिसके कारण आप इसे उपरोक्त कोड में पा सकते हैं, उदाहरण के लिए,

.menu__checkbox__selection:checked ~ .menu__hidden,
.menu__checkbox__selection[checked] ~ .menu__hidden {
 /* rules: and-stuff; */
}

... लेकिन जैसी चीजों के लिए ::afterऔर:hover , मैं बिल्कुल भी निश्चित नहीं हूं जिसमें सीएसएस संस्करण पहली बार दिखाई दिए।

सभी ने कहा, कृपया उत्पादन में कभी भी इसका उपयोग न करें, क्रोध में भी नहीं। एक मजाक के रूप में, या दूसरे शब्दों में सिर्फ इसलिए कि कुछ किया जा सकता है इसका मतलब हमेशा यह नहीं होना चाहिए


3

नहीं, आप केवल CSS में माता-पिता का चयन नहीं कर सकते।

लेकिन जैसा कि आपको लगता है कि पहले से ही एक .activeवर्ग है, उस वर्ग को li(के बजाय a) स्थानांतरित करना आसान होगा । इस तरह से आप केवल CSS liके aमाध्यम से और इसके माध्यम से दोनों का उपयोग कर सकते हैं ।


1

बाल तत्व के आधार पर मूल तत्व को बदलना वर्तमान में केवल तभी हो सकता है जब हमारे पास ए <input> मूल तत्व के अंदर तत्व हो। जब किसी इनपुट पर ध्यान दिया जाता है, तो उसका संबंधित मूल तत्व CSS का उपयोग करके प्रभावित हो सकता है।

निम्नलिखित उदाहरण आपको :focus-withinCSS में उपयोग करने में समझने में मदद करेंगे ।

.outer-div {
  width: 400px;
  height: 400px;
  padding: 50px;
  float: left
}

.outer-div:focus-within {
  background: red;
}

.inner-div {
  width: 200px;
  height: 200px;
  float: left;
  background: yellow;
  padding: 50px;
}
<div class="outer-div">
  <div class="inner-div">
    I want to change outer-div(Background color) class based on inner-div. Is it possible?
    <input type="text" placeholder="Name" />
  </div>
</div>


1

यह सास में एम्परसेंड के साथ संभव है :

h3
  font-size: 20px
  margin-bottom: 10px
  .some-parent-selector &
    font-size: 24px
    margin-bottom: 20px

सीएसएस उत्पादन:

h3 {
  font-size: 20px;
  margin-bottom: 10px;
}
.some-parent-selector h3 {
  font-size: 24px;
  margin-bottom: 20px;
}

2
यह सच है, लेकिन केवल अगर आप चयनकर्ता को पहले से जानते हैं।
शाहर

11
यह माता-पिता का चयन नहीं करता है h3, जो कि लक्ष्य था। यह एस का चयन करेगा h3जो के वंशज हैं .some-parent-selector
जैकब फोर्ड

1

मैं ऐसा करने के लिए कुछ जावास्क्रिप्ट कोड रखूँगा। उदाहरण के लिए, प्रतिक्रिया में जब आप एक सरणी पर पुनरावृत्ति करते हैं, तो मूल घटक में एक और वर्ग जोड़ें, जो यह दर्शाता है कि इसमें आपके बच्चे शामिल हैं:

<div className={`parent ${hasKiddos ? 'has-kiddos' : ''}`}>
    {kiddos.map(kid => <div key={kid.id} />)}
</div>

और फिर बस:

.parent {
    color: #000;
}

.parent.has-kiddos {
    color: red;
}

0

कोई सीएसएस (और इसलिए सीएसएस प्रीप्रोसेसर्स में) अभिभावक चयनकर्ता के कारण "सीएसएस वर्किंग ग्रुप के प्रमुख कारणों में पहले से पेरेंट चयनकर्ताओं के प्रस्तावों को खारिज करना ब्राउज़र प्रदर्शन और वृद्धिशील प्रतिपादन मुद्दों से संबंधित हैं।"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.