¿Las 3 a la vez?: Redimensionamiento responsive de imágenes + ancho de imagen real para imágenes pequeñas + ancho máximo para imágenes grandes

17 jul 2014, 13:30:54
Vistas: 33.4K
Votos: 0

Lo que me gustaría lograr es tener imágenes que se redimensionen de forma responsive - y para eso tengo que establecer 'width: 100%' - y al mismo tiempo establecer un ancho máximo para que la imagen no sea tan ancha como el contenido

Para hacer eso uso:

img {
    max-width: 100%;
    height: auto;
    width: 100%;        /* para hacer la imagen responsive */
}

#content img {
    max-width: 690px;
}

Entonces la imagen es responsive - ¡pero el problema es que en caso de que el ancho de la imagen sea menor a 690px el ancho de la imagen es demasiado grande!

Si solo uso esto:

img {
    max-width: 100%;
    height: auto;
}

El tamaño de la imagen (ancho y alto) es correcto, pero la imagen no es responsive.

¿Cómo logro las tres cosas?

  1. Redimensionamiento responsive del tamaño de la imagen
  2. Ancho de imagen del tamaño real en caso de que el ancho verdadero sea menor a 690px
  3. Ancho de imagen de 690px para todas las imágenes más grandes

Esta es una imagen cuyo ancho real es menor a 690px y donde se puede ver el problema.

Se me ocurrió una especie de solución, pero como es más un arreglo temporal que una solución adecuada al problema específico, la agrego aquí.

La solución alternativa es usar un CSS diferente para tamaños de ventana más pequeños. Para ventanas más grandes esto:

img {
    max-width: 100%;
    height: auto;
    width: auto;         /* La imagen se hace responsive más abajo para ventanas más pequeñas (@ 800px) */
}

#content img {
    max-width: 690px;
}

Y luego para ventanas más pequeñas:

@media only screen and (max-width: 890px) {
    img {
        width: 90%; /* para hacer la imagen responsive */
    }
}
1
Comentarios

.container { max-width: 900px; } img { max-width: 100%; min-width: 100%; width: auto; }

gmazzap gmazzap
17 jul 2014 15:15:18
Todas las respuestas a la pregunta 4
6

Del enlace que proporcionaste, las propiedades CSS aplicadas a esa imagen son

#content img{ max-width:690px;}
img { width:100%;height:auto;}

Por eso las imágenes más pequeñas también se estiran. Actualiza tu respuesta como:

img {
max-width: 100%;
height: auto;
width: auto;        /* para hacer la imagen responsiva */
 }
#content { max-width:690px;}

Revisa este ejemplo

17 jul 2014 13:34:55
Comentarios

¡Gracias por tu respuesta! ¿No es esto exactamente lo que mencioné como mi solución donde "el tamaño de la imagen es correcto, pero la imagen no es responsiva"? ¿Por qué funciona para ti pero no para mí entonces? ¿Hay algún otro aspecto de mi CSS que lo estropee...?

user2656065 user2656065
17 jul 2014 13:45:29

1) estás obteniendo las imágenes como responsivas, 2) cuando la imagen real es mayor de 690px se reduce a 690px. Pero tu problema es que tus imágenes más pequeñas también se estiran hasta 690px... ¿estoy en lo cierto? Corrígeme si me equivoco.

Zammuuz Zammuuz
17 jul 2014 13:48:59

¡Exactamente! Cuando una imagen es más pequeña que 690px, se estira hasta 690px (como la que enlacé). No sé cómo evitar que las imágenes más pequeñas se estiren hasta 690px.

user2656065 user2656065
17 jul 2014 13:55:22

ok..mira mi respuesta actualizada

Zammuuz Zammuuz
17 jul 2014 13:59:52

Desafortunadamente esto no funciona. Si configuras width: auto; entonces la imagen ya no cambia de tamaño.

user2656065 user2656065
17 jul 2014 14:19:27

@user2656065: necesitas eliminar esa img de #content

Zammuuz Zammuuz
17 jul 2014 14:24:02
Mostrar los 1 comentarios restantes
1

El CSS

Añade el siguiente código a tu archivo CSS. Esto hará que las imágenes sean escalables según el tamaño de pantalla.

Obviamente cambia la etiqueta de clase si quieres configurarlo solo para una clase de imagen específica

img{ max-width: 100%; }

img{ -ms-interpolation-mode: bicubic; }

Luego necesitas ejecutar un filtro para evitar que WordPress añada automáticamente las dimensiones a las imágenes que quieres que sean responsivas.

  function remove_wp_width_height($string){
  return preg_replace('/\/i', '',$string);
  }

Entonces cuando necesites llamar la miniatura, en tu plantilla en lugar de usar the_post_thumbnail(); usa tu nueva función así:

echo remove_wp_width_height(get_the_post_thumbnail(get_the_ID(),'large'));
18 jul 2014 15:03:21
Comentarios

Algunos de los comentarios debajo del artículo parecen sugerir que si las imágenes son demasiado pequeñas no se ajustarán, así que con suerte esto resolverá tu problema de mantener las imágenes más pequeñas sin estirar

Bysander Bysander
18 jul 2014 15:06:05
0

La forma más sencilla es mantener tus estilos como están ahora. Solo limita tu contenedor usando píxeles o porcentaje.

Por ejemplo: Si limitas tu contenedor al tamaño de tu imagen, esta se estirará hasta ese límite y no más allá.

Si el tamaño de tu imagen es de 200px, entonces revisa abajo para tu conjunto de estilos final.

#content {
    max-width: 200px;
    width: 100%;
}

img {
    max-width: 100%;
    height: auto;
    width: 100%;        /* para hacer la imagen responsive */
}

Para más detalles, consulta - Creando imágenes responsivas

¡Gracias!
Sumesh M.S

18 ago 2014 21:39:05
1

Bueno, voy a añadir mi parte diciendo que soy un usuario principiante de WordPress, y particularmente para mi portafolio. Tengo el mismo problema con las imágenes responsivas, donde en el prototipo HTML/CSS las imágenes, por ejemplo de una pieza del portafolio, eran como "1000x650" y se escalaban. Sin embargo, en WordPress eso no funcionó.

Así que busqué en Google y encontré que la solución del autor original de este problema en realidad funcionó para mí.

img {
    max-width: 100%;
    height: auto;
    width: 100%;        /* para hacer la imagen responsive */
}
#content img {
    max-width: 690px;
}
12 ene 2015 23:30:26
Comentarios

¿Has visto (y probado) el comentario de @G.M. en la pregunta original?

kaiser kaiser
13 ene 2015 00:04:31