Tengo un div 48x48 y dentro de él hay un elemento img, quiero encajarlo en el div sin perder ninguna parte, mientras tanto se mantiene la relación, ¿se puede lograr con html y css?
136
Necesitará JavaScript para evitar recortes si no conoce la dimensión de la imagen en el momento en que escribe el CSS.
<div id="container">
<img src="something.jpg" alt="" />
</div>
<script type="text/javascript">
(function() {
var img = document.getElementById('container').firstChild;
img.onload = function() {
if(img.height > img.width) {
img.height = '100%';
img.width = 'auto';
}
};
}());
</script>
#container {
width: 48px;
height: 48px;
}
#container img {
width: 100%;
}
Si utiliza una biblioteca de JavaScript, puede aprovecharla.
Úselo
max-height:100%; max-width:100%;
para la imagen dentro del div.fuente
overflow:scroll
div con una imagen grande en él. Curioso. Aún más extraño: la solución de Max en realidad lo arregla. Estoy bastante harto de CSS, de verdad. Solía ser poderoso y genial. Ahora las implementaciones solo producen inconsistencia con errores después de la inconsistencia con errores.Desafortunadamente max-width + max-height no cubren completamente mi tarea ... Así que he encontrado otra solución:
Para guardar la relación de imagen mientras se escala, también puede usar la
object-fit
propiedad CSS3.Artículo útil: Controle las relaciones de aspecto de la imagen con CSS3
Malas noticias: IE no es compatible ( ¿Puedo usarlo? )
fuente
object-fit: cover;
trabajó para mi. Aquí: stackoverflow.com/questions/9071830/…Usando solo CSS:
fuente
HTML
CSS
Esto hará que la imagen se expanda para llenar su padre, cuyo tamaño se establece en el
div
CSS.fuente
height: 100%
, eso sesgará la relación de la imagen: el OP quiere mantener la relación.Estaba teniendo muchos problemas para que esto funcionara, cada solución que encontré no parecía funcionar.
Me di cuenta de que tenía que configurar la pantalla div para flexionar, así que básicamente este es mi CSS:
fuente
Prueba CSS:
fuente
Para mí, el siguiente CSS funcionó (probado en Chrome, Firefox y Safari).
Hay varias cosas trabajando juntas:
max-height: 100%;
,max-width: 100%;
yheight: auto;
,width: auto;
haga la escala img a la dimensión que primero llegue al 100% manteniendo la relación de aspectoposition: relative;
en el contenedor yposition: absolute;
en el niño junto contop: 50%;
yleft: 50%;
centrar la esquina superior izquierda de la img en el contenedortransform: translate(-50%, -50%);
mueve el img hacia la izquierda y hacia arriba a la mitad de su tamaño, centrando así el img en el contenedorCSS:
fuente
Establecer la foto como imagen de fondo nos dará más control sobre el tamaño y la ubicación, dejando que la etiqueta img tenga un propósito diferente ...
A continuación, si queremos que el div tenga la misma relación de aspecto que la foto, placeholder.png es una pequeña imagen transparente con la misma relación de aspecto que photo.jpg. Si la foto es un cuadrado, es un marcador de posición de 1px x 1px, si la foto es una miniatura de video, es un marcador de posición de 16x9, etc.
Específico para la pregunta, use un marcador de posición 1x1 para mantener la relación cuadrada del div, con una imagen de fondo
background-size
para mantener la relación de aspecto de la foto.Utilicé
background-position: center center;
para que la foto se centre en el div. (Alinear la foto en el centro vertical o inferior se pondría feo con la foto en la etiqueta img)Para evitar una solicitud http adicional, convierta la imagen del marcador de posición a datos: URL .
fuente
puede usar la clase "img-fluid" para la versión más reciente, es decir, Bootstrap v4 .
y puede usar la clase "img-responsive" para versiones anteriores como Bootstrap v3 .
Uso : -
etiqueta img con: -
clase = "img-fluid"
src = "..."
fuente
Aquí hay un enfoque basado en JavaScript. Escala una imagen gradualmente hacia abajo hasta que encaje correctamente. Usted elige cuánto reducirlo cada vez que falla. Este ejemplo lo reduce un 10% cada vez que falla:
Siéntase libre de copiar y pegar directamente.
fuente
Lo que funcionó para mí fue:
Inline-flex fue necesario para evitar que las imágenes salgan del div.
fuente