स्पेसिंग

सीएसएस पॉडकास्ट - 013: स्पेसिंग

मान लें कि आपके पास तीन बॉक्स का एक संग्रह है, जो एक-दूसरे के ऊपर रखे गए हैं और आपको उनके बीच स्पेस रखना है. सीएसएस में इसे कितने तरीकों से किया जा सकता है?

स्टैक किए गए तीन बॉक्स, जिनमें डाउन ऐरो है

margin प्रॉपर्टी से आपको ज़रूरत के हिसाब से जानकारी हो सकती है, लेकिन यह ऐसे स्पेस भी जोड़ सकता है जो आपको नहीं चाहिए. उदाहरण के लिए, इन एलिमेंट में से हर के बीच स्पेस को कैसे टारगेट किया जाता है? इस मामले में, gap जैसी जानकारी ज़्यादा काम की हो सकती है. यूज़र इंटरफ़ेस (यूआई) में स्पेसिंग को घटाने या बढ़ाने के कई तरीके हैं. हर एक तरीके की अपनी खूबियां और चेतावनियां हैं.

HTML रिक्ति

स्पेस एलिमेंट के लिए कुछ तरीके एचटीएमएल खुद ही देता है. <br> और <hr> एलिमेंट से ब्लॉक की दिशा में एलिमेंट को स्पेस में रखा जा सकता है. अगर लैटिन भाषा की भाषा का इस्तेमाल किया जा रहा है, तो एलिमेंट को ऊपर से नीचे की ओर ले जाया जा सकता है.

अगर <br> एलिमेंट का इस्तेमाल किया जाता है, तो यह एक लाइन ब्रेक बनाएगा. यह बिलकुल वैसा ही होता है जैसे किसी वर्ड प्रोसेसर में Enter बटन दबाने पर किया जाता है.

<hr>, किसी भी तरफ़ स्पेस वाली एक हॉरिज़ॉन्टल लाइन बनाता है. इसे margin कहा जाता है.

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

मार्जिन

अगर आपको किसी एलिमेंट के बाहर स्पेस जोड़ना है, तो margin प्रॉपर्टी का इस्तेमाल करें. मार्जिन अपने एलिमेंट के चारों ओर एक तकिया जोड़ने जैसा है. margin प्रॉपर्टी, margin-top, margin-right, margin-bottom, और margin-left के लिए शॉर्टहैंड है.

बॉक्स मॉडल के चार मुख्य क्षेत्रों का डायग्राम.

margin शॉर्टहैंड, प्रॉपर्टी को एक खास क्रम में लागू करता है: ऊपर, दाएं, नीचे, और बाईं ओर. इन्हें याद रखने में परेशानी होती है: TRouBLe.

&#39;ट्रबल&#39; शब्द नीचे की ओर T, R, B और L
ऊपर, दाएं, नीचे, और बाएं तरफ़ बढ़ता है.
एक बॉक्स, जिसमें दिशा-निर्देश भी दिख रहे हैं.

margin शॉर्टहैंड का इस्तेमाल एक, दो या तीन वैल्यू के साथ भी किया जा सकता है. चौथा वैल्यू जोड़ने से, हर साइड को अलग से सेट किया जा सकता है. इन्हें इस तरह लागू किया जाता है:

  • सभी तरफ़ एक वैल्यू लागू हो जाएगी. (margin: 20px).
  • दो वैल्यू: पहली वैल्यू ऊपर और नीचे, जबकि दूसरी वैल्यू को बाईं और दाईं तरफ़ से लागू किया जाएगा. (margin: 20px 40px)
  • तीन वैल्यू: पहली वैल्यू top, दूसरी वैल्यू left और right है, और तीसरी वैल्यू bottom है. (margin: 20px 40px 30px).

मार्जिन को लंबाई, प्रतिशत या अपने-आप तय होने वाली वैल्यू से तय किया जा सकता है, जैसे कि 1em या 20%. अगर प्रतिशत का इस्तेमाल किया जाता है, तो वैल्यू का हिसाब आपके एलिमेंट में मौजूद ब्लॉक की चौड़ाई के आधार पर लगाया जाएगा.

इसका मतलब है कि अगर आपके एलिमेंट वाले ब्लॉक की चौड़ाई 250px और आपके एलिमेंट की margin वैल्यू 20% है: आपके एलिमेंट के हर तरफ़ का परिकलित मार्जिन 50px होगा.

