ডিভের অভ্যন্তরের চিত্রটির চিত্রের নীচে অতিরিক্ত স্থান রয়েছে


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
এখানে এই প্রশ্নের একটি সংক্ষিপ্ত এবং সম্পূর্ণ উত্তর: স্ট্যাকওভারফ্লো.com
মাইকেল বেঞ্জামিন

1
এখানে এই ইস্যুতে একটি ভাল পঠন রয়েছে: অদ্ভুত <img> এইচটিএমএলে গ্যাপ
ম্যাথিউস অ্যাভেলার

উত্তর:


599

ডিফল্টরূপে, একটি চিত্র একটি চিঠির মতো ইনলাইন রেন্ডার করা হয় যাতে এটি একই লাইনে বসে থাকে যে ক, খ, সি এবং ডি বসে থাকে।

যে বংশধরদের আপনি জি, জে, পি এবং কিউ এর মতো অক্ষরে খুঁজে পেয়েছেন তার জন্য এই লাইনের নীচে জায়গা রয়েছে ।

বংশধরদের বিক্ষোভ

আপনি পারেন:

  • 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>


অন্তর্ভুক্ত চিত্রটি পাবলিক ডোমেন এবং উইকিমিডিয়া কমন্স থেকে প্রাপ্ত


9
আরও সুনির্দিষ্টভাবে বলতে গেলে, খ / সি ইনলাইন উপাদানগুলি তাদের স্রোতের স্থান গ্রহণ করে line-heightline-heightকাঙ্ক্ষিত মাত্রা সেট করা অনাকাঙ্ক্ষিত সাদা স্থানকেও অতিক্রম করবে।
কেভিন বাউচার

3
"চ" কি উতরকের মতো যোগ্যতা অর্জন করবে?
j08691

2
@ j08691 - ফন্টের উপর নির্ভর করে।
কোয়ান্টিন

134

এখানে প্রস্তাবিত অন্য বিকল্পটি চিত্রটির শৈলী হিসাবে সেট করাstyle="display: block;"


4
ধন্যবাদ। এটি ফ্ল্যাশ সিনেমার অধীনে স্থানের সাথে একই জাতীয় সমস্যাও স্থির করেছে। (প্রদর্শন যোগ করা হয়েছে: এমবেড / অবজেক্ট ট্যাগগুলিতে ব্লক করুন)
জেসিওলো

5
অথবা inline-blockআপনি যদি এখনও এটি ইমেজগুলি সাধারণভাবে করেন তেমন ইনলাইন প্রদর্শন করতে চান।
আয়ান

6
@ ইয়ান @ ইম্পেটিভ inline-blockকাজ করছে বলে মনে হয় না।
p.matinopoulos

93

দ্রুত ঠিক করা:

করার ইমেজ অধীনে ফাঁক অপসারণ , আপনি পারবেন:

  • চিত্রটির উল্লম্ব-সারিবদ্ধ বৈশিষ্ট্যটি সেট করুন vertical-align: bottom; vertical-align: top;বাvertical-align: middle;
  • চিত্রটির প্রদর্শন বৈশিষ্ট্য এতে সেট করুন display:block;

একটি লাইভ ডেমো জন্য নিম্নলিখিত কোড দেখুন:


ব্যাখ্যা: চিত্রের নীচে কেন একটি ফাঁক রয়েছে?

চিত্রের নীচে ফাঁক বা অতিরিক্ত স্থান কোনও বাগ বা সমস্যা নয়, এটি ডিফল্ট আচরণ। মূল কারণ (যে চিত্র উপাদান প্রতিস্থাপিত হয় দেখতে MDN প্রতিস্থাপিত উপাদান )। এটি তাদের "চিত্রের মতো কাজ করতে" এবং তাদের নিজস্ব অভ্যন্তরীণ মাত্রা, দিক অনুপাত থাকতে দেয় ....
ব্রাউজারগুলি তাদের প্রদর্শন বৈশিষ্ট্যগুলি তুলনা করে inlineতবে তারা তাদের একটি বিশেষ আচরণ দেয় যা তাদের inline-blockউপাদানগুলির আরও কাছাকাছি করে তোলে (যেমন আপনি তাদের উল্লম্ব সারিবদ্ধ করতে পারেন, দিতে পারেন) এগুলি একটি উচ্চতা, শীর্ষ / নীচের মার্জিন এবং প্যাডিং, রূপান্তর ...)।

