पोजिशनिंग और z-index

आप एक छोटा "Sale" बैज प्रोडक्ट फोटो के टॉप-राइट कोने में लगाना चाहते हैं। आप एक हेडर चाहते हैं जो पेज स्क्रॉल होने पर जगह पर रहे। आप एक डायलॉग चाहते हैं जो पेज पर सब कुछ के ऊपर तैरे। साधारण CSS स्पेसिंग यह नहीं कर सकती, क्योंकि यह केवल एलिमेंट्स को एक के बाद एक अरेंज करती है। पोजिशनिंग उन टूल्स का सेट है जो एलिमेंट को उस साधारण अरेंजमेंट से बाहर निकलने और बिल्कुल वहीं बैठने देता है जहां आप इसे चाहते हैं, यहां तक कि किसी और चीज के ऊपर भी।
position प्रॉपर्टी
हर एलिमेंट static पोजिशनिंग के साथ शुरू होता है, जो कहने का एक सादा तरीका है "पेज के फ्लो में अपनी सामान्य जगह में बैठो"। यह डिफ़ॉल्ट है, और ज्यादातर समय यह वही है जो आप चाहते हैं। पोजिशनिंग तब महत्वपूर्ण हो जाती है जब आप एलिमेंट को उस सामान्य जगह से हटाना चाहते हैं।
पहला कदम position: relative है। यह एलिमेंट को चार ऑफसेट प्रॉपर्टीज के साथ जहां यह सामान्य रूप से बैठता है वहां से हटाता है: top, right, bottom, और left। मुख्य बात यह है कि एलिमेंट अपनी मूल जगह रखता है। कोई और चीज गैप को भरने के लिए नहीं हटती।
.badge {
position: relative;
top: 10px; /* अपनी सामान्य जगह से 10px नीचे दबाया गया */
left: 20px; /* अपनी सामान्य जगह से 20px दाईं ओर दबाया गया */
}ये top और left ऑफसेट एक static एलिमेंट पर कुछ नहीं करते। वे तभी काम करना शुरू करते हैं जब आप एलिमेंट को static के अलावा कोई position दें।
static के रूप में शुरू होता है, जिसका अर्थ है कि यह अपनी सामान्य जगह में बैठता है। position: relative पर स्विच करें और आप इसे top, right, bottom, और left से हटा सकते हैं, जबकि इसकी मूल जगह रिजर्व रहती है। ये ऑफसेट प्रॉपर्टीज तब तक कुछ नहीं करतीं जब तक एलिमेंट पोजिशन्ड न हो, इसलिए अगर top को नजरअंदाज किया गया प्रतीत होता है, तो जांचें कि आपने पहले एक position सेट किया है। Absolute पोजिशनिंग
position: absolute एक बड़ा कदम है। यह एलिमेंट को सामान्य फ्लो से पूरी तरह से बाहर निकाल देता है, इसलिए यह अब कोई जगह नहीं लेता है, और इसके चारों ओर के एलिमेंट्स बंद हो जाते हैं जैसे कि यह कभी था ही नहीं। फिर आप इसे उसी top, right, bottom, और left ऑफसेट का उपयोग करके रखते हैं।
सवाल यह है: कहां से ऑफसेट? एक absolute एलिमेंट अपने निकटतम positioned एंसेस्टर के विरुद्ध पोजिशन करता है, अर्थात सबसे करीबी पैरेंट जिसके पास अपना position है (static के अलावा कोई भी)। यही कारण है कि badge-on-a-card पैटर्न हमेशा एक जोड़ी में आता है: आप कार्ड को relative बनाते हैं ताकि यह संदर्भ बिंदु बन जाए, फिर बैज को absolute बनाते हैं ताकि यह कार्ड के कोने में बैठ सके।
.card {
position: relative; /* संदर्भ बिंदु बन जाता है */
}
.card .badge {
position: absolute;
top: 8px; /* कार्ड के शीर्ष से 8px */
right: 8px; /* कार्ड के दाईं ओर से 8px */
}कार्ड पर position: relative के बिना, बैज पेज के ऊपर एक पोजिशन्ड एंसेस्टर की खोज करेगा और कहीं उतरेगा जहां आप का इरादा नहीं था।
position: absolute एलिमेंट को फ्लो से खींच निकालता है, इसलिए यह कोई जगह नहीं लेता है और पड़ोसी इसके पीछे बंद हो जाते हैं। यह तब अपने निकटतम पैरेंट के विरुद्ध पोजिशन करता है जिसके पास position सेट है। यही कारण है कि badge-on-a-card ट्रिक एक जोड़ी है: कार्ड पर relative, बैज पर absolute, इसलिए बैज कार्ड के कोने में उतरता है और कहीं यादृच्छिक नहीं। Fixed और sticky
position: fixed एलिमेंट को स्क्रीन पर ही पिन कर देता है। यह absolute की तरह फ्लो को छोड़ता है, लेकिन एंसेस्टर को एंकर करने के बजाय, यह व्यूपोर्ट को एंकर करता है, दृश्य विंडो। एक बार fixed होने के बाद, यह स्क्रीन पर एक ही जगह पर रहता है यहां तक कि जैसे-जैसे आप पेज को स्क्रॉल करते हैं। यही कारण है कि एक नेविगेशन बार या एक "back to top" बटन पूरे समय दृश्यमान रहता है।
.site-header {
position: fixed;
top: 0; /* विंडो के शीर्ष पर पिन किया गया */
left: 0;
right: 0; /* पूरी चौड़ाई में फैलाया गया */
}position: sticky दोस्ताना मध्य जमीन है। एक sticky एलिमेंट सामान्य रूप से पेज के साथ स्क्रॉल करता है, जब तक कि यह एक threshold तक पहुंचता है जो आप सेट करते हैं, और फिर यह जगह में स्टिक करता है। एक सेक्शन हेडिंग जो अपने कंटेंट के साथ स्क्रॉल करता है और फिर स्क्रीन के शीर्ष पर रहता है, यह क्लासिक उदाहरण है।
.section-title {
position: sticky;
top: 0; /* एक बार शीर्ष किनारे तक पहुंचने पर स्टिक करता है */
}position: fixed एलिमेंट को स्क्रीन पर पिन करता है, इसलिए जैसे-जैसे आप स्क्रॉल करते हैं यह जगह पर रहता है, जो यह कारण है कि एक हेडर या एक back-to-top बटन चारों ओर लटका रहता है। position: sticky मध्य जमीन है: यह पेज के साथ स्क्रॉल करता है, फिर एक threshold जैसे top: 0 तक पहुंचने पर स्टिक करता है। Fixed भी जो कुछ इसके नीचे है उसके साथ ओवरलैप करता है, इसलिए कंटेंट के लिए कुछ जगह छोड़ें जिसे यह कवर करता है। z-index के साथ stacking
जब एलिमेंट्स ओवरलैप होते हैं, तो कुछ निर्णय लेना होता है कि कौन शीर्ष पर बैठता है। यह वही है जो z-index नियंत्रित करता है। एक उच्च z-index एक निम्न को सामने खींचता है, इसलिए z-index: 10 के साथ एक dropdown z-index: 1 के साथ एक कार्ड को कवर करता है।
एक नियम है जो सभी को हैरान करता है: z-index केवल पोजिशन्ड एलिमेंट्स पर काम करता है। यदि एलिमेंट अभी भी static है, तो इसका z-index अनदेखा किया जाता है। तो आप लगभग हमेशा एक position और एक z-index को एक साथ सेट करते हैं।
.modal {
position: fixed;
z-index: 100; /* सामान्य पेज कंटेंट के ऊपर बैठता है */
}
.modal-overlay {
position: fixed;
z-index: 99; /* अंधकार पृष्ठभूमि, मॉडल के एक कदम पीछे */
}आप यहां बड़ी संख्याओं की शायद ही कभी जरूरत है। एक छोटा, साफ स्केल जैसे 1, 10, 100 एक पेज भर से 9999s के साथ सोचना आसान है जो एक दूसरे से लड़ रहे हैं।
z-index निर्णय लेता है कि कौन सामने है: एक उच्च संख्या जीतती है। यह केवल पोजिशन्ड एलिमेंट्स पर काम करता है, इसलिए एक सादे static एलिमेंट पर z-index अनदेखा किया जाता है, और आप position और z-index को एक साथ सेट करते हैं। संख्याओं को छोटा और साफ रखें, 1, 10, 100 जैसे, एक 9999s का ढेर होने के बजाय। 
