स्पैन बनाम डीआईवी (इनलाइन-ब्लॉक)


140

क्या वेबपृष्ठ को लेआउट करने के <div style="display:inline-block">बजाय उपयोग करने का कोई कारण है <span>?

क्या मैं अवधि के अंदर निहित सामग्री डाल सकता हूं? क्या मान्य है और क्या नहीं?

लेआउट जैसी 3x2 तालिका बनाने के लिए इसका उपयोग करना ठीक है?

<div>
   <span> content1(divs,p, spans, etc) </span>
   <span> content2(divs,p, spans, etc) </span>
   <span> content3(divs,p, spans, etc) </span>
</div>
<div>
   <span> content4(divs,p, spans, etc) </span>
   <span> content5(divs,p, spans, etc) </span>
   <span> content6(divs,p, spans, etc) </span>
</div>

16
यदि आप वैध एक्सएचटीएमएल दस्तावेज़ के लिए जा रहे हैं तो आप इनलाइन तत्वों के अंदर ब्लॉक स्तर के तत्व नहीं डाल सकते हैं।
मूरज

1
html तत्वों पर wiki en.wikipedia.org/wiki/HTML_element
moorej

जवाबों:


187

HTML कल्पना के अनुसार , <span>एक इनलाइन तत्व है और <div>एक ब्लॉक तत्व है। अब इसे displayसीएसएस संपत्ति का उपयोग करके बदला जा सकता है लेकिन एक मुद्दा है: HTML सत्यापन के संदर्भ में, आप इनलाइन तत्वों के अंदर ब्लॉक तत्वों को नहीं डाल सकते हैं:

<p>...<div>foo</div>...</p>

यहां तक ​​कि अगर आप को बदलने या <div>करने के लिए भी कड़ाई से मान्य नहीं है ।inlineinline-block

तो, अगर आपका तत्व है inlineया inline-blockएक का उपयोग करें <span>। यदि यह एक blockस्तरीय तत्व है, तो एक का उपयोग करें <div>


1
हाँ, आप एक स्पैन स्टाइल कर सकते हैं और इसे डिव की तरह ही व्यवहार कर सकते हैं
डेव

1
मैं इस बात से सहमत हूं कि inline-blockइससे inlineकहीं अधिक घनिष्ठ संबंध है block
बॉब अमन

11
मूल प्रश्न क्या वैध है के बारे में पूछा, और सत्यापन के लिए, <span>और <div>वास्तव में अलग हैं, के रूप में <span>(एक के भीतर मान्य एक इनलाइन तत्व है <p>उदाहरण के लिए,) है, जबकि <div>एक ब्लॉक तत्व (एक के भीतर मान्य नहीं है <p>)।
ब्रायन कैंपबेल

8
@cletus <p> एक ब्लॉक तत्व नहीं है?
एरिस

8
<p>एक ब्लॉक तत्व है जो "ब्लॉक-स्तरीय तत्वों को शामिल नहीं कर सकता है" ( लिंक ), इसलिए उदाहरण के अमान्य होने के कारण <p>यह इनलाइन नहीं है।
पेरो पी।

19

यदि आप एक वैध एक्सएचटीएमएल दस्तावेज़ रखना चाहते हैं तो आप एक पैराग्राफ के अंदर एक div नहीं डाल सकते।

इसके अलावा, संपत्ति के प्रदर्शन के साथ एक div: इनलाइन-ब्लॉक एक स्पैन से अलग तरह से काम करता है। एक अवधि डिफ़ॉल्ट रूप से एक इनलाइन तत्व है, आप ब्लॉक से जुड़ी चौड़ाई, ऊंचाई और अन्य गुण सेट नहीं कर सकते। दूसरी ओर, इनलाइन-ब्लॉक के साथ एक तत्व अभी भी किसी भी आसपास के पाठ के साथ "प्रवाह" करेगा, लेकिन आप गुण जैसे चौड़ाई, ऊंचाई आदि सेट कर सकते हैं। संपत्ति प्रदर्शन के साथ एक अवधि: ब्लॉक उसी तरह से प्रवाह नहीं करेगा इनलाइन-ब्लॉक तत्व के रूप में, लेकिन एक गाड़ी वापसी बनाएगा और डिफ़ॉल्ट मार्जिन होगा।

