5 सीएसएस स्निपेट, जिनके बारे में हर फ़्रंट-एंड डेवलपर को साल 2024 में पता होना चाहिए

टूलबेल्ट योग्य, सशक्त और स्थायी CSS जिसका आज आप उपयोग कर सकते हैं.

मेरा मानना है कि हर फ़्रंट-एंड डेवलपर को यह पता होना चाहिए कि :has(), "पैरंट सिलेक्टर" से कहीं ज़्यादा है, subgrid कैसे और क्यों करें, बिल्ट-इन सीएसएस सिंटैक्स के साथ कैसे नेस्ट करें, ब्राउज़र बैलेंस हेडलाइन टेक्स्ट को रैप करने का तरीका, और कंटेनर क्वेरी यूनिट का इस्तेमाल कैसे करें.

इस पोस्ट में, पिछले साल के ऐसे छह सीएसएस स्निपेट दिए गए हैं जिनके बारे में हर फ़्रंट-एंड डेवलपर को 2023 में पता होना चाहिए.

CSS:has(.potential-beyond-being-a-parent-selector)

:has()

ब्राउज़र सहायता

  • 105
  • 105
  • 121
  • 15.4

सोर्स

साल 2023 के आखिर में, :has() सभी मुख्य ब्राउज़र पर उपलब्ध हो गया! यह नया सिलेक्टर छोटा और आम नहीं लगता है, लेकिन इसके इस्तेमाल के सभी उदाहरणों को देखकर आपको हैरानी होगी: गेम, रिऐक्टिविटी, कॉन्टेंट अवेयर लेआउट, स्मार्ट कॉम्पोनेंट वगैरह. इनके बारे में जे के इस लेख में अच्छी तरह से बताया गया है.

