দুটি ইনলাইন-ব্লক উপাদান, প্রতিটি 50% প্রশস্ত, একক সারিতে পাশাপাশি পাশাপাশি মানায় না


87
<!DOCTYPE html>
<html>
<head>
<title>Width issue</title>
<style type="text/css">
body {
    margin: 0;
}
#left {
    width: 50%;
    background: lightblue;
    display: inline-block;
}
#right {
    width: 50%;
    background: orange;
    display: inline-block;
}
</style>
</head>
<body>
    <div id="left">Left</div>
    <div id="right">Right</div>
</body>
</html>

জেএসফিডাল: http://jsfiddle.net/5EcPK/

উপরের কোডটি একক সারিতে # বাম ডিভ এবং # টি ডান পাশে পাশাপাশি রাখার চেষ্টা করছে। তবে আপনি উপরের জেএসফিডাল ইউআরএলটিতে দেখতে পাচ্ছেন, এটি কেস নয়।

আমি একটি ডিভের প্রস্থকে 49% এ হ্রাস করে সমস্যার সমাধান করতে সক্ষম হয়েছি। Http://jsfiddle.net/mUKSC/ দেখুন । তবে এটি একটি আদর্শ সমাধান নয় কারণ দুটি ডিভের মধ্যে একটি ছোট ফাঁক উপস্থিত হয়।

সমস্যাটি সমাধান করতে সক্ষম হবার আরেকটি উপায় হ'ল উভয় ডিভিডি ভাসিয়ে। Http://jsfiddle.net/VptQm/ দেখুন । এটি কাজ করে।

তবে আমার মূল প্রশ্নটি রয়ে গেছে। উভয় ডিভগুলিকে যখন ইনলাইন-ব্লক উপাদান হিসাবে রাখা হয় তখন কেন তারা পাশাপাশি বসে না?

উত্তর:


140

inline-blockউপাদানগুলি ব্যবহার করার সময় , whitespace সেই উপাদানগুলির মধ্যে সর্বদা একটি সমস্যা থাকবে (সেই স্থানটি প্রায় 4px প্রশস্ত)।

সুতরাং, আপনার দুটি divs, যার উভয়ই 50% প্রস্থ রয়েছে, এবং এটি whitespace(p 4px) প্রস্থে 100% এর বেশি এবং তাই এটি ভেঙে যায়। আপনার সমস্যার উদাহরণ:


এটি ঠিক করার কয়েকটি উপায় রয়েছে:

1. এই উপাদানগুলির মধ্যে কোনও স্থান নেই

2. এইচটিএমএল মন্তব্য ব্যবহার করে

3. বাবা সেট font-sizeকরতে 0, এবং তারপর কিছু মান যোগ inline-blockউপাদান

৪. তাদের মধ্যে নেতিবাচক মার্জিন ব্যবহার করা ( পছন্দনীয় নয় )

5. সমাপ্তি কোণ ছেড়েছে

6. স্কিপিং নির্দিষ্ট এইচটিএমএল ক্লোজিং ট্যাগ (ধন্যবাদ @thirtydot রেফারেন্স )


তথ্যসূত্র:

  1. সিএসএস কৌশলগুলিতে ইনলাইন ব্লক উপাদানগুলির মধ্যে স্পেসের মধ্যে লড়াই করা
  2. ডেভিড ওয়ালশ দ্বারা ইনলাইন-ব্লক উপাদানগুলির মধ্যে সাদা স্থান সরিয়ে ফেলুন
  3. ইনলাইন-ব্লক উপাদানগুলির মধ্যে স্থানটি কীভাবে সরাবেন?

হিসাবে @ MarcosPérezGude বলেন , সেরা উপায় ব্যবহার করা rem, এবং কিছু ডিফল্ট মান যোগ font-sizeউপর html(মত ট্যাগ HTML5Boilerplate )। উদাহরণ:

html{
    font-size: 1em;
}

.ib-parent{             /* ib -> inline-block */
    font-size: 0;
}

.ib-child{
    display: inline-block;
    font-size: 1rem;
}

আপডেট : এটি প্রায় 2018 এর মতো, ফ্লেক্সবক্স বা আরও ভাল ব্যবহার করুন - সিএসএস গ্রিড লেআউট


4
@hoosierEE এটি নাক কাটেনি। উপাদানগুলির মধ্যে স্থান ঠিক আছে, কারণ ইনলাইন-ব্লক উপাদানগুলি পাঠ্য লাইনে অবস্থান করবে। আপনি যদি একটি লাইনে একটি স্থান রাখেন তবে একটি স্থান থাকবে। সুতরাং আচরণটি সঠিক, এমনকি যদি আপনি ভাবেন যে এটি একটি সমস্যা (যেমন ভোকো এটিকে ভুল বলে)।
মার্কোস পেরেজ গুড