ध्यान दें कि सभी ब्राउज़रों में इनलाइन-ब्लॉक समर्थित नहीं है। उदाहरण के लिए फ़ायरफ़ॉक्स 2 और इससे कम आपको उपयोग करना होगा:

display: -moz-inline-stack;

जो एफएफ 3 में एक इनलाइन ब्लॉक तत्व से थोड़ा अलग प्रदर्शित करता है।

क्रॉस ब्राउज़र इनलाइन-ब्लॉक एलिमेंट्स बनाने पर यहाँ एक बढ़िया लेख है


-मोज़-इनलाइन-ब्लॉक इनलाइन-ब्लॉक नहीं करता है।
मूरज

यदि आप इसे FF3 में इनलाइन ब्लॉक की तरह अधिक प्रदर्शित करना चाहते हैं तो आपको वास्तव में इनलाइन-स्टैक का भी उपयोग करना चाहिए।
मूरज

बहुत दिलचस्प लिंक के लिए +1। कई बार ऐसा हुआ है कि इनलाइन-ब्लॉक ने कई समस्याओं को हल किया होगा।
टॉम

5
  1. इनलाइन-ब्लॉक तत्व के प्रदर्शन को इनलाइन या ब्लॉक करने के लिए सेट करने के बीच का एक आधा बिंदु है। यह प्रदर्शन जैसे दस्तावेज़ के इनलाइन प्रवाह में तत्व रखता है: इनलाइन करता है, लेकिन आप तत्व के बॉक्स विशेषताओं (चौड़ाई, ऊंचाई और ऊर्ध्वाधर मार्जिन) को हेरफेर कर सकते हैं जैसे आप प्रदर्शन के साथ कर सकते हैं: ब्लॉक।

  2. हमें इनलाइन तत्वों के भीतर ब्लॉक तत्वों का उपयोग नहीं करना चाहिए। यह अमान्य है और ऐसी प्रथाओं को करने का कोई कारण नहीं है।


3

मुझे पता है कि यह क्यू पुरानी है, लेकिन स्पैन के बजाय सभी डीआईवी का उपयोग क्यों नहीं किया जाता है? फिर सब एक साथ खुश होकर खेलते हैं।

उदाहरण:

<div> 
   <div> content1(divs,p, spans, etc) </div> 
   <div> content2(divs,p, spans, etc) </div> 
   <div> content3(divs,p, spans, etc) </div> 
</div> 
<div> 
   <div> content4(divs,p, spans, etc) </div> 
   <div> content5(divs,p, spans, etc) </div> 
   <div> content6(divs,p, spans, etc) </div> 
</div>

1
मुझे लगता है कि लक्ष्य सब कुछ संभव के रूप में दुबला और अर्थपूर्ण रखना है। इसलिए यदि आपके पास एक हेडर है और आप एक आंतरिक आवरण div चाहते हैं - यह <em> लगता है </ em> अधिक शब्दार्थ होना चाहिए: हैडर {} और हेडर स्पैन {} तब यह हेडर {} और .inner {} होगा। । हालांकि ... यदि आप .inner का उपयोग करते हैं, तो आप इसे कई बार उपयोग कर सकते हैं - स्पैन सबसे अधिक संभावना है कि इसे स्वतंत्र रूप से स्टाइल किया जाएगा। निचला रेखा - आप जितना संभव हो उतना कम मार्कअप का उपयोग करना चाहते हैं - इसलिए लोग div> div> div> div> div आदि से बचने के तरीकों का पता लगाने की कोशिश कर रहे हैं
sheriffderek

3

मुझे लगता है कि इनलाइन-एलिमेंट्स (जैसे स्पैन) और ब्लॉक-एलिमेंट्स (जैसे div) के बीच के बुनियादी अंतरों को समझने में मदद मिलेगी कि यह समझने के लिए कि "डिस्प्ले: इनलाइन-ब्लॉक" इतना उपयोगी क्यों है।