मार्जिन के लिए, auto वैल्यू का भी इस्तेमाल किया जा सकता है. सीमित साइज़ वाले ब्लॉक लेवल एलिमेंट के लिए, auto मार्जिन उस दिशा में उपलब्ध जगह लेगा जहां इसे लागू किया गया है. flexbox मॉड्यूल से, यह एक अच्छा उदाहरण है, जहां आइटम एक-दूसरे से दूर जाते हैं.

auto मार्जिन का एक और अच्छा उदाहरण, हॉरिज़ॉन्टल तौर पर सेंटर किया गया रैपर है. इसकी चौड़ाई ज़्यादा से ज़्यादा है. इस तरह के रैपर का इस्तेमाल, अक्सर वेबसाइट पर बीच में एक जैसा कॉलम बनाने के लिए किया जाता है.

.wrapper {
    max-width: 400px;
    margin: 0 auto;
}

यहां, ऊपर और नीचे (ब्लॉक) किनारों से मार्जिन हटा दिया जाता है और auto बाईं और दाईं ओर (इनलाइन) किनारों के बीच के स्पेस को शेयर करता है.

नेगेटिव मार्जिन

मार्जिन के लिए भी नेगेटिव वैल्यू का इस्तेमाल किया जा सकता है. पास के सिबलिंग एलिमेंट के बीच स्पेस जोड़ने के बजाय, यह उनके बीच स्पेस कम कर देगा. अगर नेगेटिव वैल्यू, उपलब्ध स्पेस से ज़्यादा है, तो एलिमेंट ओवरलैप हो सकते हैं.

मार्जिन छोटा करें

मार्जिन छोटा करना एक मुश्किल कॉन्सेप्ट है, लेकिन इसे इंटरफ़ेस बनाते समय आम तौर पर इस्तेमाल किया जाएगा. मान लें कि आपके पास दो एलिमेंट हैं: एक हेडिंग और एक पैराग्राफ़, जिसमें वर्टिकल मार्जिन हो:

<article>
  <h1>My heading with teal margin</h1>
  <p>A paragraph of text that has blue margin on it, following the heading with margin.</p>
</article>
h1 {
    margin-bottom: 2rem;
}

p {
    margin-top: 3rem;
}

पहली नज़र में, आपको यह सोचकर माफ़ कर दिया जाएगा कि पैराग्राफ़ को शीर्षक से 5em की दूरी पर रखा जाएगा, क्योंकि 2rem और 3rem को मिलाकर 5rem की गिनती की जाती है. हालांकि, वर्टिकल मार्जिन कम हो जाता है, लेकिन असल में स्पेस 3rem होता है.

मार्जिन को छोटा करने की सुविधा, आस-पास के दो एलिमेंट की सबसे बड़ी वैल्यू को चुनकर काम करती है. इन एलिमेंट के किनारों पर वर्टिकल मार्जिन को सेट किया जाता है. h1 का निचला हिस्सा p के शीर्ष से मिलता है, इसलिए h1 के निचले मार्जिन और p के ऊपरी मार्जिन की सबसे बड़ी वैल्यू को चुना जाता है. अगर h1 में सबसे नीचे का मार्जिन 3.5rem होता, तो दोनों के बीच की जगह 3.5rem होगी, क्योंकि यह 3rem से ज़्यादा है. सिर्फ़ मार्जिन को छोटा करने से रोकें, इनलाइन (हॉरिज़ॉन्टल) मार्जिन को नहीं.

मार्जिन छोटा करने से भी खाली एलिमेंट को इस्तेमाल करने में मदद मिलती है. अगर आपके पास ऐसा पैराग्राफ़ है जिसमें ऊपरी और सबसे निचला मार्जिन 20px है, तो यह सिर्फ़ 20px स्पेस बनाएगा, 40px नहीं. अगर इस एलिमेंट के अंदर कुछ भी जोड़ा जाता है, जिसमें padding भी शामिल है, तो इसका मार्जिन अपने-आप छोटा नहीं होगा और इसे कॉन्टेंट वाले किसी भी बॉक्स की तरह माना जाएगा.

आपने जो सीखा है उसकी जांच करें

मार्जिन को कम करने के बारे में अपनी जानकारी की जांच करें

अगर दो एलिमेंट के ऊपर का मार्जिन 20 पिक्सल और नीचे का मार्जिन 30 पिक्सल है, तो उनके बीच कितनी जगह होगी?

10px
फिर से कोशिश करें!
20px
गलत जवाब
30px
हां, सीएसएस एलिमेंट के बीच ज़्यादा मार्जिन वाला स्पेस लेगा!
40px
फिर से कोशिश करें!

मार्जिन को छोटा होने से रोकना

