समस्या
Flexbox बहुत आसान केंद्रित बनाता है।
बस align-items: center
और justify-content: center
फ्लेक्स कंटेनर में लागू करने से, आपका फ्लेक्स आइटम लंबवत और क्षैतिज रूप से केंद्रित हो जाएगा।
हालांकि, इस विधि के साथ एक समस्या है जब फ्लेक्स आइटम फ्लेक्स कंटेनर से बड़ा है।
जैसा कि सवाल में कहा गया है, जब फ्लेक्स आइटम कंटेनर को ओवरफ्लो करता है तो शीर्ष दुर्गम हो जाता है।
क्षैतिज अतिप्रवाह के लिए, बाएं खंड अप्राप्य (या सही खंड, RTL भाषाओं में) हो जाता है।
यहाँ एक LTR कंटेनर justify-content: center
और तीन फ्लेक्स आइटम के साथ एक उदाहरण दिया गया है :
इस व्यवहार के स्पष्टीकरण के लिए इस उत्तर के नीचे देखें।
समाधान # 1
इस समस्या को ठीक करने के लिए फ्लेक्सबॉक्स ऑटो मार्जिन का उपयोग करें , के बजाय justify-content
।
auto
मार्जिन के साथ , एक अतिप्रवाहित फ्लेक्स आइटम खड़ी और क्षैतिज रूप से इसके किसी भी हिस्से तक पहुंच खोए बिना केंद्रित हो सकता है।
फ्लेक्स कंटेनर पर इस कोड के बजाय:
#flex-container {
align-items: center;
justify-content: center;
}
फ्लेक्स आइटम पर इस कोड का उपयोग करें:
.flex-item {
margin: auto;
}
संशोधित डेमो
समाधान # 2 (अभी तक अधिकांश ब्राउज़रों में लागू नहीं)
safe
अपने कीवर्ड संरेखण नियम में मान को इस तरह जोड़ें :
justify-content: safe center
या
align-self: safe center
से सीएसएस बॉक्स संरेखण मॉड्यूल विनिर्देश :
4.4। ओवरफ्लो संरेखण: safe
और unsafe
कीवर्ड और स्क्रॉल सुरक्षित सीमा
जब [फ्लेक्स आइटम] [फ्लेक्स कंटेनर] से बड़ा होता है, तो यह ओवरफ्लो हो जाएगा। कुछ संरेखण मोड, यदि इस स्थिति में सम्मानित किए जाते हैं, तो डेटा हानि हो सकती है: उदाहरण के लिए, यदि साइडबार की सामग्री केंद्रित है, तो जब वे ओवरफ़्लो होते हैं, तो वे व्यूपोर्ट के स्टार्ट एज से अपने बक्से का हिस्सा भेज सकते हैं, जिसे स्क्रॉल नहीं किया जा सकता है ।
इस स्थिति को नियंत्रित करने के लिए, एक अतिप्रवाह संरेखण मोड स्पष्ट रूप से निर्दिष्ट किया जा सकता है। Unsafe
संरेखण निर्दिष्ट संरेखण मोड को अतिप्रवाह स्थितियों में सम्मानित करता है, भले ही यह डेटा हानि का कारण हो, जबकि safe
संरेखण डेटा हानि से बचने के प्रयास में संरेखण मोड को अतिप्रवाह स्थितियों में बदलता है।
डिफ़ॉल्ट व्यवहार को स्क्रॉल करने योग्य क्षेत्र के भीतर संरेखण विषय को शामिल करना है, हालांकि लेखन के समय यह सुरक्षा सुविधा अभी तक लागू नहीं हुई है।
safe
यदि [फ्लेक्स आइटम] का आकार [फ्लेक्स कंटेनर] से अधिक हो जाता है, तो [फ्लेक्स आइटम] को एलाइन किया जाता है जैसे कि संरेखण मोड [ flex-start
]।
unsafe
[फ्लेक्स आइटम] और [फ्लेक्स कंटेनर] के सापेक्ष आकार के बावजूद, दिए गए संरेखण मूल्य को सम्मानित किया जाता है।
नोट: बॉक्स संरेखण मॉड्यूल कई बॉक्स लेआउट मॉडल भर में उपयोग के लिए है, न कि केवल फ्लेक्स। तो ऊपर दिए गए विशेष अंश में, कोष्ठक में शब्द वास्तव में "संरेखण विषय", "संरेखण कंटेनर" और " start
" कहते हैं। मैंने इस विशेष समस्या पर ध्यान केंद्रित रखने के लिए फ्लेक्स-विशिष्ट शब्दों का उपयोग किया।
MDN से स्क्रॉल सीमा के लिए स्पष्टीकरण:
फ्लेक्स आइटम विचार
फ्लेक्सबॉक्स के संरेखण गुण सीएसएस में अन्य केंद्रित तरीकों के विपरीत, "सच" केंद्रित करते हैं। इसका मतलब है कि फ्लेक्स आइटम केंद्रित रहेंगे, भले ही वे फ्लेक्स कंटेनर को ओवरफ्लो करें।
यह कभी-कभी समस्याग्रस्त हो सकता है, हालांकि, यदि वे पृष्ठ के ऊपरी किनारे, या बाएं किनारे पर अतीत में बहते हैं [...], तो आप उस क्षेत्र में स्क्रॉल नहीं कर सकते, भले ही वहां सामग्री हो!
भविष्य के रिलीज में, संरेखण गुणों को "सुरक्षित" विकल्प के रूप में अच्छी तरह से बढ़ाया जाएगा।
अभी के लिए, यदि यह एक चिंता का विषय है, तो आप इसके बजाय मार्जिन प्राप्त करने के लिए उपयोग कर सकते हैं, क्योंकि वे "सुरक्षित" तरीके से जवाब देंगे और यदि वे अतिप्रवाह करते हैं, तो केंद्र को रोक दें।
align-
गुणों का उपयोग करने के बजाय , केवल auto
उन लचीली वस्तुओं पर मार्जिन डालें जिन्हें आप केंद्र में लाना चाहते हैं।
justify-
गुणों के बजाय , फ्लेक्स कंटेनर में पहले और आखिरी फ्लेक्स आइटम के बाहरी किनारों पर ऑटो मार्जिन डालें।
auto
मार्जिन "फ्लेक्स" और बचे हुए अंतरिक्ष समझेंगे, फ्लेक्स आइटम केंद्रित जब वहाँ अंतरिक्ष बचे हुए है, और जब नहीं सामान्य संरेखण का उपयोग करने जा।
हालाँकि, यदि आप justify-content
मल्टी-लाइन फ्लेक्सबॉक्स में मार्जिन-आधारित सेंटरिंग के साथ बदलने की कोशिश कर रहे हैं, तो आप शायद भाग्य से बाहर हैं, क्योंकि आपको प्रत्येक लाइन पर पहले और आखिरी फ्लेक्स आइटम पर मार्जिन लगाने की आवश्यकता है। जब तक आप समय से पहले यह अनुमान नहीं लगा सकते हैं कि कौन सी वस्तु किस लाइन पर समाप्त होगी, आप justify-content
संपत्ति को बदलने के लिए मुख्य अक्ष में मज़बूती से मार्जिन-आधारित सेंटरिंग का उपयोग नहीं कर सकते हैं।