चार पैनल दिखाए गए हैं. हर पैनल में इमेज और कैप्शन है.
हर इमेज में दिखाया गया है कि एक दिमागी की ताकत बढ़ती जा रही है. पहले पैनल में :has() लिखा है. दूसरे पैनल में, पैरंट सिलेक्टर के तौर पर फ़िगर:has(caption) है.
तीसरा पैनल, संख्या चुनने के विकल्प के तौर पर .layout:has(> :nth-child(5)) बताता है.
फ़ोर्थ पैनल में कहा गया है कि html:has(#check) .new-subject, कंडीशनल सब्जेक्ट चेंजिंग सिलेक्टर के रूप में.

पैरंट सिलेक्टर के तौर पर :has() का इस्तेमाल करने के कुछ उदाहरण यहां दिए गए हैं. इसे यह नाम इसलिए मिला है, क्योंकि आम तौर पर सिलेक्टर का विषय आखिर में होता है. जैसे, ul li, जहां li सब्जेक्ट है और यह स्टाइल के बारे में बताता है. :has() का इस्तेमाल करने पर, सिलेक्टर की शुरुआत में मौजूद एलिमेंट विषय बन सकता है. नीचे दिए गए उदाहरण में, अगर .icon क्लास वाला कोई एलिमेंट है, तो बटन में गैप है. अगर अंदर कोई इमेज है, तो कार्ड का ओरिएंटेशन बदल जाता है.

button:has(.icon) {
  gap: 1ch;
}

.card:has(img) {
  grid-auto-flow: row;
}

एक लंबा सिलेक्टर, लेआउट को इस आधार पर बदलना है कि उसमें कितने आइटम हैं. अब :has() के साथ ऐसा किया जा सकता है, क्योंकि यह बच्चों की संख्या के बारे में क्वेरी करने के दौरान, कंटेनर को विषय के तौर पर रख सकता है.

main:has(> :nth-child(5)) {…}

इससे ऊंचे स्तर का एक और उदाहरण, पेज पर कोई खास चेकबॉक्स चालू होने पर पूरे दस्तावेज़ पर सेट की गई स्टाइल बदलें:

html:has(#dark-mode:checked) {…}

इस्तेमाल के इन आसान उदाहरणों से सिलेक्टर के विषय में कोई बदलाव नहीं होता. अगर आप इस तरह के उदाहरण देखें, तो आपको लग सकता है कि :has() को सिर्फ़ पैरंट सिलेक्टर बनाया जा सकता है. हालांकि, नीचे दिए गए उदाहरणों पर ध्यान दें. ये एक सामान्य पूर्वज के आधार पर किसी चीज़ की जांच करते हैं, फिर सिलेक्टर के विषय को पेज में कहीं ज़्यादा गहराई वाले बच्चे पर ले जाते हैं.

अगर इसका कोई भी इनपुट अमान्य है, तो यह फ़ॉर्म गड़बड़ी के एलिमेंट को दिखाता है:

form:has(:user-invalid) .error {
  display: block;
}

यह वीडियो उस सेक्शन के बारे में जानकारी देता है जहां किसी साइडनेव में .--is-open की क्लास होती है:

html:has(#sidenav.--is-open) main {
  translate: -320px;
}

यहां एक मज़ेदार डेमो दिया गया है. इसमें :has() को पैरंट सिलेक्टर के तौर पर, संख्या वाली क्वेरी के साथ :has(), और कंटेनर क्वेरी का इस्तेमाल करके ग्रिड लेआउट बनाया गया है, जिससे पोर्ट्रेट या लैंडस्केप ओरिएंटेशन में 1-12 एलिमेंट को शानदार तरीके से दिखाने के लिए, ग्रिड लेआउट बनाया जा सकता है:

Codepen को आज़माएं

सबग्रिड बनाना

subgrid

ब्राउज़र सहायता

  • 117
  • 117
  • 71
  • 16

सोर्स

कई सालों तक फ़्रंट-एंड वेब समुदाय ने बड़े पैमाने पर लोकप्रिय और ताकतवर सीएसएस ग्रिड लेआउट इंजन को पूरा करने और उसे पूरा करने के लिए सबग्रिड की मदद मांगी थी. फ़िलहाल, यह तीनों मुख्य इंजन के लिए उपलब्ध है.

अगर आपको खास जानकारी चाहिए, तो सबग्रिड के बारे में यहां ज़्यादा जानें.

body {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(30ch, 1fr));

  > article {
    display: grid;
    grid-row: span 4; 
    grid-template-rows: subgrid;
  }
}

सीएसएस को नेस्ट करें

nesting

ब्राउज़र सहायता

  • 120
  • 120
  • 117
  • 78 जीबी में से

सोर्स

पहले से मौजूद सीएसएस नेस्टिंग की सुविधा, साल 2023 में सभी मुख्य ब्राउज़र में उपलब्ध हो गई थी. यहां तक कि मैंने बिल्ड प्रोसेस को हटाने के लिए अपनी वेबसाइट को भी अपडेट किया, जिससे नेस्ट किए गए प्रोजेक्ट को हटाया जा सके. अब एक छोटी स्टाइलशीट भेजी जाती है! हां, नेस्टिंग वाली स्टाइलशीट छोटी होती हैं और सभी ब्राउज़र डेवटूल उसे दिखाने के लिए तैयार होते हैं.

पूरी जानकारी के लिए, सीएसएस नेस्टिंग सिंटैक्स यहां की खास जानकारी देखें. यहां दिए गए कोड के उदाहरण में, सिंटैक्स का एक उदाहरण दिया गया है.

.you {
  .can-totally-ship-this {
    &.if-you-wanted {
      /* it's VERY MUCH like SCSS */
      
      &:is(:hover, :focus-visible) {
        /* put a bird on it */
      }
    }
  }
}

.for-theming {
  @media (prefers-color-scheme: dark) {
    /* you can nest media queries */
  }
}

/* or for theming with [data-theme="dark"] */
.button {
  background: black;
  color: white;

  /* nest and do more than just append, flip it and reverse it */
  [data-theme="dark"] & {
    background: white;
    color: black;
  }
}

ब्राउज़र को हेडलाइन के बीच संतुलन बनाने दें

balance

ब्राउज़र सहायता

  • 114
  • 114
  • 121

सोर्स

pretty

ब्राउज़र सहायता

  • 117
  • 117
  • x
  • x

सोर्स

text-wrap: balance के बिना, डेवलपर और कॉपी राइटर को लाइन ब्रेक हिंट जैसे कि <wbr> एलिमेंट या &shy; पर छोड़ दिया जाता है. यह ज़्यादातर हारने वाला अनुभव होता है, क्योंकि कॉन्टेंट का अनुवाद होने, उसे ज़ूम करने या उसमें किसी भी तरह का बदलाव किए जाने के बाद, इस बात की कोई गारंटी नहीं होती कि कॉन्टेंट को नए प्रज़ेंटेशन के लिए सही जगह पर दिखाया जाएगा.

संतुलित टेक्स्ट रैपिंग के साथ, आप इस काम को ब्राउज़र पर छोड़ सकते हैं. नीचे दिए गए कोडपेन में तुलना देखी जा सकती है.

कंटेनर क्वेरी यूनिट का इस्तेमाल करें

cqw

ब्राउज़र सहायता

  • 105
  • 105
  • 110
  • 16

सोर्स

पिछले साल की एक पोस्ट में बताया गया था कि हर फ़्रंट-एंड डेवलपर को कंटेनर क्वेरी लिखने का तरीका जानना चाहिए. अगर आप अभी तक नहीं सीखे हैं, तो साल 2024 को कदम उठाने का आनंद लें. साथ ही, कंटेनर क्वेरी यूनिट भी देखें. खास जानकारी के तौर पर, अहमद शेदीद ने 2021 में कंटेनर क्वेरी यूनिट के बारे में एक शानदार लेख लिखा.

मुहैया कराने के लिए, छह नई कॉटेंटर क्यूरी यूनिट उपलब्ध हैं:

  1. इनलाइन वैरिएंट cqi.
  2. चौड़ाई वाला वैरिएंट cqw.
  3. ब्लॉक वैरिएंट cqb.
  4. ऊंचाई का वैरिएंट cqh.
  5. cqmin की जो भी लंबाई कम हो उसका वैरिएंट.
  6. cqmax की जो भी लंबाई हो, उसका वैरिएंट.

किसी कंटेनर से मिलते-जुलते और स्वाभाविक ऐनिमेशन बनाने के लिए एक स्थिति मानें. ऐसा चाइल्ड एलिमेंट जो 100cqi का इस्तेमाल करके कंटेनर के कंटेनर से पूरी तरह बाहर आ जाता है. यह कंटेनर के इनलाइन साइज़ का 100% है.

@keyframes slide-out-of-container {
  to {
    translate: -100cqi;
  }
}

यहां कंटेनर रिस्पॉन्सिव टाइपोग्राफ़ी वाला एक कार्ड दिया गया है. साथ ही, एक इमेज दी गई है, जो कंटेनर के ओरिएंटेशन के हिसाब से अडजस्ट होती है. अगर ओरिएंटेशन लैंडस्केप है, तो उसका साइज़ आधा हो जाता है.

.card {
  :is(h2,h3) {
    font-size: clamp(1.5rem, 5cqi, 4rem);
  }

  img {
    inline-size: 100cqi;

    @container (orientation: landscape) {
      inline-size: 50cqi;
    }
  }
}

अगर ये यूनिट हाल ही में आपके लिए उपलब्ध हैं, तो 2024 में आपके लिए उपलब्ध सभी यूनिट की समीक्षा करें.