¿Hay alguna razón para usar un en <div style="display:inline-block">
lugar de un <span>
para diseñar una página web?
¿Puedo poner contenido anidado dentro del intervalo? ¿Qué es válido y qué no?
¿Está bien usar esto para hacer una tabla de 3x2 como diseño?
<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>
Respuestas:
Según la especificación HTML ,
<span>
es un elemento en línea y<div>
es un elemento de bloque. Ahora eso se puede cambiar usando ladisplay
propiedad CSS, pero hay un problema: en términos de validación HTML, no se pueden poner elementos de bloque dentro de elementos en línea, por lo tanto:no es estrictamente válido incluso si cambia
<div>
ainline
oinline-block
.Entonces, si tu elemento es
inline
oinline-block
usa a<span>
. Si es unblock
elemento de nivel, use a<div>
.fuente
inline-block
tiene una relación más estrecha con lainline
queblock
.<span>
y de<div>
hecho son diferentes, ya que<span>
es un elemento en línea (válido dentro de a<p>
, por ejemplo), mientras que<div>
es un elemento de bloque (no válido dentro de a<p>
).<p>
es un elemento de bloque que "no puede contener elementos de nivel de bloque" ( enlace ), por lo que si bien el ejemplo no es válido, no es porque<p>
esté en línea.Si desea tener un documento xhtml válido, no puede poner un div dentro de un párrafo.
Además, un div con la visualización de la propiedad: inline-block funciona de manera diferente que un span. Un intervalo es, por defecto, un elemento en línea, no puede establecer el ancho, la altura y otras propiedades asociadas con los bloques. Por otro lado, un elemento con la propiedad inline-block seguirá "fluyendo" con cualquier texto circundante, pero puede establecer propiedades como ancho, alto, etc. Un intervalo con la visualización de propiedades: el bloque no fluirá de la misma manera como un elemento de bloque en línea, pero creará un retorno de carro y tendrá un margen predeterminado.
Tenga en cuenta que el bloqueo en línea no es compatible con todos los navegadores. Por ejemplo, en Firefox 2 y menos debes usar:
que se muestra ligeramente diferente a un elemento de bloque en línea en FF3.
Hay un gran artículo aquí en la creación de elementos inline-block cruz navegador.
fuente
Inline-block es un punto intermedio entre configurar la visualización de un elemento en línea o bloquear. Mantiene el elemento en el flujo en línea del documento como display: inline lo hace, pero puede manipular los atributos del cuadro del elemento (ancho, alto y márgenes verticales) como puede hacerlo con display: block.
No debemos usar elementos de bloque dentro de elementos en línea. Esto no es válido y no hay razón para hacer tales prácticas.
fuente
Sé que esta Q es antigua, pero ¿por qué no usar todos los DIV en lugar de los SPAN? Entonces todo juega todo feliz juntos.
Ejemplo:
fuente
Creo que le ayudará a comprender las diferencias básicas entre Inline-Elements (por ejemplo, span) y Block-Elements (por ejemplo, div), para comprender por qué "display: inline-block" es tan útil.
Problema : los elementos en línea (por ejemplo, span, a, botón, entrada, etc.) toman el "margen" solo horizontalmente (margen izquierdo y margen derecho), no verticalmente. El espaciado vertical solo funciona en elementos de bloque (o si se establece "display: block")
Solución : Solo a través de "display: inline-block" también tomará la distancia vertical (arriba y abajo). Motivo: el elemento en línea Span, ahora se comporta como un elemento de bloque hacia afuera, pero como un elemento en línea dentro
Aquí ejemplos de código:
fuente
Como otros han respondido ...
div
es un "elemento de bloque" (ahora redefinido como Contenido de flujo ) yspan
es un "elemento en línea" ( Contenido de fraseo ). Sí, puede cambiar la presentación predeterminada de estos elementos, pero hay una diferencia entre "flujo" versus "bloque" y "fraseo" versus "en línea".Un elemento clasificado como contenido de flujo solo puede usarse donde se espera contenido de flujo, y un elemento clasificado como contenido de fraseo puede usarse donde se espera contenido de fraseo. Dado que todo el contenido de redacción es contenido de flujo, un elemento de redacción también se puede utilizar en cualquier lugar donde se espere contenido de flujo. Las especificaciones proporcionan información más detallada .
Todos los elementos de redacción, como
strong
yem
, solo pueden contener otros elementos de redacción: por ejemplo, no puede poner untable
dentrocite
. La mayoría de flujo contenido comodiv
yli
puede contener todos los tipos de contenido de flujo (así como fraseo contenido), pero hay algunas excepciones:p
,pre
, yth
son ejemplos de contenido de flujo no fraseo ( “elementos de bloque”) que pueden solamente contener frases contenido ("elementos en línea"). Y, por supuesto son las restricciones de los elementos normales, tales comodl
ytable
solamente está permitido para contener ciertos elementos.Mientras tanto
div
yp
son no fraseo contenido de flujo, eldiv
puede contener otros niños de contenido de flujo (incluyendo másdiv
s yp
s). Por otro lado,p
solo puede contener contenido de frase infantil. Eso significa que no puede poner undiv
dentro dep
, a pesar de que ambos son elementos de flujo sin fraseo.Ahora aquí está el pateador. Estas especificaciones semánticas no están relacionadas con la forma en que se muestra el elemento. Por lo tanto, si tiene un
div
aspan
, obtendrá un error de validación incluso si lo tienespan {display: block;}
ydiv {display: inline;}
en su CSS.fuente
inline-block
es un estilo CSS, no un tipo de elemento o modelo de contenido)