Qual è la differenza tra display: inline e display: inline-block?


607

Qual è esattamente la differenza tra i valori inlinee inline-blockdei CSS display?

Risposte:


1351

Una risposta visiva

Immagina un <span>elemento dentro a <div>. Se dai <span>all'elemento un'altezza di 100 px e un bordo rosso, ad esempio, sembrerà così con

display: in linea

display: in linea

display: blocco in linea

display: blocco in linea

blocco di visualizzazione

inserisci qui la descrizione dell'immagine

Codice: http://jsfiddle.net/Mta2b/

Gli elementi con display:inline-blocksono come display:inlineelementi, ma possono avere una larghezza e un'altezza . Ciò significa che puoi usare un elemento di blocco inline come blocco mentre lo fai scorrere all'interno di testo o altri elementi.

Differenza di stili supportati come riepilogo:

  • Inline : solo margin-left, margin-right, padding-left,padding-right
  • inline-block : margin, padding, height,width

6
Grande intuizione. Quindi l'unica differenza è che l'attributo height degli elementi inline non può essere impostato?
user2316667,

7
@utente2316667 e larghezza
Oscar Calderon

2
@ user2316667 e @OscarCalderon: inoltre, agli elementi inline non interessano i margini e le imbottiture verticali e l'elemento successivo verrà posizionato sulla stessa riga (nessuna interruzione di riga dopo di essa). gli elementi del blocco come as p, divottengono un'intera linea di larghezza (forza un'interruzione di linea) ma rispettano la larghezza / altezza e tutte le imbottiture / i margini orizzontali / verticali. Gli elementi in-block hanno lo stesso comportamento del blocco ma senza un'intera linea (altri elementi possono essere posizionati accanto a loro)
S.Serpooshan

1
padding-top e padding-right influenzano anche l'effetto di visualizzazione dell'elemento inline, causando un po 'di confusione.
tomwang1013,

2
@ manuman94 No, non significa che. Esistono casi d'uso per tutti i diversi tipi di display.
splattne,

126

display: inline;è una modalità di visualizzazione da utilizzare in una frase. Ad esempio, se hai un paragrafo e vuoi evidenziare una sola parola, fai:

<p>
    Pellentesque habitant morbi <em>tristique</em> senectus
    et netus et malesuada fames ac turpis egestas.
</p>

L' <em>elemento ha un display: inline;valore predefinito, poiché questo tag viene sempre utilizzato in una frase. L' <p>elemento ha un display: block;valore predefinito, poiché non è né una frase né una frase, è un blocco di frasi.

Un elemento con display: inline; non può avere a heighto a widtho una verticale margin. Un elemento con display: block; può avere un width, heighte margin.
Se si desidera aggiungere heighta <em>all'elemento, è necessario impostare questo elemento su display: inline-block;. Ora puoi aggiungere heighta all'elemento e ogni altro stile di blocco (la blockparte di inline-block), ma è inserito in una frase (la inlineparte di inline-block).


11
Bella risposta! tl; dr - Se vuoi ridimensionare gli elementi inline potresti usare il blocco inline come tipo di visualizzazione.
errore

7
Piccola correzione: gli elementi incorporati possono avere margine orizzontale (destro, sinistro), ma non margine verticale (superiore, inferiore)
whyleee

1
Buona risposta perché hai menzionato ciò che possiamo / non possiamo fare quando si sceglie uno dei displayvalori.
ha9u63ar,

14

Una cosa non menzionata nelle risposte è che l'elemento inline può spezzarsi tra le righe mentre il blocco inline non può (e ovviamente bloccare)! Quindi gli elementi in linea possono essere utili per modellare frasi di testo e blocchi al loro interno, ma poiché non possono essere riempiti puoi usare l' altezza della linea .

<div style="width: 350px">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  <div style="display: inline; background: #F00; color: #FFF">
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<hr/>
<div style="width: 350px">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  <div style="display: inline-block; background: #F00; color: #FFF">
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

inserisci qui la descrizione dell'immagine


6

Tutte le risposte sopra forniscono importanti informazioni sulla domanda originale. Tuttavia, c'è una generalizzazione che sembra sbagliata.

È possibile impostare la larghezza e l'altezza su almeno un elemento inline (che mi viene in mente) - l' <img>elemento.

Entrambe le risposte accettate qui e su questo duplicato affermano che ciò non è possibile ma che non sembra una regola generale valida.

Esempio:

img {
  width: 200px;
  height: 200px;
  border: 1px solid red;
}
<img src="#" />

L' imgha display: inline, ma la sua widthe heightsono stati fissati con successo.


2
In realtà, img-tag ha display-inline come valore di visualizzazione predefinito. Ecco perché è possibile impostare larghezza e altezza.
Alex,

img è un elemento inline -> developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements ... Quindi sostanzialmente stai dicendo più o meno esattamente la stessa cosa che sto dicendo e stai effettuando il downgrade?
alexandros84,

7
No non sono. I tag img sono "elementi sostituiti", il che significa sostanzialmente che il contenuto viene sostituito in modo che si comporti come un elemento inline block. E sì, la proprietà predefinita effettiva (la proprietà calcolata dal browser è in linea). Ma l'unica ragione è che il blocco inline non è stato introdotto fino a CSS2 e lì è un "elemento inline che si comporta come un blocco inline" perché è sostituito dal suo contenuto. cioè non stai impostando altezza / larghezza sull'elemento, lo stai impostando sul suo contenuto - Strano, sì. Lo so. drafts.csswg.org/css2/conform.html#replaced-element
Alex

Questo è davvero interessante quello che stai dicendo. Dammi un po 'di tempo per ricercare e ri-editare e forse riprendere il downvote e l'upgrade invece ..! Alla fine della giornata sento già sinceramente che questa discussione sta contribuendo alla completezza dell'intero dibattito.
alexandros84,

1

La risposta di splattne probabilmente copriva quasi tutto, quindi non ripeterò la stessa cosa, ma: inlinee mi inline-blockcomporterò diversamente con la directionproprietà CSS.

All'interno del frammento successivo viene visualizzato one two(in ordine) il rendering, come nei layout LTR. Sospetto che il browser qui abbia rilevato automaticamente la parte inglese come testo LTR e l'ha resa da sinistra a destra.

body {
  text-align: right;
  direction: rtl;
}

h2 {
  display: block; /* just being explicit */
}

span {
  display: inline;
}
<h2>
  هذا عنوان طويل
  <span>one</span>
  <span>two</span>
</h2>

Tuttavia, se vado avanti e impostato displaysu inline-block, il browser sembra rispettare la directionproprietà e rendere gli elementi da destra a sinistra in ordine, in modo che two onesia reso.

body {
  text-align: right;
  direction: rtl;
}

h2 {
  display: block; /* just being explicit */
}

span {
  display: inline-block;
}
<h2>
  هذا عنوان طويل
  <span>one</span>
  <span>two</span>
</h2>

Non so se ci sono altre stranezze in questo, l'ho scoperto empiricamente solo su Chrome.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.