Normalmente, cuando queremos tener múltiples DIVs
en una fila, usaríamos float: left
, pero ahora descubrí el truco dedisplay:inline-block
Enlace de ejemplo aquí . Me parece que display:inline-block
es una mejor manera de hacerlo align
DIVs
en una fila, pero ¿hay algún inconveniente? ¿Por qué este enfoque es menos popular que el float
truco?
inline
, noinline-block
. Pero el primero en relación es bueno: stackoverflow.com/a/11823622/918414Respuestas:
En 3 palabras:
inline-block
es mejor.Bloque en línea
El único inconveniente del
display: inline-block
enfoque es que en IE7 y debajo de un elemento solo se puede mostrarinline-block
si ya estabainline
por defecto. Lo que esto significa es que, en lugar de usar un<div>
elemento, debe usar un<span>
elemento. No es realmente un gran inconveniente en absoluto porque semánticamente<div>
es para dividir la página, mientras que a<span>
es solo para cubrir un lapso de una página, por lo que no hay una gran diferencia semántica. Una gran ventajadisplay:inline-block
es que cuando otros desarrolladores mantienen su código en un momento posterior, es mucho más obvio quédisplay:inline-block
ytext-align:right
está tratando de lograr que unafloat:left
o unafloat:right
declaración. Mi favorita beneficio delinline-block
enfoque es que es fácil de usarvertical-align: middle
,line-height
ytext-align: center
para centrar perfectamente los elementos, de una manera intuitiva. Encontré una gran publicación de blog sobre cómo implementar el bloqueo en línea entre navegadores, en el blog de Mozilla . Aquí está la compatibilidad del navegador .Flotador
La razón por la que el uso del
float
método no es adecuado para el diseño de su página es porque lafloat
propiedad CSS originalmente estaba destinada a tener texto ajustado alrededor de una imagen (estilo de revista) y, por diseño, no es el más adecuado para propósitos generales de diseño de página. Al cambiar los elementos flotantes más adelante, a veces tendrá problemas de posicionamiento porque no están en el flujo de la página . Otra desventaja es que generalmente requiere una solución clara; de lo contrario, puede romper aspectos de la página. El clearfix requiere agregar un elemento después de los elementos flotantes para evitar que su padre se derrumbe a su alrededor, lo que cruza la línea semántica entre la separación del estilo del contenido y, por lo tanto, es un antipatrón en el desarrollo web .Cualquier problema de espacio en blanco mencionado en el enlace anterior podría solucionarse fácilmente con la
white-space
propiedad CSS.Editar:
SitePoint es una fuente muy creíble para consejos de diseño web y parecen tener la misma opinión que yo:
http://www.sitepoint.com/give-floats-the-flick-in-css-layouts/
Actualización de 2015: Flexbox es una buena alternativa para los navegadores modernos :
Más información
21 de diciembre de 2016 Actualización
Bootstrap 4 está eliminando el soporte para IE9 y, por lo tanto, está eliminando los flotadores de las filas y completando Flexbox.
Solicitud de extracción # 21389
fuente
white-space
propiedad, ¿podrías explicar esto?letter-spacing
en otro lugar de mi CSS.Si bien estoy de acuerdo en que en general
inline-block
es mejor, hay una cosa adicional a tener en cuenta si está utilizando anchos porcentuales para crear una cuadrícula receptiva (o si desea anchos perfectos en píxeles):Si está utilizando
inline-block
cuadrículas con un ancho total del 100% o cercano al 100%, debe asegurarse de que su marcado HTML no contenga espacios en blanco entre las columnas .Con los flotantes, esto no es algo de lo que deba preocuparse: las columnas flotan sobre cualquier espacio en blanco u otro contenido entre columnas. Las respuestas de esta pregunta tienen algunos buenos consejos sobre cómo eliminar espacios en blanco HTML sin hacer que su código sea feo .
Si por alguna razón no puede controlar el marcado HTML (por ejemplo, un CMS restrictivo), puede probar los trucos descritos aquí, o puede necesitar comprometer y usar flotantes en lugar de bloque en línea. También hay trucos feos de CSS que solo deben usarse en circunstancias extremas, como
font-size:0;
en el contenedor de la columna y luego volver a aplicar el tamaño de fuente dentro de cada columna .Por ejemplo:
float: left
. "Simplemente funciona" (pero para el contenedor que necesita ser borrado).inline-block
. El espacio en blanco entre los bloques crea un espacio de ancho fijo que empuja el ancho total más allá del 100%, rompiendo el diseño y haciendo que la última columna caiga una línea.inline-block
y sin espacios en blanco entre las columnas en el HTML . "Simplemente funciona" nuevamente, pero el HTML es más feo y su CMS podría forzar algún tipo de prettificación o sangría a su salida HTML, lo que hace que esto sea difícil de lograr en la realidad.fuente
div+(whitespace) {display:none}
o algo así?<div class="inlinething">hi</div> <div class="inlinething">there</div> more content here...
?)Si desea alinear
div
con píxeles precisos, utilice flotante.inline-block
parece que siempre requiere que corte unos pocos píxeles (al menos en IE)fuente
* {padding:0px; margin:0px; }
ya que esto ayuda a equilibrar mi codificaciónPuede encontrar la respuesta en profundidad aquí .
Pero, en general
float
, debe ser consciente y cuidar los elementos circundantes y lainline-block
forma simple de alinear los elementos.Gracias
fuente
Sin embargo, hay una característica sobre el bloqueo en línea que puede no ser directa. Es decir, el valor predeterminado para la alineación vertical en CSS es la línea de base. Esto puede causar un comportamiento de alineación inesperado. Mira este artículo.
http://www.brunildo.org/test/inline-block.html
En cambio, cuando haces un flotante: izquierda, los divs son independientes entre sí y puedes alinearlos usando el margen fácilmente.
fuente