सबसे पहले ध्यान दें कि vertical-alignकेवल तालिका कोशिकाओं और इनलाइन-स्तरीय तत्वों पर लागू होता है।
ऊर्ध्वाधर संरेखण प्राप्त करने के कुछ तरीके हैं जो आपकी आवश्यकताओं को पूरा कर सकते हैं या नहीं कर सकते हैं। हालाँकि मैं आपको अपने पसंदीदा में से दो तरीके दिखाऊंगा :
1. का उपयोग करना transformऔरtop
.valign {
position: relative;
top: 50%;
transform: translateY(-50%);
/* vendor prefixes omitted due to brevity */
}
<div style="position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;background-color: pink;">
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
मुख्य बिंदु यह है कि एक प्रतिशत मान युक्त ब्लॉक के topसापेक्ष है height; जबकि transforms पर एक प्रतिशत मूल्य बॉक्स के आकार (बाउंडिंग बॉक्स) के सापेक्ष है।
यदि आप फ़ॉन्ट रेंडरिंग मुद्दों (धुंधली फ़ॉन्ट) का अनुभव करते हैं , तो फिक्स को घोषणा में जोड़ना perspective(1px)है, transformइसलिए यह बन जाता है:
transform: perspective(1px) translateY(-50%);
यह ध्यान देने योग्य है कि CSS transform IE9 + में समर्थित है ।
2. inline-blockतत्वों का उपयोग करना (छद्म-)
इस पद्धति में, हमारे पास दो सिबलिंग inline-blockतत्व हैं जो vertical-align: middleघोषणा के द्वारा मध्य में लंबवत रूप से संरेखित होते हैं ।
उनमें से एक heightमें 100%इसके माता-पिता हैं और दूसरा हमारा वांछित तत्व है जिसे हम इसे बीच में संरेखित करना चाहते थे।
.parent {
text-align: left;
position: absolute;
height: 56px;
background-color: pink;
white-space: nowrap;
font-size: 0; /* remove the gap between inline level elements */
}
.dummy-child { height: 100%; }
.valign {
font-size: 16px; /* re-set the font-size */
}
.dummy-child, .valign {
display: inline-block;
vertical-align: middle;
}
<div style="position: absolute; left: 50px; top: 50px;">
<div class="parent">
<div class="dummy-child"></div>
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
अंत में, हमें इनलाइन-स्तरीय तत्वों के बीच के अंतर को दूर करने के लिए उपलब्ध तरीकों में से एक का उपयोग करना चाहिए ।
position: absoluteहर जगह उपयोग क्यों कर रहे हैं ?