Div के अंदर की छवि में छवि के नीचे अतिरिक्त स्थान है


502

निम्नलिखित कोड में क्यों की ऊंचाई की ऊंचाई से divबड़ी है img? छवि के नीचे एक अंतर है, लेकिन यह पैडिंग / मार्जिन नहीं लगता है।

छवि के नीचे अंतराल या अतिरिक्त स्थान क्या है?

#wrapper {
  border: 1px solid red;
  width:200px;
}
img {
  width:200px;
}
<div id="wrapper">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>

इसके नीचे एक अंतराल या सफेद स्थान के साथ छवि


10
इस प्रश्न का संक्षिप्त और पूर्ण उत्तर है: stackoverflow.com/a/31445364/3597276
माइकल बेंजामिन

1
यहाँ इस मुद्दे पर एक अच्छा पढ़ा है: अजीब बात है <img> HTML में अंतर
Matheus Avellar

जवाबों:


600

डिफ़ॉल्ट रूप से, एक छवि इनलाइन प्रदान की जाती है, एक पत्र की तरह इसलिए यह उसी पंक्ति पर बैठता है जिस पर a, b, c और d बैठते हैं।

जी, जे, पी और क्यू जैसे अक्षरों पर आपको मिलने वाले अवरोही के लिए उस रेखा के नीचे जगह होती है ।

अवरोहियों का प्रदर्शन

आप ऐसा कर सकते हैं:

  • vertical-alignछवि को अन्यत्र स्थान पर समायोजित करने के लिए (जैसे middle) या
  • displayतो यह इनलाइन नहीं है बदलो ।

div {
  border: solid black 1px;
  margin-bottom: 10px;
}

#align-middle img {
  vertical-align: middle;
}

#align-base img {
  vertical-align: bottom;
}

#display img {
  display: block;
}
<div id="default">
<h1>Default</h1>
  The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt="">
</div>

<div id="align-middle">
<h1>vertical-align: middle</h1>
  The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt=""> </div>
  
  <div id="align-base">
<h1>vertical-align: bottom</h1>
  The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt=""> </div>

<div id="display">
<h1>display: block</h1>
  The quick brown fox jumps over the lazy dog <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/VangoghStarry-night2.jpg/300px-VangoghStarry-night2.jpg" alt="">
</div>


शामिल छवि सार्वजनिक क्षेत्र और है sourced विकिमीडिया कॉमन्स से


9
अधिक सटीक होने के लिए, ऐसा होता है b / c इनलाइन तत्व अपने करंट की जगह लेते हैं line-heightline-heightवांछित आयाम पर सेट करने से अवांछित व्हाट्सएप भी दूर हो जाएगा।
केविन बाउचर

3
क्या "f" एक डिसेंडर के रूप में योग्य है?
j08691

2
@ j08691 - फ़ॉन्ट पर निर्भर करता है।
क्वेंटिन

134

यहां सुझाया गया एक अन्य विकल्प छवि की शैली को इस प्रकार सेट कर रहा हैstyle="display: block;"


4
धन्यवाद। यह भी एक फ्लैश फिल्म के तहत अंतरिक्ष के साथ एक समान मुद्दा तय किया। (जोड़ा गया प्रदर्शन: एम्बेड / ऑब्जेक्ट टैग के लिए ब्लॉक)
jessieloo

5
या inline-blockयदि आप अभी भी इनलाइन प्रदर्शित करना चाहते हैं जैसा कि आम तौर पर छवियां करती हैं।
इयान

6
@Ian @Imperative inline-blockकाम नहीं करता है।
p.matsinopoulos 21

93

जल्दी ठीक:

छवि के अंतर को दूर करने के लिए , आप कर सकते हैं:

  • छवि की लंबवत-संरेखित गुण को vertical-align: bottom; vertical-align: top;या पर सेट करेंvertical-align: middle;
  • करने के लिए छवि की प्रदर्शन संपत्ति सेट करें display:block;

लाइव डेमो के लिए निम्न कोड देखें:


स्पष्टीकरण: छवि के नीचे एक अंतर क्यों है?

छवि के नीचे अंतराल या अतिरिक्त स्थान बग या समस्या नहीं है, यह डिफ़ॉल्ट व्यवहार है। मूल कारण यह है कि छवियों को प्रतिस्थापित तत्व हैं ( एमडीएन प्रतिस्थापित तत्वों को देखें )। यह उन्हें "छवि की तरह कार्य करने" की अनुमति देता है और उनके स्वयं के आंतरिक आयाम, पहलू अनुपात होते हैं ....
ब्राउज़र्स अपनी प्रदर्शन संपत्ति की गणना करते हैं, inlineलेकिन वे उन्हें एक विशेष व्यवहार देते हैं जो उन्हें inline-blockतत्वों के करीब बनाता है (जैसा कि आप उन्हें ऊर्ध्वाधर संरेखित कर सकते हैं, दे सकते हैं) उन्हें एक ऊंचाई, ऊपर / नीचे मार्जिन और पैडिंग, रूपांतरित ...)।

इसका मतलब यह भी है कि:

<img>कोई आधार रेखा नहीं है, इसलिए जब छवियों को ऊर्ध्वाधर-संरेखण के साथ एक इनलाइन प्रारूपण संदर्भ में उपयोग किया जाता है: आधार रेखा, छवि के नीचे पाठ आधारभूत पर रखा जाएगा।
( स्रोत: एमडीएन , जोर मेरा )

जैसे कि डिफ़ॉल्ट रूप से ब्राउज़र वर्टिकल-अलाइन प्रॉपर्टी को बेसलाइन में कंपेयर करता है, यह डिफॉल्ट बिहेवियर है। निम्न छवि से पता चलता है कि पाठ पर आधार रेखा कहाँ स्थित है:

