मेरे इनलाइन-ब्लॉक तत्व ठीक से नहीं चमक रहे हैं


83

सभी तत्वों .track-containerको अच्छा और पंक्तिबद्ध करना चाहिए, प्रत्येक पक्ष को 200px ऊंचाई तक विवश करना चाहिए, जो उन्हें बिना किसी अजीब मार्जिन या पैडिंग के दिया गया है। इसके बजाय, आपके पास विचित्रता है जो पूर्वोक्त फ़िडल में होती है।

क्या कारण है .album-artworkऔर .track-infoपृष्ठ को आधा नीचे धकेलने के लिए, और मैं इसे कैसे ठीक कर सकता हूं? इसके अलावा, मैं स्वीकार करता हूं कि एक टेबल इस पूरे सेटअप के करीब पहुंचने का एक बेहतर तरीका हो सकता है, लेकिन मैं ऊपर दिए गए कोड से समस्या का पता लगाना चाहता हूं ताकि मैं इस गलती से सीख सकूं।

.track-container {
    padding:0;
    width: 600px;
    height: 200px;
    border: 1px solid black;
    list-style-type: none;
    margin-bottom: 10px;
}

.position-data {
    overflow: none;
    display: inline-block;
    width: 12.5%;
    height: 200px;
    margin: 0;
    padding: 0;
    border: 1px solid black;
}

.current-position, .position-movement {
    height: 100px;
    width: 100%;
    margin: 0;
    padding: 0;
    border: 1px solid black;
}

.album-artwork {
    display: inline-block;
    height: 200px;
    width: 20%;
    border: 1px solid black;
}

.track-info {
    display: inline-block;
    padding-left: 10px;
    height: 200px;
    border: 1px solid black;
}
<div class="track-container">
    <div class="position-data">
        <div class="current-position">1</div>
        <div class="position-movement">2</div>
    </div>
    <div class="album-artwork">fdasfdsa</div>
    <div class="track-info">fdafdsa</div>
</div>

यहाँ एक JSFiddle है

जवाबों:


180

10.8 लाइन ऊंचाई की गणना: 'लाइन-ऊँचाई' और 'ऊर्ध्वाधर-संरेखित' गुण

एक 'इनलाइन-ब्लॉक' की आधार रेखा सामान्य प्रवाह में उसके अंतिम लाइन बॉक्स की आधार रेखा होती है, जब तक कि इसमें कोई-इन-लाइन लाइन बॉक्स न हों या यदि इसकी 'अतिप्रवाह' संपत्ति में 'दृश्यमान' के अलावा अन्य एक संगणित मूल्य हो, बेसलाइन किस मामले में सबसे नीचे का किनारा है।

यह inline-blockतत्वों को शामिल करने वाला एक सामान्य मुद्दा है। इस स्थिति में, vertical-alignसंपत्ति का डिफ़ॉल्ट मान है baseline। यदि आप मान को बदलते हैं top, तो यह अपेक्षित रूप से व्यवहार करेगा।

अपडेटेड उदाहरण

.position-data {
    vertical-align: top;
}

2
धन्यवाद! युगों से देख रहे हैं। मेरी समस्या html को इनलाइन-ब्लॉक तत्वों में सम्मिलित कर रही थी, जिसने ऊर्ध्वाधर स्थिति को प्रभावित किया। समस्या केवल सफारी में दिखाई देती है।
कप्पो

2
मैं सब कुछ करने की कोशिश कर रहा हूँ, ऐसा करने से मेरी समस्या तुरंत ठीक हो गई!
xorinzor

2
मेरे दिन को बचाया
ओसियन

3
मैंने इस मुद्दे पर इतना समय बिताया है क्योंकि मेरे आंतरिक विभाग को मेरी प्रतिक्रिया परियोजना में संरेखित नहीं किया जा रहा है। यह सचमुच मुझे घंटे बचाया!
SeaWarrior404

3
5 साल बाद, अभी भी जान बच रही है। धन्यवाद!
सेउ मद्रगु सिप

33

अंदर तत्वों .track-containerहैं इनलाइन स्तर के एक ही में बॉक्स लाइन बॉक्स

इसलिए, उनके ऊर्ध्वाधर संरेखण vertical-alignसंपत्ति द्वारा निर्दिष्ट किया जाता है:

यह संपत्ति एक इनलाइन-स्तरीय तत्व द्वारा उत्पन्न बक्से के एक पंक्ति बॉक्स के अंदर ऊर्ध्वाधर स्थिति को प्रभावित करती है।

डिफ़ॉल्ट रूप से, इसका मूल्य है baseline:

