647 votes

Quelle est la différence entre display : inline et display : inline-block ?

Quelle est la différence exacte entre le inline et inline-block valeurs de CSS display ?

1409voto

splattne Points 48126

Une réponse visuelle

Imaginez un <span> à l'intérieur d'un élément <div> . Si vous donnez le <span> d'une hauteur de 100px et d'une bordure rouge par exemple, il ressemblera à ceci avec

affichage : en ligne

display: inline

affichage : inline-block

display: inline-block

affichage : bloc

enter image description here

Code : http://jsfiddle.net/Mta2b/

Éléments avec display:inline-block sont comme display:inline mais ils peuvent avoir un élément largeur et un hauteur . Cela signifie que vous pouvez utiliser un élément inline-block comme un bloc tout en le faisant couler dans du texte ou d'autres éléments.

Différence des styles supportés comme résumé :

  • en ligne : seulement margin-left , margin-right , padding-left , padding-right
  • inline-block : margin , padding , height , width

11 votes

Grande intuition. La seule différence est donc que l'attribut height des éléments inline ne peut pas être défini ?

8 votes

@user2316667 et largeur

3 votes

@user2316667 et @OscarCalderon : aussi, les éléments inline ne se soucient pas des marges verticales et des paddings et l'élément suivant sera placé sur la même ligne (sans retour à la ligne). p , div obtenir une ligne de toute la largeur (forcer un saut de ligne) mais respecter la largeur/hauteur et toutes les marges horizontales/verticales. Les éléments Inline-block ont le même comportement que les blocs mais sans rupture de ligne complète (d'autres éléments peuvent être placés à côté d'eux).

131voto

Wouter J Points 16327

display: inline; est un mode d'affichage à utiliser dans une phrase. Par exemple, si vous avez un paragraphe et que vous voulez mettre en évidence un seul mot, faites-le :

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

Le site <em> a un élément display: inline; par défaut, car cette balise est toujours utilisée dans une phrase. Le site <p> a un élément display: block; par défaut, car ce n'est ni une phrase ni dans une phrase, c'est un bloc de phrases.

Un élément avec display: inline; ne peut pas ont un height ou un width ou une verticale margin . Un élément avec display: block; peut ont un width , height et margin .
Si vous voulez ajouter un height à la <em> vous devez donner à cet élément la valeur display: inline-block; . Vous pouvez maintenant ajouter un height à l'élément et à tous les autres styles de bloc (l'élément block partie de inline-block ), mais il est placé dans une phrase (le inline partie de inline-block ).

13 votes

Excellente réponse ! tl;dr - Si vous voulez redimensionner en ligne éléments que vous pourriez utiliser inline-block comme type d'affichage.

8 votes

Petite correction : éléments en ligne peut ont une marge horizontale (droite, gauche), mais pas marge verticale (haut, bas)

1 votes

Bonne réponse parce que vous avez mentionné ce que l'on peut/ne peut pas faire en choisissant l'une des options suivantes display valeurs.

17voto

Ali Points 1597

Une chose qui n'est pas mentionnée dans les réponses est que l'élément inline peut rompre entre les lignes alors que l'élément inline-block ne le peut pas (et évidemment le bloc) ! Ainsi, les éléments inline peuvent être utiles pour styliser des phrases de texte et des blocs à l'intérieur de celles-ci, mais comme ils ne peuvent pas être remplis, vous pouvez utiliser la fonction hauteur de ligne à la place.

<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>

enter image description here

7voto

alexandros84 Points 100

Toutes les réponses ci-dessus apportent des informations importantes sur la question initiale. Cependant, il y a une généralisation qui semble erronée.

Il est possible pour définir la largeur et la hauteur d'au moins un élément en ligne (à ce que je sache) - la fonction <img> élément.

Les deux réponses acceptées ici et sur ce duplicata déclare que ce n'est pas possible, mais cela ne semble pas être une règle générale valable.

Exemple :

img {
  width: 200px;
  height: 200px;
  border: 1px solid red;
}

<img src="#" />

Le site img a display: inline mais son width et height ont été définis avec succès.

2 votes

En fait, les balises img ont pour valeur d'affichage par défaut display-inline. C'est pourquoi il est possible de définir la largeur et la hauteur.

0 votes

Img est un élément en ligne--> developer.mozilla.org/fr/US/docs/Web/HTML/Inline_elements ... Donc, en fait, vous dites plus ou moins exactement la même chose que moi et vous votez à la baisse ?

7 votes

Non, je ne le suis pas. Les balises img sont des "éléments remplacés", ce qui signifie essentiellement que le contenu est remplacé afin qu'il se comporte comme un élément inline-block. Et oui, la propriété par défaut réelle (la propriété calculée par le navigateur est inline). Mais la seule raison pour cela est que l'élément inline-block n'a pas été introduit avant CSS2 et qu'il s'agit donc d'un "élément inline se comportant comme un élément inline-block" parce qu'il est remplacé par son contenu. C'est-à-dire que vous ne définissez pas la hauteur/largeur de l'élément, vous la définissez sur son contenu - Bizarre, oui. Je sais. drafts.csswg.org/css2/conform.html#replaced-element

1voto

Yousef's Points 19

La réponse de splattne a probablement couvert la plupart des sujets, alors je ne vais pas répéter la même chose, mais.. : inline et inline-block se comportent différemment avec le direction Propriété CSS.

Dans l'extrait suivant, vous voyez one two (dans l'ordre) est rendu, comme c'est le cas dans les mises en page LTR. Je soupçonne le navigateur d'avoir détecté automatiquement la partie anglaise comme étant du texte LTR et de l'avoir rendu de gauche à droite.

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

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

span {
  display: inline;
}

<h2>

  <span>one</span>
  <span>two</span>
</h2>

Cependant, si je vais de l'avant et mets display à inline-block le navigateur semble respecter le direction et rendre les éléments de droite à gauche dans l'ordre, de sorte que two one est rendu.

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

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

span {
  display: inline-block;
}

<h2>

  <span>one</span>
  <span>two</span>
</h2>

Je ne sais pas s'il y a d'autres particularités, je ne l'ai découvert qu'empiriquement sur Chrome.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X