पाठ पर आधार रेखा का स्थान ( छवि स्रोत )

बेसलाइन संरेखित तत्वों को बेसलाइनर (जैसे ) से नीचे उतरने वाले अवरोही के लिए जगह रखने की आवश्यकता है जैसा j, p, g ...कि आप ऊपर की छवि में देख सकते हैं। इस विन्यास में, छवि का तल आधार रेखा पर संरेखित है जैसा कि आप इस उदाहरण में देख सकते हैं:

div{border:1px solid red;font-size:30px;}
img{width:100px;height:auto;}
<div>
  <img src="http://i.imgur.com/RECDV24.jpg" />jpq are letters with descender
</div>


यही कारण है कि <img>टैग का डिफ़ॉल्ट व्यवहार कंटेनर के नीचे एक अंतर बनाता है और क्यों ऊर्ध्वाधर-संरेखित संपत्ति या प्रदर्शन संपत्ति को बदलना इसे निम्न डेमो में हटाता है:

div {width: 100px;border: 1px solid red;}
img {width: 100px;height: auto;}

.block img{
  display:block;
}
.bottom img{
  vertical-align:bottom;
}
<p>Default:</p>
<div>
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With display:block;</p>
<div class="block">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With vertical-align:bottom;</p>
<div class="bottom">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>


तो यही कारण है कि फ़ॉन्ट-आकार को 0 पर सेट करने से काम नहीं चलता है। या करता है?
Persijn

2
@Persijn यह करता है। की स्थापना की तरह line-height:0;है, लेकिन मैं इस पर विचार नहीं करते एक अच्छा ऊर्ध्वाधर- align या प्रदर्शन गुणों को बदलने की तुलना में समाधान के रूप में
वेब Tiki

2
ध्यान दें, हालांकि, कुछ ब्राउज़र सम्मान नहीं करते हैं font-size:0: वे उपयोगकर्ता सेटिंग्स में न्यूनतम आकार के लिए फ़ॉन्ट आकार सेट करते हैं।
श्री लिस्टर

हाँ यह एक सफेद स्थान लगता है।
म्रबेंगी

ठीक है, मुझे लगता middle text-top sub superहै कि तस्वीर में स्थिति ठीक नहीं है।
xianshenglu

40

माता-पिता की पंक्ति ऊँचाई को कम कर सकती है:

#wrapper {
  line-height: 0;
}

सभी फ़िक्सेस: http://jsfiddle.net/FaPFv/


5
चेतावनी! यह भी #wrapper में किसी भी टेक्स्ट नोड्स को मार देगा। क्योंकि यह विरासत में मिलेगा। लेकिन उस भयानक फ़िडलर के लिए बोनस अंक! यहां इसे टेक्स्ट नोड्स के साथ अपडेट किया गया है। jsfiddle.net/FaPFv/30
gcb

वैकल्पिक रूप से, फ़ॉन्ट-आकार: 0
किरण

13

आपको बस इस संपत्ति को सौंपना है:

img {
    display: block;
}

डिफ़ॉल्ट रूप से छवियों में यह गुण है:

img {
    display: inline;
}

7

आप इस समस्या के लिए कई विधियों का उपयोग कर सकते हैं जैसे

  1. का उपयोग करते हुए line-height

    #wrapper {  line-height: 0px;  }
  2. का उपयोग करते हुए display: flex

    #wrapper {  display: flex;         }
    #wrapper {  display: inline-flex;  }
  3. का उपयोग करते हुए display: block, table, flexऔरinherit

    #wrapper img {  display: block;    }
    #wrapper img {  display: table;    }
    #wrapper img {  display: flex;     }
    #wrapper img {  display: inherit;  }

कृपया बहुत मैला line-heightहैक की सिफारिश न करें , या कम से कम यह स्पष्ट करें, कि यह उन सभी का सबसे खराब "समाधान" क्यों है: पल किसी को छवि के बगल में पाठ डालता है (विशेषकर बीआर टैग के साथ बहु-आयामी बहु-रेखा), वे इससे भी बदतर स्थिति में वे खुद को पाएंगे।
एस.जे.

5

मैंने उपयोग किया line-height:0और यह मेरे लिए ठीक काम करता है।


क्षमा करें, -1: जो पाठ की स्थिति <BR>को खराब कर देता है, इसलिए यदि कोई व्यक्ति छवि के बगल में कुछ (esp। बहु-रेखा, कहते हैं, ) पाठ डालता है, तो उनके पास एक गलत व्यवहार, अतिव्यापी / अति-गड़बड़ गड़बड़ होगी।
एस.जे.

3

मैंने पाया कि यह प्रदर्शन का उपयोग करके बहुत अच्छा काम करता है: ब्लॉक; छवि पर और ऊर्ध्वाधर-संरेखित करें: शीर्ष; पाठ पर।

.imagebox {
    width:200px;
    float:left;
    height:88px;
    position:relative;
    background-color: #999;
}
.container {
    width:600px;
    height:176px;
    background-color: #666;
    position:relative;
    overflow:hidden;
}
.text {
    color: #000;
    font-size: 11px;
    font-family: robotomeduim, sans-serif;
    vertical-align:top;
    
}

.imagebox img{ display:block;}
<div class="container">
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
</div>

या आप कोड को JS FIDDLE संपादित कर सकते हैं


-1

मैंने सिर्फ float:leftडिव में जोड़ा और यह काम कर गया


9
ऐसा इसलिए है क्योंकि सेटिंग के float:leftकारणdisplay:block
केविन बाउचर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.