समस्या : इनलाइन एलिमेंट्स (जैसे स्पान, बटन, इनपुट आदि) "मार्जिन" को केवल क्षैतिज रूप से लेते हैं (मार्जिन-लेफ्ट और मार्जिन-राइट) ऑन, वर्टिकल नहीं। वर्टिकल रिक्ति केवल ब्लॉक एलिमेंट्स पर काम करती है (या यदि "डिस्प्ले: ब्लॉक" सेट है)

समाधान : केवल "प्रदर्शन: इनलाइन-ब्लॉक" के माध्यम से भी ऊर्ध्वाधर दूरी (ऊपर और नीचे) ले जाएगा। कारण: इनलाइन तत्व स्पैन, अब बाहर की ओर एक ब्लॉक तत्व की तरह व्यवहार करता है, लेकिन अंदर एक इनलाइन तत्व की तरह

यहाँ कोड उदाहरण:

 /* Inlineelement */

        div,
        span {
            margin: 30px;
        }

        span {
            outline: firebrick dotted medium;
            background-color: antiquewhite;
        }

        span.mitDisplayBlock {
            background: #a2a2a2;
            display: block;
            width: 200px;
            height: 200px;
        }

        span.beispielMargin {
            margin: 20px;
        }

        span.beispielMarginDisplayInlineBlock {
            display: inline-block;
        }

        span.beispielMarginDisplayInline {
            display: inline;
        }

        span.beispielMarginDisplayBlock {
            display: block;
        }

        /* Blockelement */

        div {
            outline: orange dotted medium;
            background-color: deepskyblue;
        }

        .paddingDiv {
            padding: 20px;
            background-color: blanchedalmond;
        }

        .marginDivWrapper {
            background-color: aliceblue;

        }

        .marginDiv {
            margin: 20px;
            background-color: blanchedalmond;
        }
    </style>
    <style>
        /* Nur für das w3school Bild */

        #w3_DIV_1 {
            bottom: 0px;
            box-sizing: border-box;
            height: 391px;
            left: 0px;
            position: relative;
            right: 0px;
            text-size-adjust: 100%;
            top: 0px;
            width: 913.984px;
            perspective-origin: 456.984px 195.5px;
            transform-origin: 456.984px 195.5px;
            background: rgb(241, 241, 241) none repeat scroll 0% 0% / auto padding-box border-box;
            border: 2px dashed rgb(187, 187, 187);
            font: normal normal 400 normal 15px / 22.5px Lato, sans-serif;
            padding: 45px;
            transition: all 0.25s ease-in-out 0s;
        }

        /*#w3_DIV_1*/

        #w3_DIV_1:before {
            bottom: 349.047px;
            box-sizing: border-box;
            content: '"Margin"';
            display: block;
            height: 31px;
            left: 0px;
            position: absolute;
            right: 0px;
            text-align: center;
            text-size-adjust: 100%;
            top: 6.95312px;
            width: 909.984px;
            perspective-origin: 454.984px 15.5px;
            transform-origin: 454.984px 15.5px;
            font: normal normal 400 normal 21px / 31.5px Lato, sans-serif;
        }

        /*#w3_DIV_1:before*/

        #w3_DIV_2 {
            bottom: 0px;
            box-sizing: border-box;
            color: black;
            height: 297px;
            left: 0px;
            position: relative;
            right: 0px;
            text-decoration: none solid rgb(255, 255, 255);
            text-size-adjust: 100%;
            top: 0px;
            width: 819.984px;
            column-rule-color: rgb(255, 255, 255);
            perspective-origin: 409.984px 148.5px;
            transform-origin: 409.984px 148.5px;
            caret-color: rgb(255, 255, 255);
            background: rgb(76, 175, 80) none repeat scroll 0% 0% / auto padding-box border-box;
            border: 0px none rgb(255, 255, 255);
            font: normal normal 400 normal 15px / 22.5px Lato, sans-serif;
            outline: rgb(255, 255, 255) none 0px;
            padding: 45px;
        }

        /*#w3_DIV_2*/

        #w3_DIV_2:before {
            bottom: 258.578px;
            box-sizing: border-box;
            content: '"Border"';
            display: block;
            height: 31px;
            left: 0px;
            position: absolute;
            right: 0px;
            text-align: center;
            text-size-adjust: 100%;
            top: 7.42188px;
            width: 819.984px;
            perspective-origin: 409.984px 15.5px;
            transform-origin: 409.984px 15.5px;
            font: normal normal 400 normal 21px / 31.5px Lato, sans-serif;
        }

        /*#w3_DIV_2:before*/

        #w3_DIV_3 {
            bottom: 0px;
            box-sizing: border-box;
            height: 207px;
            left: 0px;
            position: relative;
            right: 0px;
            text-size-adjust: 100%;
            top: 0px;
            width: 729.984px;
            perspective-origin: 364.984px 103.5px;
            transform-origin: 364.984px 103.5px;
            background: rgb(241, 241, 241) none repeat scroll 0% 0% / auto padding-box border-box;
            font: normal normal 400 normal 15px / 22.5px Lato, sans-serif;
            padding: 45px;
        }

        /*#w3_DIV_3*/

        #w3_DIV_3:before {
            bottom: 168.344px;
            box-sizing: border-box;
            content: '"Padding"';
            display: block;
            height: 31px;
            left: 3.64062px;
            position: absolute;
            right: -3.64062px;
            text-align: center;
            text-size-adjust: 100%;
            top: 7.65625px;
            width: 729.984px;
            perspective-origin: 364.984px 15.5px;
            transform-origin: 364.984px 15.5px;
            font: normal normal 400 normal 21px / 31.5px Lato, sans-serif;
        }

        /*#w3_DIV_3:before*/

        #w3_DIV_4 {
            bottom: 0px;
            box-sizing: border-box;
            height: 117px;
            left: 0px;
            position: relative;
            right: 0px;
            text-size-adjust: 100%;
            top: 0px;
            width: 639.984px;
            perspective-origin: 319.984px 58.5px;
            transform-origin: 319.984px 58.5px;
            background: rgb(191, 201, 101) none repeat scroll 0% 0% / auto padding-box border-box;
            border: 2px dashed rgb(187, 187, 187);
            font: normal normal 400 normal 15px / 22.5px Lato, sans-serif;
            padding: 20px;
        }

        /*#w3_DIV_4*/

        #w3_DIV_4:before {
            box-sizing: border-box;
            content: '"Content"';
            display: block;
            height: 73px;
            text-align: center;
            text-size-adjust: 100%;
            width: 595.984px;
            perspective-origin: 297.984px 36.5px;
            transform-origin: 297.984px 36.5px;
            font: normal normal 400 normal 21px / 73.5px Lato, sans-serif;
        }

        /*#w3_DIV_4:before*/
   <h1> The Box model - content, padding, border, margin</h1>
    <h2> Inline element - span</h2>
    <span>Info: A span element can not have height and width (not without "display: block"), which means it takes the fixed inline size </span>

    <span class="beispielMargin">
        <b>Problem:</b> inline elements (eg span, a, button, input etc.) take "margin" only vertically (margin-left and margin-right)
        on, not horizontal. Vertical spacing works only on block elements (or if display: block is set) </span>

    <span class="beispielMarginDisplayInlineBlock">
        <b>Solution</b> Only through
        <b> "display: inline-block" </ b> will also take the vertical distance (top and bottom). Reason: Inline element Span,
        behaves now like a block element to the outside, but like an inline element inside</span>

    <span class="beispielMarginDisplayInline">Example: here "display: inline". See the margin with Inspector!</span>

    <span class="beispielMarginDisplayBlock">Example: here "display: block". See the margin with Inspector!</span>

    <span class="beispielMarginDisplayInlineBlock">Example: here "display: inline-block". See the margin with Inspector! </span>

    <span class="mitDisplayBlock">Only with the "Display" -property and "block" -Value in addition, a width and height can be assigned. "span" is then like
        a "div" block element.  </span>

    <h2>Inline-Element - Div</h2>
    <div> A div automatically takes "display: block." </ div>
    <div class = "paddingDiv"> Padding is for padding </ div>

    <div class="marginDivWrapper">