এর অর্থ এটিও:

<img>কোনও বেসলাইন নেই, সুতরাং যখন চিত্রগুলি উল্লম্ব-সারিবদ্ধ: বেসলাইন সহ একটি ইনলাইন বিন্যাস প্রসঙ্গে ব্যবহৃত হবে, তখন চিত্রটির নীচের অংশটি পাঠ্য বেসলাইনে স্থাপন করা হবে।
( উত্স: MDN , জোর খনি )

ডিফল্টরূপে ব্রাউজারগুলি উল্লম্ব-প্রান্তিক বৈশিষ্ট্যটিকে বেসলাইনে গণনা করে, এটি ডিফল্ট আচরণ। নীচের চিত্রটি যেখানে পাঠ্যের উপরে বেসলাইনটি রয়েছে তা দেখায়:

পাঠ্যে বেসলাইনের অবস্থান ( চিত্র উত্স )

বেসলাইন প্রান্তিককৃত উপাদানের জন্য স্থান রাখা প্রয়োজন descenders যে বেসলাইন (যেমন নিচের প্রসারিত 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-এ ফন্ট-আকার নির্ধারণ কাজ করে না। বা এটা না?
পার্সিজন

2
@ পার্সিয়ান এটি করেন। সেটিংস পছন্দ line-height:0;করলেও আমি উল্লম্ব-প্রান্তিককরণ বা প্রদর্শন বৈশিষ্ট্যগুলির পরিবর্তনের তুলনায় এটিকে একটি ভাল কাজ হিসাবে বিবেচনা করি না
ওয়েব-টিকি

2
নোট করুন, তবে, যে কোনও ব্রাউজার সম্মান করে না font-size:0: তারা ব্যবহারকারীর সেটিংসে ফন্টের আকারটি সর্বনিম্ন আকারে সেট করে।
মিস্টার লিস্টার

হ্যাঁ মনে হচ্ছে এটি একটি সাদা জায়গা।
mrbengi

ভাল, আমি মনে করি middle text-top sub superছবির অবস্থানটি ঠিক নেই।
xianshenglu

40

একজন পিতামাতার লাইনের উচ্চতাও বাতিল করতে পারে:

#wrapper {
  line-height: 0;
}

সমস্ত সংশোধন: http://jsfiddle.net/FaPFv/


5
সতর্কবার্তা! এটি # র‍্যাপারে যে কোনও পাঠ্য নোডকেও মেরে ফেলবে। এটি উত্তরাধিকারসূত্রে প্রাপ্ত হবে। তবে সেই দুর্দান্ত ফিডলারের জন্য বোনাস পয়েন্ট! এখানে এটি পাঠ্য নোডের সাথে আপডেট হয়েছে। 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;  }

দয়া করে খুব slালু line-heightহ্যাকের প্রস্তাব দিবেন না , বা কমপক্ষে এটি পরিষ্কার করুন, কেন এটি সবার মধ্যে সবচেয়ে খারাপ "সমাধান": যে মুহূর্তে কেউ চিত্রটির পাশে পাঠ্য রাখে (বিশেষত বিআর ট্যাগগুলির সাথে পূর্বরূপিত মাল্টি-লাইন), তারা তারা শুরু করার চেয়ে খারাপ অবস্থার মধ্যে নিজেকে খুঁজে পাবে।
জেড

5

আমি ব্যবহার করতাম line-height:0 এবং এটি আমার পক্ষে ভাল কাজ করে।


দুঃখিত, -1: এটি পাঠ্যের অবস্থান <BR>স্থিতিশীল করে তোলে, সুতরাং কেউ যদি চিত্রটির পাশে কিছু (উদাহরণস্বরূপ বহু-লাইনটি বলে, দিয়ে ) রাখেন তবে তাদের একটি ভুল জায়গায় বসানো, ওভারল্যাপড / ওভারহ্যাঞ্জিং জগাখিচুড়ি থাকবে।
জেড

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>

অথবা আপনি কোডটি একটি জেএস ফিডল সম্পাদনা করতে পারেন


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.