अगर position: absolute का इस्तेमाल करके किसी एलिमेंट को बिलकुल सही जगह पर सेट किया जाता है, तो मार्जिन अब छोटा नहीं होगा. float प्रॉपर्टी का इस्तेमाल करने पर भी मार्जिन कम नहीं होगा.

अगर आपके पास ब्लॉक मार्जिन वाले दो एलिमेंट के बीच कोई मार्जिन नहीं है, तो मार्जिन भी छोटा नहीं होगा, क्योंकि ब्लॉक मार्जिन वाले दो एलिमेंट अब आस-पास के सिबलिंग नहीं हैं: वे सिर्फ़ सिबलिंग हैं.

लेआउट लेसन में आपने सीखा कि फ़्लेक्सबॉक्स और ग्रिड कंटेनर, ब्लॉक कंटेनर की तरह ही होते हैं, लेकिन अपने चाइल्ड एलिमेंट को काफ़ी अलग तरीके से हैंडल करते हैं. मार्जिन को छोटा करने पर भी ऐसा ही होता है.

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

मार्जिन और मार्जिन को समझना मुश्किल हो सकता है. लेकिन, उनके काम करने के तरीके को विस्तार से समझना बहुत काम का है. इसलिए, इस बारे में ज़्यादा जानकारी देने वाले का सुझाव दिया जाता है.

पैडिंग (जगह)

margin की तरह, अपने बॉक्स के बाहर स्पेस बनाने के बजाय, padding प्रॉपर्टी आपके बॉक्स के अंदर स्पेस बनाती है, जैसे कि इन्सुलेशन.

एक बॉक्स, जिसमें ऐरो का निशान है. इससे पता चल रहा है कि पैडिंग (जगह) एक बॉक्स के अंदर मौजूद है

इस बात के आधार पर कि किस बॉक्स मॉडल का इस्तेमाल किया जा रहा है—जिसे बॉक्स मॉडल लेसनpadding में फिर से शामिल किया गया था, एलिमेंट के सभी डाइमेंशन पर भी असर डाल सकता है.

padding प्रॉपर्टी, padding-top, padding-right, padding-bottom, और padding-left के लिए शॉर्टहैंड है. margin की तरह ही, padding में भी लॉजिकल प्रॉपर्टी हैं: padding-block-start, padding-inline-end, padding-block-end, और padding-inline-start.

स्थिति

साथ ही, इसे लेआउट मॉड्यूल में भी शामिल किया जाता है. अगर position के लिए ऐसी वैल्यू सेट की जाती है जो static के अलावा कोई और है, तो आपके पास top, right, bottom, और left प्रॉपर्टी के साथ स्पेस एलिमेंट इस्तेमाल करने का विकल्प होता है. ये दिशानिर्देश वाली वैल्यू के काम करने के तरीके में कुछ अंतर होते हैं:

  • position: relative वाला कोई एलिमेंट, दस्तावेज़ के फ़्लो में अपनी जगह बनाए रखेगा, भले ही आपने इन वैल्यू को सेट किया हो. ये नतीजे, आपके एलिमेंट की पोज़िशन के हिसाब से भी होंगे.
  • position: absolute वाला कोई एलिमेंट, मिलते-जुलते पैरंट की पोज़िशन के हिसाब से डायरेक्शनल वैल्यू पर आधारित होगा.
  • position: fixed वाला एलिमेंट, व्यूपोर्ट पर दिशा देने वाली वैल्यू आधारित करेगा.
  • position: sticky वाला कोई एलिमेंट, दिशा-निर्देश वाली वैल्यू सिर्फ़ तब लागू करेगा, जब वह डॉक की गई/अटकी हुई स्थिति में हो.

लॉजिकल प्रॉपर्टी मॉड्यूल में, आपको inset-block और inset-inline प्रॉपर्टी के बारे में जानकारी मिलती है. इनकी मदद से, राइटिंग मोड के हिसाब से डायरेक्शन वाली वैल्यू सेट की जा सकती हैं.

दोनों प्रॉपर्टी शॉर्टहैंड हैं, जो start और end वैल्यू को जोड़ती हैं. इस तरह, start और end या दो अलग-अलग वैल्यू के लिए, सेट की जाने वाली एक वैल्यू को स्वीकार किया जाता है.

ग्रिड और फ़्लेक्सबॉक्स

