दो इनलाइन-ब्लॉक तत्व, प्रत्येक 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>

JSFiddle: http://jsfiddle.net/5EcPK/

उपरोक्त कोड एक पंक्ति में #left div और #right div, अगल-बगल रखने की कोशिश कर रहा है। लेकिन जैसा कि आप उपरोक्त JSFiddle URL में देख सकते हैं, ऐसा नहीं है।

मैं डिव में से किसी एक की चौड़ाई को 49% तक कम करने के मुद्दे को हल करने में सक्षम हूं। Http://jsfiddle.net/mUKSC/ देखें । लेकिन यह एक आदर्श समाधान नहीं है क्योंकि दो विभाजनों के बीच एक छोटा अंतर दिखाई देता है।

एक और तरीका है कि मैं समस्या को हल करने में सक्षम हूं, दोनों डिवीजनों को फ्लोट करके। Http://jsfiddle.net/VptQm/ देखें । यह ठीक काम करता है।

लेकिन मेरा मूल प्रश्न बना हुआ है। क्यों जब दोनों डिवीजनों को इनलाइन-ब्लॉक तत्वों के रूप में रखा जाता है, तो वे कंधे से कंधा मिलाकर फिट नहीं होते हैं?

जवाबों:


139

inline-blockतत्वों का उपयोग करते समय, whitespace उन तत्वों के बीच हमेशा एक समस्या होगी (यह स्थान लगभग ~ 4px चौड़ा है)।

तो, आपके दोनों divs, जिसमें दोनों की 50% चौड़ाई है, प्लस whitespace(~ 4px) चौड़ाई में 100% से अधिक है, और इसलिए यह टूट जाता है। आपकी समस्या का उदाहरण:


इसे ठीक करने के कुछ तरीके हैं:

1. उन तत्वों के बीच कोई स्थान नहीं

2. HTML टिप्पणियों का उपयोग करना

3. माता-पिता font-sizeको सेट करें 0, और फिर inline-blockतत्वों में कुछ मूल्य जोड़ दें

4. उनके बीच एक नकारात्मक मार्जिन का उपयोग करना ( बेहतर नहीं )

5. समापन कोण छोड़ने

6. कुछ HTML समापन टैगों को छोड़ना ( संदर्भ के लिए @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 है। फ्लेक्सबॉक्स या उससे भी बेहतर - सीएसएस ग्रिड लेआउट का उपयोग करें


3
@hoosierEE यह बकवास नहीं है। तत्वों के बीच का स्थान ठीक है, ऐसा इसलिए है क्योंकि इनलाइन-ब्लॉक तत्व टेक्स्ट लाइन पर स्थिति बनाएंगे। यदि आप एक पंक्ति में एक स्थान रखते हैं, तो एक स्थान होगा। तो व्यवहार सही है, भले ही आपको लगता है कि यह एक मुद्दा है (जैसा कि Vucko इसे गलत कहते हैं)।
मार्कोस पेरेज़ गुदे

2
मैं @ MarcosPérezGude से सहमत हूं, यह व्यवहार सही है। जैसा कि आप मेरी पोस्ट से देख सकते हैं, उस व्हाट्सएप को हटाने के कुछ तरीके हैं (मैं स्वयं सफेद स्थान को हटाने के लिए HTML टिप्पणियों का उपयोग करता हूं)। लेकिन अगर आपको लगता है कि सफेद जगह है, तो आप हमेशा उपयोग कर सकते हैं flexbox, table/table-row/table-cellया उपयोग कर सकते हैं float
व्यू

2
मैं पूरी तरह से इनलाइन-ब्लॉक का उपयोग करता हूं। मेरा सामान्य दृष्टिकोण है parent { font-size:0; } child {font-size: 1rem; }। रीम्स के साथ अब सबसे आसान है
मार्कोस पेरेज़ गुड

यह थोड़ा कष्टप्रद है कि टैब अभी भी रिक्त स्थान के रूप में पार्स हैं। मैंने पहले कभी नहीं देखा कि समापन टैग को गिराने से पहले क्या कोई अस्थिरता या दुष्प्रभाव होता है?
मिंटवैलस

यह भी सुनिश्चित करें borderकि बंद है। यदि आप div चल रहे हैं तो यह स्थान जोड़ सकता है।
२२

22

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

इनलाइन-ब्लॉक के बजाय या तो उन्हें ब्लॉक करें। यह उनके बीच अंतरिक्ष की अनदेखी divs प्रदान करेगा।

display:block;

या टैग के बीच की जगह को हटा दें

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

या जोड़ें

margin: -1en;

डिव में से एक के लिए अंतरिक्ष को कम करने के लिए सिंगल स्पेस द्वारा प्रदान किया गया।


2

कृपया नीचे दिए गए कोड की जाँच करें:

body {
    margin: 0;
}
#left {
    width: 50%;
    background: lightblue;
    display: inline-block;
    float:left;
}
#right {
    width: 50%;
    background: orange;
    display: inline-block;
    float:left;
}
<div id="left">Left</div>
<div id="right">Right</div>


2

फ्लेक्सबॉक्स उदाहरण - इसका उपयोग पैरेंट क्लास द्वारा साइड तत्वों द्वारा दो पक्ष रखने के लिए किया जाएगा।

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

ऊर्ध्वाधर रूप से एक div को दूसरे div के अंदर केंद्रित करने से लिया गया


1

यह css डिस्प्ले को जोड़कर किया जा सकता है: इनलाइन तत्वों को रखने वाले div को इनलाइन।

एक नकारात्मक मान के साथ मार्जिन का उपयोग करके सफेद स्थान को हटाते समय इसे इस विशेष तत्व में जोड़ना आवश्यक हो जाता है। इसे कक्षा में जोड़ने से उन स्थानों पर प्रभाव पड़ेगा जहाँ इस वर्ग का उपयोग किया गया है।

तो यह प्रदर्शन का उपयोग करने के लिए सुरक्षित होगा: इनलाइन;


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.