Y a-t-il une raison d'utiliser un <div style="display:inline-block">
au lieu d'un <span>
pour mettre en page une page Web?
Puis-je placer du contenu imbriqué dans la plage? Qu'est-ce qui est valide et qu'est-ce qui ne l'est pas?
Est-ce que vous pouvez utiliser ceci pour créer un tableau 3x2 comme une mise en page?
<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>
Réponses:
Selon la spécification HTML ,
<span>
est un élément en ligne et<div>
est un élément de bloc. Maintenant, cela peut être changé en utilisant ladisplay
propriété CSS mais il y a un problème: en termes de validation HTML, vous ne pouvez pas mettre d'éléments de bloc à l'intérieur d'éléments en ligne, donc:n'est pas strictement valable même si vous changez le
<div>
eninline
ouinline-block
.Donc, si votre élément est
inline
ouinline-block
utilisez un fichier<span>
. S'il s'agit d'unblock
élément de niveau, utilisez un<div>
.la source
inline-block
a une relation plus procheinline
queblock
.<span>
et<div>
sont en effet différents, tout comme<span>
un élément en ligne (valide dans a<p>
, par exemple), alors que<div>
est un élément de bloc (non valide dans a<p>
).<p>
est un élément de bloc qui "ne peut pas contenir d'éléments de niveau bloc" ( lien ), donc si l'exemple est invalide, ce n'est pas parce qu'il<p>
est en ligne.Si vous souhaitez avoir un document xhtml valide, vous ne pouvez pas mettre de div à l'intérieur d'un paragraphe.
De plus, un div avec la propriété display: inline-block fonctionne différemment d'un span. Une travée est par défaut un élément en ligne, vous ne pouvez pas définir la largeur, la hauteur et les autres propriétés associées aux blocs. D'un autre côté, un élément avec la propriété inline-block "coulera" toujours avec n'importe quel texte environnant mais vous pouvez définir des propriétés telles que la largeur, la hauteur, etc. Un span avec la propriété display: block ne se déroulera pas de la même manière comme un élément de bloc en ligne mais créera un retour chariot et aura une marge par défaut.
Notez que le blocage en ligne n'est pas pris en charge dans tous les navigateurs. Par exemple dans Firefox 2 et moins, vous devez utiliser:
qui s'affiche légèrement différent d'un élément de bloc en ligne dans FF3.
Il y a un excellent article ici sur la création d'éléments de bloc en ligne inter-navigateurs.
la source
Inline-block est un point à mi-chemin entre la définition de l'affichage d'un élément sur en ligne ou sur bloquer. Il garde l'élément dans le flux en ligne du document comme display: inline, mais vous pouvez manipuler les attributs de la boîte de l'élément (largeur, hauteur et marges verticales) comme vous le pouvez avec display: block.
Nous ne devons pas utiliser d'éléments de bloc dans des éléments en ligne. Ceci est invalide et il n'y a aucune raison de faire de telles pratiques.
la source
Je sais que ce Q est ancien, mais pourquoi ne pas utiliser tous les DIV au lieu des SPAN? Ensuite, tout joue tous heureux ensemble.
Exemple:
la source
Je pense que cela vous aidera à comprendre les différences fondamentales entre Inline-Elements (par exemple span) et Block-Elements (par exemple div), afin de comprendre pourquoi "display: inline-block" est si utile.
Problème : les éléments en ligne (par exemple span, a, bouton, entrée, etc.) prennent la "marge" uniquement horizontalement (margin-left et margin-right) sur, pas verticalement. L'espacement vertical ne fonctionne que sur les éléments de bloc (ou si "display: block" est défini)
Solution : Seulement via "display: inline-block" prendra également la distance verticale (haut et bas). Raison: Elément en ligne Span, se comporte maintenant comme un élément de bloc à l'extérieur, mais comme un élément en ligne à l'intérieur
Voici des exemples de code:
la source
Comme d'autres l'ont répondu…
div
est un «élément de bloc» (maintenant redéfini comme Flow Content ) etspan
est un «élément en ligne» ( Phrasing Content ). Oui, vous pouvez modifier la présentation par défaut de ces éléments, mais il y a une différence entre «flux» et «bloc», et «phrasé» par rapport à «en ligne».Un élément classé comme contenu de flux ne peut être utilisé que là où un contenu de flux est attendu, et un élément classé comme contenu de phrasé peut être utilisé là où un contenu de phrasé est attendu. Puisque tout le contenu de phrasé est un contenu de flux, un élément de phrasé peut également être utilisé partout où un contenu de flux est attendu. Les spécifications fournissent des informations plus détaillées .
Tous les éléments de phrasé, tels que
strong
etem
, ne peuvent contenir que d'autres éléments de phrasé: vous ne pouvez pas mettre un à l'table
intérieur d'uncite
par exemple. La plupart des flux de contenus tels quediv
etli
peut contenir tous les types de contenu de flux (ainsi que le contenu phrasé), mais il y a quelques exceptions:p
,pre
etth
sont des exemples de contenu de flux non phrasé ( « éléments de bloc ») qui peut ne contenir le phrasé contenu («éléments en ligne»). Et bien sûr, il y a les restrictions d'élément normales telles quedl
ettable
ne pouvant contenir que certains éléments.Bien que les deux
div
etp
soient du contenu de flux sans phrasé, lediv
peut contenir d'autres enfants de contenu de flux (y compris plus dediv
s et dep
s). D'autre part,p
ne peut contenir que des enfants de contenu de phrasé. Cela signifie que vous ne pouvez pas mettre un à l'div
intérieur de ap
, même si les deux sont des éléments de flux sans phrasé.Maintenant, voici le kicker. Ces spécifications sémantiques ne sont pas liées à la façon dont l'élément est affiché. Ainsi, si vous avez un
div
inside aspan
, vous obtiendrez une erreur de validation même si vous avezspan {display: block;}
etdiv {display: inline;}
dans votre CSS.la source
inline-block
est un style CSS, pas un type d'élément ou de modèle de contenu.)