2010-11-04 19 views
17

Tengo una lista desordenada con un conjunto de imágenes de fondo. Todos los elementos de la lista tienen la misma altura, la imagen de fondo está ubicada en el centro izquierdo.Texto central y multilínea li texto verticalmente

El texto de cada elemento debe ser centrado verticalmente al li. Esto funciona bien con texto de una sola línea (al establecer la altura de la línea de acuerdo con la altura de la li), pero no con dos líneas de texto.

Podría agregar "line-height: normal" al artículo de dos líneas, pero quiero una solución que funcione para todos los artículos.

¿Cómo puedo hacer esto?

Ejemplo:

li { 
    list-style-type:none; 
    padding-left:40px; 
    height:36px; 
    line-height:36px; 
    background:url('tick.png') no-repeat 0 50%; 
} 
+1

¿Tiene algún código que podamos ver? Es mucho mejor para nosotros si puede publicar lo que ha intentado hasta ahora :) – Kyle

+0

en qué navegador necesita hacerlo para que funcione? También IE6/7? –

+0

Un ejemplo de CSS: li { list-style-type: none; relleno a la izquierda: 40px; altura: 36px; línea-altura: 36px; fondo: url ('tick.png') no-repeat 0 50%; } Si tengo una línea de texto en el li, funciona, pero con dos líneas no. –

Respuesta

43

esta es una solución más crossbrowser

li { 
    width   : 200px; 
    line-height  : 100px; 
    height   : 100px; 
    border   : 1px blue solid;   
} 
li span { 
    display    : -moz-inline-box; /* FF2 or lower */ 
    display    : inline-block;  /* FF3, Opera, Safari */ 
    line-height   : normal; 
    vertical-align  : middle;  
} 

li span  { *display : inline;} /* haslayout for IE6/7 */ 

html

<ul> 
    <li><span>My text</span></li> 
    <li><span>My longer text</span></li> 
    <li><span>My text, but this time is really wide</span></li> 
    <li><span>My text, some thoughts about how much it will expand in this item.</span></li> 
</ul> 

Solía ​​estrellas piratear por razones de brevedad, se debe evitar. Solo use la solución html5boilerplate, usa comentarios condicionales en la etiqueta del cuerpo

+1

Gracias por esto , absolutamente la mejor solución que he encontrado, ¡qué héroe! – DanC

+0

Mejor funciona sin altura fija, 'altura: 100px;' en este ejemplo. Más líneas de texto para cambiar el tamaño del área. Use 'relleno 'o' margen 'también para definir los espacios requeridos en la parte superior e inferior. Mi pregunta es, ¿existe aquí la solución sin intervalo de envolvente? –

+0

Lamentablemente, hay un error con IE (al menos con IE9); cuando configura list-style: none, salta de nuevo a la parte superior. Entonces, o mi texto se encuentra estúpidamente en la parte superior de la pantalla, o tengo un punto negativo que no me puedo deshacer. Gracias de nuevo, IE. – Inigo

3
li { 
    height:200px; 
    line-height:200px; 
    border:1px solid red; 
} 
li span { 
    vertical-align:middle; 
    display:inline-block; 
    line-height:1.2; 
} 

<li> 
    <span>two<br />lines</span> 
</li> 

Se debe trabajar.

EDIT: actualizado para ver los cambios

+2

Ejemplo: http://jsfiddle.net/Kyle_Sevenoaks/STM5q/ – Kyle

+0

Se agregó algo de guinda al ejemplo de jles jsfiddle: http://jsfiddle.net/STM5q/155/ –

Cuestiones relacionadas