2011-08-08 10 views
19

Tengo el siguiente:¿Se puede usar display: table-cell y tiene un ancho/alto fijo?

CSS:

.photo { 
    overflow: hidden; 
    display: table-cell; 
    vertical-align: middle; 
    text-align: center; 
    width: 100px; 
    height: 100px; 
} 

HAML

.photo 
    %img{:src => my_url} 

Véase el jsFiddle here. La imagen que usé para demostrar es 150px por 80px.

Necesito mostrar la imagen dentro del div .photo y recortar cualquier exceso. La imagen debe estar centrada vertical y horizontalmente. Sin embargo, display:table-cell hace que el div .photo ignore mi configuración de ancho y alto. ¿Cómo puedo evitar esto?

+1

¿Se puede hacer que la imagen de un 'fondo-image' y ajustar el desplazamiento de ponerlo en el ¿lugar correcto? –

+0

El problema es que las imágenes que obtengo vienen en varios tamaños. – CodeWombat

+0

Entonces, ¿cuál es la altura/ancho máximo en que se expandirá el contenedor .photo? ¿O mantendrás la dimensión estrictamente 100x100? – Dan

Respuesta

21

table-cell no es la única solución para la alineación vertical.

.photo { 
    overflow: hidden; 
    background: #c0c0c0; 
    display:inline-block; /* or float:left; */ 
    text-align: center; 
    width: 100px; 
    height: 100px; 
    line-height:97px; 
} 
.photo img { 
    vertical-align:middle; 
    max-width:100%; 
    max-height:100%; 
} 
+1

Gracias, he aprendido algo nuevo, Sensei :) – CodeWombat

+0

De nada ^^ si desea obtener más información: http://www.w3.org/TR/CSS2/box.html – MatTheCat

+1

La desventaja de esto enfoque es que necesita una altura y ancho fijos en '.photo'. –

1

Si pones un interior div, parece que funciona. ¿No está seguro de por qué necesita display:table-cell en primer lugar?

http://jsfiddle.net/locrizak/5tawU/

Además, ¿ha considerado simplemente poniendo una anchura en la imagen? Esto causará que la altura de la imagen también cambie de tamaño en consecuencia.

+3

Necesito mostrar: table-cell para vertical-align: middle to work. – CodeWombat

6

Puede utilizar display: table-cell pero el padre tiene que tener display: table-row y el padre de la fila debe tener display: table;

Cuestiones relacionadas