2011-10-10 13 views
8

Ejemplo: jsfiddle.net/h5sE6/¿Cómo se puede alinear verticalmente el texto de varias líneas dentro de una lista?

css:

ul { 
    float: left; 
    margin-right:20px; 
} 
ul li { 
    height: 3em; 
    border: 1px solid #ff0000; 
    width:200px; 
} 

html:

<ul> 
    <li> Some text</li> 
    <li>Some text<br />some more text</li> 
    <li>some test text3</li> 
    <li>even more text<br />and more</li> 
</ul> 
<ul> 
    <li> Some text</li> 
    <li>Some text<br />some more text</li> 
    <li>some test text</li> 
    <li>even more text<br />and more</li> 
</ul> 

Esto es trivial con alinear verticalmente el texto y haciendo que la altura igual a la línea de altura si tiene una línea única pero más que eso, las cosas se ven realmente mal.

Respuesta

12

Puedes hacerlo con un ayudante :before elemento y añadiendo un anidado <span>:

ul li span { 
    display: inline-block; 
    vertical-align: middle;  
} 

ul li:before{ 
    content: ''; 
    display: inline-block; 
    vertical-align: middle; 
    height: 100%;  
} 

Aquí es a demo de él en acción.

Esto funciona porque dos elementos de bloque en línea se alinearán verticalmente entre sí. La regla :before crea un elemento de bloque en línea que tiene la misma altura que su elemento primario, con el que la altura variable <span> se puede alinear verticalmente.

Para obtener una explicación completa de cómo funciona, see this answer acerca de la alineación vertical de imágenes.

+0

Totalmente interesante y funcionó muy bien. –

+0

@Pat Este es un buen truco. Gracias. – sinanakyazici

5

Usted puede hacer esto mediante la adición de un span a su margen de beneficio y luego usando display:table etc en el CSS:

<ul> 
    <li><span>Some text</span></li> 
    <li><span>Some text<br />some more text</span></li> 
    <li><span>some test text</span></li> 
    <li><span>even more text<br />and more</span></li> 
</ul> 

CSS

ul { 
    display: table; 
    border-collapse: collapse; 
    width: 100%; 
} 

ul li { 
    height: 3em; 
    border: 1px solid #ff0000; 
    display: table-row; 
} 

ul li span{ 
    display:table-cell; 
    vertical-align: middle; 
} 

Ejemplo:http://jsfiddle.net/jasongennaro/nePt6/

+0

Esta solución también funciona muy bien y es muy intuitiva. El único contratiempo que tuve con esto fue que causó un par de extraños matices visuales al trabajar en conjunto con un estilo CSS3 adicional. –

Cuestiones relacionadas