Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> CSS

CSS और HTML से पैरेंट को स्टाइल करना अगर उसके पास चाइल्ड है

समस्या

CSS3 में **पैरेंट सेलेक्टर** नहीं है। पैरेंट को उसके चाइल्ड के आधार पर स्टाइल नहीं किया जा सकता।

प्रस्तावित CSS4 समाधान

/* CSS4 विषय चयनकर्ता ($) - अभी तक लागू नहीं */
ul $li ul.sub { ... }  /* li जिसमें ul.sub है, उसे चुनें */

वर्तमान समाधान

1. JavaScript/jQuery (सबसे आम)

// jQuery - :has() सेलेक्टर
$('ul li:has(ul.sub)').addClass('has-sub');

// Vanilla JS
document.querySelectorAll('ul li').forEach(li => {
    if (li.querySelector('ul.sub')) {
        li.classList.add('has-sub');
    }
});

// CSS फिर
// li.has-sub { background: yellow; }

2. CSS-ओनली वर्कअराउंड्स

क) चाइल्ड के आधार पर पैरेंट स्टाइल (सीमित)

/* अगर चाइल्ड अंतिम है */
.parent:last-child { ... }

/* अगर चाइल्ड विशिष्ट प्रकार का है */
.parent > .special-child { ... }  /* पैरेंट नहीं, चाइल्ड स्टाइल होता है */

/* फोकस-विदिन (इंटरैक्टिव) */
.form:focus-within { border-color: blue; }  /* इनपुट फोकस होने पर फॉर्म स्टाइल */

ख) :has() प्सूडो-क्लास (CSS Selectors Level 4 - आधुनिक ब्राउज़र्स)

/* आधुनिक ब्राउज़र्स में काम करता है (Safari 15.4+, Chrome 105+, Firefox 121+) */
ul:has(li > ul.sub) { 
    border: 2px solid red; 
}

li:has(ul.sub) {
    background: yellow;
}

/* फॉर्म वैलिडेशन */
form:has(input:invalid) {
    border: 2px solid red;
}

3. HTML संरचना बदलें

<!-- क्लास को पैरेंट पर रखें -->
<ul class="has-sub">
    <li>Item</li>
    <li><ul class="sub">...</ul></li>
</ul>

ब्राउज़र सपोर्ट: :has()

ब्राउज़रसंस्करणस्थिति
Chrome105+✅ सपोर्टेड
Firefox121+✅ सपोर्टेड
Safari15.4+✅ सपोर्टेड
Edge105+✅ सपोर्टेड

सिफारिश

  1. आधुनिक प्रोजेक्ट्स: `:has()` उपयोग करें (प्रोग्रेसिव एन्हांसमेंट के साथ)
  2. लीगेसी सपोर्ट: जावास्क्रिप्ट से क्लास टॉगल करें
  3. डिजाइन चरण: HTML संरचना में पैरेंट क्लास जोड़ें
  1. CSS से अंतिम चाइल्ड से गिनती करके nth <p> एलिमेंट को स्टाइल करें CSS से अंतिम चाइल्ड से गिनती करके nth <p> एलिमेंट को स्टाइल करें

    :nth-last-child(n) सेलेक्टर का उपयोग यह सेलेक्टर पैरेंट के अंतिम चाइल्ड से गिनती करके nth चाइल्ड को सिलेक्ट करता है, चाहे उसका टाइप कुछ भी हो। उदाहरण <!DOCTYPE html> <html> <head> <style> p:nth-last-child(4) { background: blue; color: white;

  1. CSS से केवल चाइल्ड वाले पैरेंट के <p> एलिमेंट को स्टाइल करें CSS से केवल चाइल्ड वाले पैरेंट के <p> एलिमेंट को स्टाइल करें

    :only-child सेलेक्टर का उपयोग :only-child सेलेक्टर उस एलिमेंट को सिलेक्ट करता है जो अपने पैरेंट का **एकमात्र चाइल्ड** हो (कोई अन्य चाइल्ड न हो, किसी भी टाइप का)। उदाहरण <!DOCTYPE html> <html> <head> <style> p:only-child { background: orange; } &

  1. CSS में टेक्स्ट सजावट की शैली सेट करें CSS में टेक्स्ट सजावट की शैली सेट करें

    टेक्स्ट सजावट की शैली सेट करने के लिए text-decoration-style प्रॉपर्टी का उपयोग करें। आप निम्न मानों का उपयोग कर सकते हैं: text-decoration-style: solid | double | dotted | dashed | wavy | initial | inherit; उदाहरण <!DOCTYPE html> <html> <head> <style> span {