इस समस्या का एक सामान्य समाधान पूर्ण स्थिति या फ़्लिप्ड फ़्लोट्स का उपयोग करता है, लेकिन ये इस तरह से मुश्किल हैं कि उन्हें व्यापक ट्यूनिंग की आवश्यकता होती है यदि आपके कॉलम संख्या + आकार में बदलते हैं, और आपको यह सुनिश्चित करने की आवश्यकता है कि आपका "मुख्य" कॉलम हमेशा सबसे लंबा है। इसके बजाय, मेरा सुझाव है कि आप तीन और अधिक मजबूत समाधानों में से एक का उपयोग करें:
display: flex
: अब तक का सबसे सरल और सबसे अच्छा समाधान और बहुत लचीला - लेकिन IE9 और पुराने द्वारा असमर्थित।
table
या display: table
: बहुत सरल, बहुत संगत (हर ब्राउज़र कभी बहुत), काफी लचीला।
display: inline-block; width:50%
एक नकारात्मक मार्जिन हैक के साथ: काफी सरल, लेकिन स्तंभ-नीचे की सीमाएं थोड़ी मुश्किल हैं।
1। display:flex
यह वास्तव में सरल है, और अधिक जटिल या अधिक विस्तृत लेआउट के लिए अनुकूलित करना आसान है - लेकिन फ्लेक्सबॉक्स केवल IE10 या बाद में (अन्य आधुनिक ब्राउज़रों के अलावा) द्वारा समर्थित है।
उदाहरण: http://output.jsbin.com/hetunujuma/1
प्रासंगिक HTML:
<div class="parent"><div>column 1</div><div>column 2</div></div>
प्रासंगिक सीएसएस:
.parent { display: -ms-flex; display: -webkit-flex; display: flex; }
.parent>div { flex:1; }
फ्लेक्सबॉक्स में बहुत अधिक विकल्पों के लिए समर्थन है, लेकिन उपरोक्त सभी स्तंभों की संख्या के लिए बस!
2. <table>
याdisplay: table
ऐसा करने के लिए एक सरल और अत्यंत संगत तरीका है table
- मैं आपको पुराने-आईई समर्थन की आवश्यकता होने पर सबसे पहले आपको सलाह देने की कोशिश करूंगा । आप स्तंभों से निपट रहे हैं; divs + floats बस ऐसा करने का सबसे अच्छा तरीका नहीं है (इस तथ्य का उल्लेख नहीं करना है कि बस सीएसएस सीमाओं के आसपास हैक करने के लिए नेस्टेड डिवीजनों के कई स्तर शायद ही एक सरल तालिका का उपयोग करने की तुलना में अधिक "अर्थ" है)। यदि आप table
तत्व का उपयोग नहीं करना चाहते हैं , तो सीएसएस पर विचार करेंdisplay: table
(IE7 और पुराने द्वारा असमर्थित)।
उदाहरण: http://jsfiddle.net/emn13/7FFp3/
प्रासंगिक html: (लेकिन<table>
इसके बजायसादे का उपयोग करने पर विचार करें)
<div class="parent"><div>column 1</div><div>column 2</div></div>
प्रासंगिक सीएसएस:
.parent { display: table; }
.parent > div {display: table-cell; width:50%; }
/*omit width:50% for auto-scaled column widths*/
यह दृष्टिकोण overflow:hidden
फ्लोट्स के साथ उपयोग करने से कहीं अधिक मजबूत है । आप बहुत अधिक संख्या में कॉलम जोड़ सकते हैं; यदि आप चाहें तो आप उन्हें ऑटो-स्केल कर सकते हैं; और आप प्राचीन ब्राउज़रों के साथ संगतता बनाए रखते हैं। फ्लोट समाधान के विपरीत, आपको पहले से यह जानने की आवश्यकता नहीं है कि कौन सा कॉलम सबसे लंबा है; ऊंचाई तराजू ठीक है।
KISS: जब तक आप विशेष रूप से करने की जरूरत है नाव हैक्स उपयोग नहीं करते। यदि IE7 एक समस्या है, तो मैं अभी भी एक हार्ड-टू-मेंटेनेंस, कम लचीले चाल-सीएसएस समाधान पर सीमैटिक कॉलम के साथ एक सादा टेबल चुनूंगा।
वैसे, यदि आपको अपने लेआउट को उत्तरदायी बनाने की आवश्यकता है (जैसे कि छोटे मोबाइल फोन पर कोई कॉलम नहीं) तो आप @media
छोटे स्क्रीन चौड़ाई के लिए सादे ब्लॉक लेआउट में वापस गिरने के लिए एक क्वेरी का उपयोग कर सकते हैं - यह काम करता है चाहे आप उपयोग करें <table>
या किसी अन्य display: table
तत्व।
3. display:inline block
एक नकारात्मक मार्जिन हैक के साथ।
एक अन्य विकल्प का उपयोग करना है display:inline block
।
उदाहरण: http://jsbin.com/ovuqes/2/edit
प्रासंगिक html: (div
टैग केबीच रिक्त स्थान की अनुपस्थितिमहत्वपूर्ण है!)
<div class="parent"><div><div>column 1</div></div><div><div>column 2</div></div></div>
प्रासंगिक सीएसएस:
.parent {
position: relative; width: 100%; white-space: nowrap; overflow: hidden;
}
.parent>div {
display:inline-block; width:50%; white-space:normal; vertical-align:top;
}
.parent>div>div {
padding-bottom: 32768px; margin-bottom: -32768px;
}
यह थोड़ा मुश्किल है, और नकारात्मक मार्जिन का मतलब है कि कॉलम का "सही" तल अस्पष्ट है। बदले में इसका मतलब है कि आप उन स्तंभों के निचले हिस्से के सापेक्ष कुछ भी नहीं कर सकते क्योंकि इससे कट जाता है overflow: hidden
। ध्यान दें कि इनलाइन-ब्लॉक के अलावा, आप फ्लोट्स के साथ एक समान प्रभाव प्राप्त कर सकते हैं।
TL; DR : फ्लेक्सबॉक्स का उपयोग करें यदि आप IE9 और पुराने को अनदेखा कर सकते हैं; अन्यथा (css) तालिका आज़माएँ। यदि उन विकल्पों में से कोई भी आपके लिए काम नहीं करता है, तो नकारात्मक मार्जिन हैक होते हैं, लेकिन ये अजीब प्रदर्शन मुद्दों का कारण बन सकते हैं जो विकास के दौरान आसानी से छूट जाते हैं, और लेआउट सीमाएं हैं जिनके बारे में आपको जानकारी होना चाहिए।