Wrapper encapsulates the example "marginDiv" to clarify the "margin" (distance from inner element "marginDiv" to the text)
        of the outer element "marginDivWrapper". Here 20px;)
        
    <div class = "marginDiv"> margin is for the margins </ div>
        And there, too, 20px;
    </div>

    <h2>w3school sample image </h2>
    source:
    <a href="https://www.w3schools.com/css/css_boxmodel.asp">CSS Box Model</a>
    <div id="w3_DIV_1">
        <div id="w3_DIV_2">
            <div id="w3_DIV_3">
                <div id="w3_DIV_4">
                </div>
            </div>
        </div>
    </div>


2

जैसा कि अन्य लोगों ने उत्तर दिया है ... divएक "ब्लॉक एलिमेंट" है (अब फ्लो कंटेंट के रूप में पुनर्परिभाषित किया गया है ) और spanएक "इनलाइन एलिमेंट" है ( फ़ेसिंग कंटेंट )। हां, आप इन तत्वों की डिफ़ॉल्ट प्रस्तुति को बदल सकते हैं, लेकिन "प्रवाह" बनाम "ब्लॉक" और "वाक्यांश" बनाम "इनलाइन" के बीच अंतर है।

प्रवाह सामग्री के रूप में वर्गीकृत एक तत्व का उपयोग केवल उसी स्थान पर किया जा सकता है जहां प्रवाह सामग्री अपेक्षित है, और एक सामग्री को वर्गीकृत किया जा सकता है जहाँ पर सामग्री का उपयोग किया जा सकता है, जहाँ सामग्री की अपेक्षा की जाती है। चूंकि सभी शब्दों सामग्री है प्रवाह सामग्री, एक वाक्यांश तत्व भी कहीं भी इस्तेमाल किया जा सकता प्रवाह सामग्री की उम्मीद है। चश्मा अधिक विस्तृत जानकारी प्रदान करते हैं

