CSS reduce la escala de la imagen para que quepa en el div que contiene, sin especificar el tamaño original


Quiero tener un sitio web donde pueda subir imágenes de diferentes tamaños para que se muestren en un deslizador de jquery. Parece que no puedo ajustar (reducir la escala) la imagen en un div que contiene. Así es como tengo la intención de hacerlo

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org    /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title> 
<link rel="stylesheet" type="text/css" href="Imtest.css"/>
</head>

<body>

<div id="wrapper"> 

<div id="im"><img src="Images/Scarpa2_1.jpg" /></div>

</div>  
</body>
</html>

Y el CSS

#wrapper {
    width: 400px;
    height: 400px;
    border: 2px black solid;
    margin: auto;
}

#im {
    max-width: 100%;
}

He intentado establecer el ancho máximo de mi imagen al 100% en CSS. Pero eso no funciona.

Author: Volker E., 2013-09-04

10 answers

Puede usar una imagen de fondo para lograr esto;

De MDN - Tamaño de fondo: Contiene :

Esta palabra clave especifica que la imagen de fondo se debe escalar para que sea lo más grande posible, asegurando que ambas dimensiones sean menores o iguales a las dimensiones correspondientes del área de posicionamiento del fondo.

Demo

CSS:

#im {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-image: url("path/to/img");
    background-repeat: no-repeat;
    background-size: contain;
}

HTML:

<div id="wrapper">
    <div id="im">
    </div>
</div>
 50
Author: dc5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-04 06:38:03

Esta es una vieja pregunta que sé, pero está entre los cinco primeros para varias búsquedas relacionadas con Google. Aquí está la única solución CSS sin cambiar las imágenes a imágenes de fondo:

width:auto;
height:auto;
max-width:MaxSize;
max-height:MaxSize;

Auto aumentará (o disminuirá) el ancho y la altura para ocupar el espacio que especifique con MaxSize. Superará cualquier valor predeterminado para las imágenes que usted o el navegador del espectador puedan tener para las imágenes. He encontrado que es especialmente importante en Firefox de Android. Los píxeles o porcentajes funcionan para el tamaño máximo. Con tanto la altura como el ancho establecidos en auto la relación de aspecto de la imagen original se conservarán.

Si desea llenar el espacio por completo y no le importa que la imagen sea más grande que su tamaño original, cambie los dos anchos máximos a ancho mínimo: 100%, esto hará que ocupen completamente su espacio y mantengan la ración de aspecto. Puedes ver un ejemplo de esto con la imagen de fondo de un perfil de Twitter.

 13
Author: Woody Payne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-07 23:09:56

Si desea tanto el ancho como el alto, puede probar

 background-size: cover !important;

Pero esto no distorsionará la imagen, sino que llenará el div.

 7
Author: Chathuranga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-10 09:24:36

Es muy simple. Simplemente establezca el ancho de img en 100%

 3
Author: Nikhil Rathod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-04 06:19:51

Creo que esta es la mejor manera de hacerlo, lo he probado y funciona muy bien.

#img {
  object-fit: cover;
}

Aquí es donde lo encontré . ¡Buena suerte!

 3
Author: Josh Werner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-02 10:35:34

Espero que esto responda al antiguo problema (Sin usar la propiedad CSS background)

Html

<div class="card-cont">
 <img src="demo.png" />
</div>

Css

.card-cont{
  width:100%;
  height:150px;
}

.card-cont img{
  max-width: 100%;
  min-width: 100%;
  min-height: 150px;
}
 2
Author: Moonis Abidi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 13:02:40

En una página web donde quería una imagen en escala con el cambio de tamaño del navegador y permanecer en la parte superior, junto a un div fijo, todo lo que tenía que hacer era usar una sola línea CSS: overflow:hidden; y funcionó. La imagen escala perfectamente.

Lo que es especialmente bueno es que esto es css puro y funcionará incluso si Javascript está desactivado.

CSS:

#ImageContainerDiv {
  overflow: hidden;
}

HTML:

<div id="ImageContainerDiv">
  <a href="URL goes here" target="_blank">
    <img src="MapName.png" alt="Click to load map" />
  </a>
</div>
 0
Author: Igor Ivancha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-06 09:54:17

Estoy usando esto, tanto imágenes más pequeñas como grandes:

.product p.image {
text-align: center;
width: 220px;
height: 160px;
overflow: hidden;
}
.product p.image img{
max-width: 100%;
max-height: 100%;
}
 0
Author: Flavio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-03 13:55:34

Varias de estas cosas no funcionaron para mí... sin embargo, esto sí. Podría ayudar a alguien más en el futuro. Aquí está el CSS:

    .img-area {
     display: block;
     padding: 0px 0 0 0px;
     text-indent: 0;
     width: 100%;
     background-size: 100% 95%;
     background-repeat: no-repeat;
     background-image: url("https://yourimage.png");

    }
 0
Author: Blake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-27 18:37:48

Utilizo:

Object-fit: cover;
-o-object-fit: cover;

Para colocar imágenes en un contenedor con una altura y un ancho fijos, esto también funciona muy bien para mis deslizadores. Sin embargo, cortará partes de la imagen dependiendo de ella.

 -1
Author: Stefan Bogaard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-12 07:52:33