2010-10-29 11 views
19

Tengo un cuadro de 70 por 50 px y tengo varias imágenes (archivos SVG, por lo que no hay tamaño) Quiero mantener su relación de aspecto, pero algunas imágenes son retratos y algunas son de tamaño paisajístico. Entonces puedo hacer:Tamaño máximo para la imagen de fondo CSS

background-size: 70px auto; 

y eso funcionará para todos los iconos de paisaje. Pero estirará las imágenes de retrato y las hará más altas, por lo que seguirán teniendo la relación de aspecto correcta, pero se cortarán la parte superior e inferior.

¿hay algún tipo de fondo de tamaño máximo?

(alternativamente, la única razón por la imagen de fondo que estoy usando es porque se puede centrar alinear la imagen, horizontal y verticalmente , por lo que la alternativa es encontrar la forma de alinear verticalmente un elemento img dentro de un elemento li.)

Respuesta

6

Este es un problema que CSS no puede resolver por sí mismo. Hay bibliotecas de JavaScript que harán este trabajo. Si usa jQuery, puede encontrar un complemento o usar su propia función.

Tome la width y height de la imagen y calcule la relación (x/y). Si la relación es mayor a 70/50 (1.4), configure el ancho a 70px y la altura a (70 * x/y). Si la proporción es inferior a 70/50 (1,4), configure la altura a 50 px y el ancho a (50 * x/y).

Véase también CSS vertical-align

Si utiliza navegadores que no soportan vertical-align, puede posicionar la imagen absolutamente a 50%, y establecer el margen superior a (ancho * -0.5) utilizando JavaScript. Eso alineará el centro de la imagen con el centro del elemento principal, que es lo mismo que la alineación central vertical.

+0

Ugh, ¿por qué no puede CSS simplemente alinear el centro vertical como lo hace el centrado horizontal. CSS podría ser mucho más fácil, sensible y obvio !!! –

+0

@Jonathan CSS puede hacer una alineación vertical muy bien, solo Microsoft lo estropeó como de costumbre. No culpe a CSS, culpe a M $ :) – kijin

+0

Microsoft? ¿Qué tienen que ver con eso? Y si salgo de alineación vertical: centro en el padre de imgs, no se alinea verticalmente –

24

No es tan difícil hacerlo con CSS

  • primero, por favor echar un vistazo a the Mozilla Specs de unidades mixtas de background-size.
  • En segundo lugar, solo tiene que configurar background-size: contain; (IE9 +, Safari 4.1+, FF 3.0+, Opera 10+) y min/max-width/height para el elemento contenedor.
+5

'background-size: contain' hizo el truco para mi caso de uso. – joshuarh

+0

"background-size: contains;" no resuelve el problema si se necesita una cierta altura para la imagen. "min-height" para el elemento contenedor no hará que la imagen cubra la altura. –

+1

Tengo 'background-size: 100%' para mi caso de uso, y luego le digo al elemento donde he aplicado 'background-image' que tenga' max-size' en mi 'breakpoint' más grande. Funciona de maravilla. –

12

Puede resolver absolutamente este problema sin JavaScript utilizando una combinación de CSS3 background-size y consultas de medios. ej .:

@media only screen and (max-width: 1000px) { 
    #element { 
     background-size: contain; 
    } 
} 

Nota que ni se apoyan en IE8 o por debajo, por lo que debe incluir mecanismos de emergencia para IE edad si todavía lo apoya.

3

La respuesta a esta pregunta está un poco desactualizada. Como menciona stringman5, ninguna de las opciones de CSS es compatible con IE8 o inferior. Tampoco es la mejor opción para que jQuery maneje sus imágenes de fondo si no es necesario. Para utilizar una opción que incluye los retrocesos de navegador más antiguo, sin el uso de JavaScript, puede hacer algo en este sentido:

#myElement { 
    background: #FFFFFF url('mybackground.jpg') no-repeat right top; 
} 

@media only screen and (max-width: 1024px){ 
    #myElement { 
     background-size: 50%; 
    } 
} 

en cuenta que estoy usando max-width en mi consulta de medios, esto significa que se background-size: 50%; se aplicará HASTA 1024px. Más allá de ese punto, es su tamaño predeterminado.En navegadores más antiguos que no admiten consultas de medios o tamaño de fondo, ignorarán las opciones y representarán el tamaño máximo de la imagen de fondo (tamaño predeterminado).

Cuestiones relacionadas