2011-08-05 26 views
9

¿Cuál es la mejor forma (sin js) para alinear todas las celdas (es decir, tener tres celdas por fila en este caso).Alineación flotante CSS en la parte superior

HTML

<ul id="list"> 
    <li>Line1 this is a very long line that will break the layout</li> 
    <li>Line2</li> 
    <li>Line3</li> 
    <li>Line4 this is a very long line that will break the layout</li> 
    <li>Line5</li> 
    <li>Line6</li> 
    <li>Line7 this is a very long line that will break the layout</li> 
    <li>Line8</li> 
    <li>Line9</li> 
</ul> 

CSS

#list li{ 
    float: left; 
    width: 33%; 
    border: 1px #000 solid; 
} 

Resultado

enter image description here

Todo se puede ver en this Fiddle.

El número de elementos por línea puede cambiar (es decir, no sé dónde comenzará la nueva línea) y la altura de cada uno es variable (es decir, no puede forzar la altura).

Respuesta

20

Puede utilizar vertical-align para asegurar que el texto de los bloques están siempre en la parte superior independientemente de la altura.

#list li { 
    display:inline-block; 
    vertical-align:top; 
} 

https://css-tricks.com/almanac/properties/v/vertical-align/

+0

¡Gracias! Eso funciona, aquí está el script actualizado: http://jsfiddle.net/NF7UY/1/ – montrealmike

+0

Link ha muerto, lamentablemente – v010dya

0

no estoy seguro de que esto es lo que quieres decir, pero están alineadas:

#list li{ 
    float: left; 
    width: 33%; 
    border: 1px #000 solid; 
    min-height:40px; 
} 
+0

Desafortunadamente ese es mi problema. El texto puede cambiar y romperá el diseño. Vea http://jsfiddle.net/mctu7/3/ con su respuesta. La línea 7 debe estar en la línea 4. – montrealmike

0

Agregar a su css:

display: inline-block; 
height: 3em; /* adjust to fit largest content in any of the blocks */ 

y reducir la anchura ligeramente - la frontera 1px se agrega al ancho, por lo que terminas con 100% + 6px, lo que significa que solo aparecen 2 bloques por línea.

0

La solución flexible cuadro:

#list { 
    display: flex; 
    flex-wrap: wrap; /*allows items to flow into a new row*/ 
} 
#list li { 
    width: 33%; 
    border: 1px #000 solid; 
} 

resultados en:

enter image description here

demo: http://jsfiddle.net/xja40zod/2/

Cuestiones relacionadas