इस तरह के रूप में strongऔर em, सभी phrasing तत्वों में केवल अन्य phrasing तत्व शामिल हो सकते हैं: आप उदाहरण के लिए tableअंदर नहीं डाल सकते citeअधिकांश इस तरह के रूप में सामग्री प्रवाह divऔर liप्रवाह सभी प्रकार की सामग्री शामिल कर सकते हैं (और साथ ही सामग्री phrasing के रूप में), लेकिन वहाँ कुछ अपवाद हैं: p, pre, और thगैर phrasing प्रवाह सामग्री के उदाहरण ( "ब्लॉक तत्वों") हैं कि कर सकते हैं केवल शब्दों को शामिल सामग्री ("इनलाइन तत्व")। और निश्चित रूप से इस तरह के सामान्य तत्व प्रतिबंध हैं dlऔर tableकेवल कुछ तत्वों को शामिल करने की अनुमति दी जा रही है।

हालांकि ये दोनों ही divऔर pगैर-phrasing प्रवाह सामग्री, divअन्य प्रवाह सामग्री बच्चों (अधिक सहित शामिल कर सकते हैं divऔर pरों)। दूसरी ओर, pकेवल सामग्री बच्चों को ही शामिल कर सकते हैं। इसका मतलब है कि आप एक divअंदर नहीं डाल सकते हैं p, भले ही दोनों गैर-प्रवाह प्रवाह तत्व हैं।

अब यहाँ किकर है। ये सिमेंटिक स्पेसिफिकेशंस असंबंधित हैं कि तत्व को कैसे प्रदर्शित किया जाता है। इस प्रकार, यदि आपके divअंदर एक है span, तो आपके पास span {display: block;}और div {display: inline;}आपके सीएसएस में भी आपको एक सत्यापन त्रुटि मिलेगी ।


इनलाइन-इन-इनलाइन के बारे में इनलाइन-ब्लॉक के अंदर और ब्लॉक के बारे में क्या?
user764754 15

@ user764754 जब तक आप ऐनक का पालन करते हैं, आप अपनी इच्छानुसार किसी भी तत्व को स्टाइल कर सकते हैं और यह अभी भी मान्य होगा। ( inline-blockएक सीएसएस शैली है, एक प्रकार का तत्व या सामग्री मॉडल नहीं।)
चेरीवे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.