¿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 ladisplaypropiedad 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>ainlineoinline-block.Entonces, si tu elemento es
inlineoinline-blockusa a<span>. Si es unblockelemento de nivel, use a<div>.fuente
inline-blocktiene una relación más estrecha con lainlinequeblock.<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 ...
dives un "elemento de bloque" (ahora redefinido como Contenido de flujo ) yspanes 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
strongyem, solo pueden contener otros elementos de redacción: por ejemplo, no puede poner untabledentrocite. La mayoría de flujo contenido comodivylipuede contener todos los tipos de contenido de flujo (así como fraseo contenido), pero hay algunas excepciones:p,pre, ythson 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 comodlytablesolamente está permitido para contener ciertos elementos.Mientras tanto
divypson no fraseo contenido de flujo, eldivpuede contener otros niños de contenido de flujo (incluyendo másdivs yps). Por otro lado,psolo puede contener contenido de frase infantil. Eso significa que no puede poner undivdentro 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
divaspan, obtendrá un error de validación incluso si lo tienespan {display: block;}ydiv {display: inline;}en su CSS.fuente
inline-blockes un estilo CSS, no un tipo de elemento o modelo de contenido)