आखिर में, ग्रिड और फ़्लेक्सबॉक्स, दोनों में gap प्रॉपर्टी का इस्तेमाल करके, चाइल्ड एलिमेंट के बीच स्पेस बनाया जा सकता है. gap प्रॉपर्टी, row-gap और column-gap के लिए शॉर्टहैंड है. यह एक या दो वैल्यू स्वीकार करती है. ये लंबाई या प्रतिशत हो सकती हैं. आपके पास unset, initial, और inherit जैसे कीवर्ड का इस्तेमाल करने का भी विकल्प है. अगर सिर्फ़ एक वैल्यू तय की जाती है, तो पंक्तियों और कॉलम, दोनों पर एक ही gap लागू होगा. हालांकि, दोनों वैल्यू तय करने पर, पहली वैल्यू row-gap और दूसरी वैल्यू column-gap होगी.

फ़्लेक्सबॉक्स और ग्रिड, दोनों के साथ-साथ डिस्ट्रिब्यूशन और अलाइनमेंट की क्षमताओं का इस्तेमाल करके भी स्पेस बनाया जा सकता है. इन सुविधाओं के बारे में हम ग्रिड मॉड्यूल और flexbox मॉड्यूल में करेंगे.

अंतराल वाले ग्रिड का डायग्राम

शब्दों के बीच एक जैसा स्पेस रखें

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

उदाहरण के लिए, एलिमेंट के बीच के सभी गैटर के लिए, 20px को एक जैसा माप के तौर पर इस्तेमाल किया जा सकता है. इसे गटर भी कहा जाता है, ताकि सभी लेआउट एक जैसे दिखें और एक जैसे लग सकें. फ़्लो कॉन्टेंट के बीच वर्टिकल स्पेसिंग के तौर पर, 1em का इस्तेमाल भी किया जा सकता है. इससे एलिमेंट की font-size के हिसाब से, एक जैसा स्पेस मिलेगा. आप चाहे जो भी चुनें, आपको इन वैल्यू को वैरिएबल (या सीएसएस कस्टम प्रॉपर्टी) के तौर पर सेव करना चाहिए, ताकि उन वैल्यू को टोकनाइज़ किया जा सके और समानता को थोड़ा आसान बनाया जा सके.

एलिमेंट के बीच एक जैसी स्पेसिंग,
लेआउट के लिए 20px या फ़्लो कॉन्टेंट के लिए 1em का इस्तेमाल किया गया है.

:root {
  --gutter: 20px;
  --spacing: 1em;
}

h1 {
  margin-left: var(--gutter);
  margin-top: var(--spacing);
}

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

आपने जो सीखा है उसकी जांच करें

स्पेसिंग के बारे में अपनी जानकारी को परखें

शब्दों के बीच स्पेस देने के लिए एचटीएमएल का इस्तेमाल तब सुरक्षित होता है, जब...

यह सिर्फ़ एक है.
फिर से कोशिश करें!
किसी को सूचना नहीं मिलेगी.
फिर से कोशिश करें!
यह सिर्फ़ स्पेस के लिए है.
फिर से कोशिश करें!
इससे दस्तावेज़ को समझने में मदद मिलती है.
सही जवाब!

बॉक्स के अंदर स्पेस बनाने के लिए, इनका इस्तेमाल करें...

मार्जिन
मार्जिन को बॉक्स के बाहर धकेलने के लिए इस्तेमाल किया जाता है.
एचटीएमएल
ये शर्तें, कॉन्टेंट के बीच स्पेस और बांटने के लिए हैं.
Gap
बॉक्स के बीच स्पेस देने के लिए गैप.
पैडिंग (जगह)
पैडिंग का मतलब है, बॉक्स के अंदर स्पेस बनाना.

बॉक्स के बाहर स्पेस बनाने के लिए, इसका इस्तेमाल करें...

मार्जिन
मार्जिन को बॉक्स के बाहर धकेलने के लिए इस्तेमाल किया जाता है.
एचटीएमएल
ये शर्तें, कॉन्टेंट के बीच स्पेस और बांटने के लिए हैं.
Gap
बॉक्स के बीच स्पेस देने के लिए गैप.
पैडिंग (जगह)
पैडिंग का मतलब है, बॉक्स के अंदर स्पेस बनाना.

बॉक्स के बीच स्पेस बनाने के लिए, इनका इस्तेमाल करें...

मार्जिन
मार्जिन को बॉक्स के बाहर धकेलने के लिए इस्तेमाल किया जाता है.
एचटीएमएल
ये शर्तें, कॉन्टेंट के बीच स्पेस और बांटने के लिए हैं.
Gap
बॉक्स के बीच स्पेस देने के लिए गैप.
पैडिंग (जगह)
पैडिंग का मतलब है, बॉक्स के अंदर स्पेस बनाना.