मूल बॉक्स के आधार रेखा के साथ बॉक्स की आधार रेखा संरेखित करें। यदि बॉक्स में आधार रेखा नहीं है, तो माता-पिता की आधार रेखा के साथ नीचे मार्जिन किनारे को संरेखित करें।

इस मामले में, वे सभी आधारभूत हैं, जिनकी गणना के अनुसार की जाती है

एक 'इनलाइन-ब्लॉक' की आधार रेखा सामान्य प्रवाह में उसके अंतिम लाइन बॉक्स की आधार रेखा होती है, जब तक कि इसमें कोई प्रवाह लाइन बॉक्स न हो या यदि इसकी 'अतिप्रवाह' संपत्ति में 'दृश्यमान' के अलावा अन्य एक संगणित मूल्य हो, बेसलाइन किस मामले में सबसे नीचे का किनारा है।

निम्नलिखित छवि स्पष्ट करती है कि क्या हो रहा है (लाल रेखा आधार रेखा है):

यहां छवि विवरण दर्ज करें

इसलिए, आप कर सकते हैं

  • तत्वों के ऊर्ध्वाधर संरेखण को बदलें, जैसे top, middleयाbottom

    .track-container > * {
      vertical-align: middle;
    }
    

  • overflowतत्वों को कुछ अलग से सेट करें visible, जैसे कि hiddenया auto, ताकि उनका आधार रेखा उनके नीचे का मार्जिन किनारे हो।

    .track-container > * {
      overflow: hidden;
    }
    

  • सुनिश्चित करें कि तत्वों में कोई प्रवाह लाइन बॉक्स नहीं है, ताकि उनकी आधार रेखा उनके नीचे मार्जिन किनारे हो। यही है, सामग्री प्रवाह से बाहर होनी चाहिए :

    एक तत्व प्रवाह से बाहर कहा जाता है अगर यह फ्लोट किया जाता है, बिल्कुल तैनात है, या मूल तत्व है। एक तत्व को प्रवाह में कहा जाता है यदि यह प्रवाह से बाहर नहीं है।

    तो उदाहरण के लिए, आप एक आवरण में तत्वों की सामग्री रख सकते हैं, और इसे इसके साथ स्टाइल कर सकते हैं float: left:

    .track-container > * > .wrapper {
      float: left;
    }
    


2
स्वीकृत उत्तर की तुलना में अधिक विस्तृत और बेहतर तरीके से समझाया गया। आश्चर्य है कि इसे अधिक क्यों नहीं बनाया गया

1
@ user141554 धन्यवाद :) ध्यान दें कि यह उत्तर दूसरों की तुलना में बहुत अधिक हाल का है, इसलिए कम अपवोट होना सामान्य है।
ओरोल

8

आपको ऊर्ध्वाधर-संरेखण जोड़ने की आवश्यकता है: उन दो तत्वों के लिए शीर्ष:

.album-artwork, .track-info {
    vertical-align:top;
}

jsFiddle उदाहरण

डिफ़ॉल्ट वर्टिकल अलाइनमेंट बेसलाइन है, लेकिन आप इसके बजाय शीर्ष की तलाश कर रहे हैं।


सरल बनाने के लिए मैं .track-कंटेनर div {vertical-align: top;}
Cam

1

या आप float:left;3 तत्वों को सेट कर सकते हैं।

http://jsfiddle.net/fC2nt/


यह काम करेगा, लेकिन यह inline-blockतत्वों के उपयोग के उद्देश्य को पराजित करता है ।
जोश क्रोज़ियर

सच, तुम सही हो। मैं इस awser को डिलीट नहीं कर रहा हूँ, यह किसी के लिए सबक हो सकता है :)
Szymon

1
आप सही हैं - 1+ .. इसके अलावा, overflow:hiddenफ़्लोट किए गए तत्वों को शामिल करने के लिए मूल तत्व में जोड़ने की आवश्यकता हो सकती है। आपको हालांकि इसे प्रदर्शित करने वाला डेमो जोड़ना चाहिए।
जोश क्रॉजियर

1

सुनिश्चित करें कि आप जिन तत्वों को संरेखित करने का प्रयास कर रहे हैं उन सभी पर लाइन-ऊँचाई का अनुपात समान है। यदि आप DIV, P, H1-5, DT, DD, INPUT, BUTTON के मिश्रण का उपयोग कर रहे हैं, तो यह ऊर्ध्वाधर संरेखण में अनियमितताओं का कारण होगा, जो कि आपने पहले से कहीं और परिभाषित किया है।

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