vertical-align: middle
काम क्यों नहीं करेगा ? और फिर भी, काम vertical-align: top
करता है ।
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
vertical-align: middle
काम क्यों नहीं करेगा ? और फिर भी, काम vertical-align: top
करता है ।
span{
vertical-align: middle;
}
<div>
<img src="http://lorempixel.com/30/30/" alt="small img" />
<span>Doesn't work.</span>
</div>
जवाबों:
दरअसल, इस मामले में यह काफी सरल है: छवि के लिए लंबवत संरेखित करें। चूंकि यह सब एक पंक्ति में है, यह वास्तव में वह छवि है जिसे आप संरेखित करना चाहते हैं, पाठ नहीं।
<!-- moved "vertical-align:middle" style from span to img -->
<div>
<img style="vertical-align:middle" src="https://placehold.it/60x60">
<span style="">Works.</span>
</div>
FF3 में परीक्षण किया गया।
अब आप इस प्रकार के लेआउट के लिए फ्लेक्सबॉक्स का उपयोग कर सकते हैं।
.box {
display: flex;
align-items:center;
}
<div class="box">
<img src="https://placehold.it/60x60">
<span style="">Works.</span>
</div>
width:16px;height:16px
) के लिए छवि का आकार सेट करते हैं, तो आप देख सकते हैं कि छवि बहुत कम हो जाएगी ...
यहाँ ऊर्ध्वाधर-संरेखित करने के लिए कुछ सरल तकनीकें दी गई हैं:
यह एक आसान है: कंटेनर के बराबर टेक्स्ट तत्व की लाइन-ऊँचाई सेट करें
<div>
<img style="width:30px; height:30px;">
<span style="line-height:30px;">Doesn't work.</span>
</div>
इसके कंटेनर के सापेक्ष एक आंतरिक div स्थिति
<div style="position:relative;width:30px;height:60px;">
<div style="position:absolute;bottom:0">This is positioned on the bottom</div>
</div>
<div style="display:table;width:30px;height:60px;">
<div style="display:table-cell;height:30px;">This is positioned in the middle</div>
</div>
इसे पूरे मंडल में सही ढंग से काम करने के लिए, आपको CSS को थोड़ा हैक करना होगा। सौभाग्य से, एक IE बग है जो हमारे पक्ष में काम करता है। top:50%
कंटेनर और top:-50%
आंतरिक डिव पर सेट करना , आप एक ही परिणाम प्राप्त कर सकते हैं। हम दोनों को एक और विशेषता के साथ जोड़ सकते हैं IE का समर्थन नहीं करता है: उन्नत सीएसएस चयनकर्ता।
<style type="text/css">
#container {
width: 30px;
height: 60px;
position: relative;
}
#wrapper > #container {
display: table;
position: static;
}
#container div {
position: absolute;
top: 50%;
}
#container div div {
position: relative;
top: -50%;
}
#container > div {
display: table-cell;
vertical-align: middle;
position: static;
}
</style>
<div id="wrapper">
<div id="container">
<div><div><p>Works in everything!</p></div></div>
</div>
</div>
इस समाधान को अन्य समाधानों की तुलना में थोड़ा अधिक आधुनिक ब्राउज़र की आवश्यकता है, क्योंकि यह इसका उपयोग करता है transform: translateY
संपत्ति है। ( http://caniuse.com/#feat=transforms2d )
सीएसएस की निम्नलिखित 3 पंक्तियों को एक तत्व में लागू करना, मूल तत्व की ऊंचाई की परवाह किए बिना इसे अपने माता-पिता के भीतर केंद्र में रखेगा:
position: relative;
top: 50%;
transform: translateY(-50%);
display:table
और display:table-cell
CSS चयनकर्ताओं का महान काम करते हैं, को छोड़कर, ज़ाहिर है, IE7 में और नीचे। कई घंटों तक मेरे बाल फाड़ने के बाद, मैंने फैसला किया कि मुझे वास्तव में किसी के साथ व्यवहार करने की ज़रूरत नहीं है जो अभी भी IE7- का उपयोग करता है।
display:table
विभिन्न ब्राउज़रों में कुछ सीमाएँ हैं (IE11 में max-height
काम नहीं करता है यदि तत्व एक तालिका सेल के अंदर है), इसलिए कुछ बढ़त के मामलों में तालिका कोशिकाओं का उपयोग करके लंबवत संरेखित करना अच्छा नहीं है।
अपने div
फ्लेक्स कंटेनर में बदलें :
div { display:flex; }
अब सभी सामग्री के लिए संरेखण को केन्द्रित करने के दो तरीके हैं:
विधि 1:
div { align-items:center; }
विधि 2:
div * { margin-top:auto; margin-bottom:auto; }
और पर img
विभिन्न फ़ॉन्ट आकार मानों पर विभिन्न चौड़ाई और ऊँचाई मान आज़माएँ span
और आप देखेंगे कि वे हमेशा कंटेनर के बीच में रहेंगे।
justify-content: center;
स्पेसिंग (<br/> टैग्स का उपयोग किए बिना) जोड़ने की भी आवश्यकता होगी padding: 1em;
। हमारे लिए आधुनिक ब्राउज़र देवों का शानदार अपडेट।
आपको vertical-align: middle
इसे पूरी तरह से केंद्रित करने के लिए दोनों तत्वों पर लागू करना होगा।
<div>
<img style="vertical-align:middle" src="http://lorempixel.com/60/60/">
<span style="vertical-align:middle">Perfectly centered</span>
</div>
स्वीकार किए जाते हैं जवाब केंद्र (के रूप में के रूप में परिभाषित बगल में पाठ का एक्स-ऊंचाई के आधे के आसपास आइकन करता सीएसएस चश्मा )। जो काफी अच्छा हो सकता है लेकिन थोड़ा हटकर दिख सकता है, अगर पाठ में आरोही या अवरोही हैं या बस ऊपर या नीचे खड़े हैं:
बाईं ओर, पाठ संरेखित नहीं है, दाईं ओर जैसा कि ऊपर दिखाया गया है। इस आलेख में एक लाइव डेमो ऊर्ध्वाधर-संरेखित के बारे में पाया जा सकता है ।
क्या किसी ने इस बारे में बात की है कि vertical-align: top
परिदृश्य में काम क्यों होता है? प्रश्न में छवि संभवतः पाठ से अधिक लंबी है और इस प्रकार लाइन बॉक्स के ऊपरी किनारे को परिभाषित करती है। vertical-align: top
स्पैन एलिमेंट पर फिर इसे लाइन बॉक्स के शीर्ष पर स्थित करता है।
के बीच व्यवहार में मुख्य अंतर है vertical-align: middle
और top
यह है कि पहले बॉक्स के आधार रेखा के सापेक्ष तत्वों को स्थानांतरित करता है (जो कि सभी ऊर्ध्वाधर संरेखण को पूरा करने के लिए जहां भी आवश्यक हो और इस तरह अप्रत्याशित लगता है ) और दूसरा लाइन बॉक्स के बाहरी सीमा के सापेक्ष (जो अधिक मूर्त)।
स्वीकृत उत्तर में प्रयुक्त तकनीक केवल एकल-पंक्ति वाले पाठ ( डेमो ) के लिए काम करती है , लेकिन बहु-पंक्ति पाठ ( डेमो ) के रूप में नहीं - जैसा कि वहां उल्लेख किया गया है।
अगर किसी को किसी छवि के लिए बहु-पंक्ति पाठ को लंबवत करने की आवश्यकता है, तो यहां कुछ तरीके हैं ( इस सीएसएस-ट्रिक्स लेख से प्रेरित तरीके 1 और 2 )
सीएसएस:
div {
display: table;
}
span {
vertical-align: middle;
display: table-cell;
}
सीएसएस:
div {
height: 200px; /* height of image */
}
div:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -0.25em; /* Adjusts for spacing */
}
img {
position: absolute;
}
span {
display: inline-block;
vertical-align: middle;
margin-left: 200px; /* width of image */
}
सीएसएस (उपरोक्त फिडेल में वेंडर उपसर्ग शामिल हैं):
div {
display: flex;
align-items: center;
}
img {
min-width: 200px; /* width of image */
}
यह कोड IE के साथ-साथ FF में भी काम करता है:
<div>
<img style="width:auto; height:auto;vertical-align: middle;">
<span>It does work on all browsers</span>
</div>
रिकॉर्ड के लिए, संरेखण "कमांड" एक स्पैन पर काम नहीं करना चाहिए, क्योंकि यह एक इन-लाइन टैग है, न कि ब्लॉक-स्तरीय टैग। संरेखण, मार्जिन, पैडिंग, आदि जैसी चीजें इन-लाइन टैग पर काम नहीं करेंगी क्योंकि इनलाइन का बिंदु पाठ प्रवाह को बाधित नहीं करना है।
CSS HTML टैग्स को दो समूहों में विभाजित करता है: इन-लाइन और ब्लॉक-लेवल। "सीएसएस ब्लॉक बनाम इनलाइन" खोजें और एक महान लेख दिखाता है ...
http://www.webdesignfromscratch.com/html-css/css-block-and-inline/
(कोर सीएसएस सिद्धांतों को समझना एक महत्वपूर्ण है क्योंकि यह बहुत कष्टप्रद नहीं है)
text-align
और vertical-align
(पर अपने आवेदन के अपवाद के साथ td
विरासत प्रयोजनों के लिए तत्वों) विशेष रूप से के लिए हैं inline
और inline-block
तत्वों ( span
, img
, आदि)।
line-height:30px
स्पैन के लिए उपयोग करें ताकि टेक्स्ट छवि के साथ संरेखित हो:
<div>
<img style="width:30px; height:30px;">
<span style="line-height:30px;">Doesn't work.</span>
</div>
एक और चीज जो आप कर सकते हैं वह है पाठ की line-height
छवियों के आकार के भीतर सेट करना <div>
। फिर छवियों को सेट करेंvertical-align: middle;
यह गंभीरता से सबसे आसान तरीका है।
margin
अभी तक इनमें से किसी भी उत्तर के साथ एक समाधान नहीं देखा गया है , इसलिए यहां इस समस्या का समाधान है।
यह समाधान केवल तभी काम करता है जब आप अपनी छवि की चौड़ाई जानते हैं।
<div>
<img src="https://placehold.it/80x80">
<span>This is my very long text what should align. This is my very long text what should align.</span>
</div>
div {
overflow:hidden;
}
img {
width:80px
margin-right:20px;
display:inline-block;
vertical-align:middle;
}
span {
width:100%;
margin-right:-100px;
padding-right:100px;
display:inline-block;
vertical-align:middle;
box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
}
background:url(../images/red_bullet.jpg) left 3px no-repeat;
मैं आमतौर पर के स्थान पर 3 पीएक्स का उपयोग करता हूं top
। उस मान को बढ़ा / घटाकर, छवि को आवश्यक ऊँचाई में बदला जा सकता है।
आप संपत्ति inline element
का उपयोग करके छवि सेट कर सकते display
हैं
<div>
<img style="vertical-align: middle; display: inline;" src="https://placehold.it/60x60">
<span style="vertical-align: middle; display: inline;">Works.</span>
</div>
बहुस्तरीय समाधान:
<div style="display:table;width:30px;height:160px;">
<img style="display:table-cell;width:30px;height:60px;padding:50px" src='...' />
<div style="display:table-cell;height:30px;vertical-align:middle">
Multiline text centered vertically
</div>
</div>
<!-- note: img (height + 2x padding) must be equal to root div height -->
सभी ब्राउज़रों और यानी 9 में काम करता है
यह भ्रामक हो सकता है, मैं सहमत हूं। तालिका सुविधाओं का उपयोग करने का प्रयास करें। मैं इस सरल सीएसएस ट्रिक का उपयोग वेबपेज के केंद्र में स्थित मॉडल्स को करने के लिए करता हूं। इसमें बड़े ब्राउज़र का समर्थन है:
<div class="table">
<div class="cell">
<img src="..." alt="..." />
<span>It works now</span>
</div>
</div>
और सीएसएस हिस्सा:
.table { display: table; }
.cell { display: table-cell; vertical-align: middle; }
ध्यान दें कि आपको अपनी इच्छानुसार काम करने के लिए छवि और टेबल कंटेनर के आकार को समायोजित करना होगा। का आनंद लें।
सबसे पहले इनलाइन सीएसएस की सिफारिश नहीं की जाती है, यह वास्तव में आपके HTML को गड़बड़ कर देता है।
छवि और अवधि संरेखित करने के लिए, आप बस कर सकते हैं vertical-align:middle
।
.align-middle {
vertical-align: middle;
}
<div>
<img class="align-middle" src="https://i.stack.imgur.com/ymxaR.png">
<span class="align-middle">I'm in the middle of the image! thanks to CSS! hooray!</span>
</div>
यह निश्चित नहीं है कि यह आपके नेविगेशन के ब्राउज़र पर क्यों प्रस्तुत नहीं करता है, लेकिन मैं सामान्य रूप से इस तरह के एक स्निपेट का उपयोग करता हूं जब एक छवि और एक केंद्रित पाठ के साथ हेडर प्रदर्शित करने की कोशिश करता है, आशा है कि यह मदद करता है!
https://output.jsbin.com/jeqorahupo
<hgroup style="display:block; text-align:center; vertical-align:middle; margin:inherit auto; padding:inherit auto; max-height:inherit">
<header style="background:url('http://lorempixel.com/30/30/') center center no-repeat; background-size:auto; display:inner-block; vertical-align:middle; position:relative; position:absolute; top:inherit; left:inherit; display: -webkit-box; display: -webkit-flex;display: -moz-box;display: -ms-flexbox;display: flex;-webkit-flex-align: center;-ms-flex-align: center;-webkit-align-items: center;align-items: center;">
<image src="http://lorempixel.com/60/60/" title="Img title" style="opacity:0.35"></img>
http://lipsum.org</header>
</hgroup>
आप शायद यही चाहते हैं:
<div>
<img style="width:30px; height:30px;">
<span style="vertical-align:50%; line-height:30px;">Didn't work.</span>
</div>
जैसा कि दूसरों ने सुझाव दिया है, vertical-align
छवि पर प्रयास करें:
<div>
<img style="width:30px; height:30px; vertical-align:middle;">
<span>Didn't work.</span>
</div>
सीएसएस कष्टप्रद नहीं है। आप अभी प्रलेखन नहीं पढ़ते हैं । ; P
vertical-align