4
আমি @ মার্কোসপ্রেজ গুডের সাথে একমত, এই আচরণটি সঠিক। আপনি যেমনটি আমার পোস্ট থেকে দেখতে পাচ্ছেন, সেই সাদা স্থানটি সরিয়ে ফেলার কয়েকটি উপায় রয়েছে (আমি নিজে সাদা জায়গা অপসারণ করতে এইচটিএমএল মন্তব্যগুলি ব্যবহার করি)। কিন্তু আপনি যে সাদা স্থান মনে যদি, আপনি সবসময় ব্যবহার করতে পারেন flexbox, table/table-row/table-cellবা ব্যবহারের float
ভোকো

4
আমি পুরোপুরি ইনলাইন-ব্লক ব্যবহার করি। আমার স্বাভাবিক পদ্ধতির হয় parent { font-size:0; } child {font-size: 1rem; }। রিমসের সাথে এখন সবচেয়ে সহজ
মার্কোস পেরেজ গুড

এটি একটু বিরক্তিকর যে ট্যাবগুলি এখনও ফাঁকা স্থান হিসাবে পার্স করা হয়। আমি আগে কখনও দেখিনি যে ক্লোজিং ট্যাগটি ফেলে দেওয়ার আগে কোনও স্থিরতা বা পার্শ্ব-প্রতিক্রিয়া রয়েছে কি?
মিন্টওয়েশ 8:57

এছাড়াও borderবন্ধ আছে তা নিশ্চিত করুন । আপনি ডিভগুলি ভাসিয়ে দিলে এটি স্থান যুক্ত করতে পারে।
22 'এ বিকশিত হবে ol

23

CSS3 এ ভাল উত্তরটি হ'ল:

white-space: nowrap;

প্যারেন্ট নোডে এবং:

white-space: normal;
vertical-align: top;

50% এ ডিভ (বা অন্যান্য) এ

উদাহরণ: http://jsfiddle.net/YpTMh/19/

সম্পাদনা:

এর সাথে আরও একটি উপায় রয়েছে:

font-size: 0;

প্যারেন্ট নোডের জন্য এবং চাইল্ড নোডে ওভাররাইড করুন


7

এটি কারণ আপনার দুটি ডিভের মধ্যবর্তী সাদা স্থানটিকে স্থান হিসাবে ব্যাখ্যা করা হচ্ছে। যদি আপনি <div>নীচের মত আপনার ট্যাগগুলিকে লাইনে রেখে দেন সমস্যাটি সংশোধন করা হচ্ছে :

<div id="left"></div><div id="right"></div>


4

হয় এগুলি ইনলাইন-ব্লকের পরিবর্তে ব্লক করুন। এটি তাদের মধ্যে ফাঁকা স্থান উপেক্ষা করে ডিভেন্ড সরবরাহ করবে।

display:block;

অথবা ট্যাগের মধ্যে স্থান সরিয়ে ফেলুন

<div id='left'></div><div id='right'></div>

বা যোগ করুন

margin: -1en;

একক স্থান দ্বারা রেন্ডার করা স্থান প্রশমিত করার জন্য ডিভগুলির মধ্যে একটিতে।



2

ফ্লেক্সবক্স উদাহরণ - এটি অভিভাবক শ্রেণীর জন্য ব্যবহৃত হবে পাশাপাশি দুটি উপাদান পাশাপাশি রয়েছে holding

.parentclass {
  display: flex;
  justify-content: center;
  align-items: center; 
}

উল্লম্বভাবে অন্য ডিভের অভ্যন্তরে একটি ডিভকে কেন্দ্র করে নেওয়া হয়েছে aken


1

এটি সিএসএস প্রদর্শন যোগ করে করা যায়: ডিভের সাথে ইনলাইন যা ইনলাইন উপাদানগুলিকে ধারণ করে।

একটি নেতিবাচক মান সহ মার্জিন ব্যবহার করে সাদা স্থান অপসারণ করার সময় এটিকে এই নির্দিষ্ট উপাদানটিতে যুক্ত করা প্রয়োজনীয় হয়ে পড়ে। ক্লাসে এটি যুক্ত করার সাথে সাথে এই শ্রেণিটি ব্যবহৃত হয়েছে এমন জায়গাগুলি প্রভাব ফেলবে।

সুতরাং প্রদর্শনটি ব্যবহার করা আরও নিরাপদ হবে: ইনলাইন;


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