jake
Tengo una aplicación Next.js y necesito una imagen que llene toda la altura de su contenedor y decida automáticamente su ancho en función de su relación de aspecto.
He probado lo siguiente:
<Image
src="/deco.svg"
alt=""
layout="fill"
/>
Este fragmento se compila correctamente, pero en la interfaz veo el siguiente error:
Error: la imagen con src “/deco.svg” debe usar las propiedades “ancho” y “alto” o la propiedad “sin tamaño”.
Esto me confunde porque según los documentosestas propiedades son no requerido cuando se usa layout="fill"
.
francisco
Esto es lo que funcionó para mí.
con next/image
:
<div style={{width: '100%', height: '100%', position: 'relative'}}>
<Image
alt="Mountains"
src="https://stackoverflow.com/mountains.jpg"
layout="fill"
objectFit="contain"
/>
</div>
y con next/future/image
:
<Image
fill
alt="Mountains"
src="https://stackoverflow.com/mountains.jpg"
sizes="100vw"/>
-
Sí, el padre de Image debe tener
relative
propiedades.– Asad S.
29 sep 2021 a las 15:04
-
está configurando los valores absolutos para la altura y el ancho, pero la pregunta se expresa en porcentaje
– Hussam Jatib
28 de noviembre de 2021 a las 10:43
-
Solo me gustaría agregar algo a esta respuesta. En mi caso, donde necesitaba que la imagen se alineara a la izquierda, puede agregar el atributo objectPosition=”left”; Se pasa a css object-position: “left”; Más información – developer.mozilla.org/en-US/docs/Web/CSS/object-position
– Piltsen
10 de mayo a las 15:40
-
Esta es la solución perfecta. Para aquellos que intentan esto en una tarjeta que también tiene contenido de texto, separe el contenedor de la imagen del contenedor de texto y agregue el
position: relative
solo al contenedor de la imagen para que no se superponga con el contenido.– Víctor Eke
7 sep a las 0:25
-
Verificar siguiente/futuro/imagen‘s
fill
modo de diseño que hace que la imagen rellene el elemento principal.– francisco
15 de septiembre a las 14:18
Muhammet Can TONBUL
<img src="/path/to/image.jpg" alt="" title="" />
En NextJS 12 y versiones anteriores
<Image src="/path/to/image.jpg" alt="" title="" width="100%" height="100%" layout="responsive" objectFit="contain"/>
-
100% no es un ancho válido – Error: la imagen con src tiene una propiedad de “ancho” no válida. Se esperaba un valor numérico en píxeles pero recibió “100%”.
– Oly Dungey
15 de noviembre a las 7:08
-
Sí, tiene usted razón. Anulado con NextJS 13. Espero encontrar una solución al respecto y actualizar mi respuesta. @OlyDungey
– Muhammet Can TONBUL
15 de noviembre a las 9:39
peyman baseri
Aquí hay una manera: por ejemplo, quiero tener una imagen que cubra todo el ancho y alto de su contenedor, que es un div.
<div className={'image-container'}>
<Image src={path} layout="fill" className={'image'} />
</div>
Y aquí está el estilo: (Hay un contenedor div que ocupa la mitad del ancho y la altura de la ventana gráfica y mi imagen lo cubrirá).
// Nested Styling
.image-container {
width: 50vw;
height: 50vh;
position: relative;
.image {
width: 100%;
height: 100%;
position: relative !important;
object-fit: cover; // Optional
}
}
// Or Normal Styling
.image-container {
width: 50vw;
height: 50vh;
position: relative;
}
.image-container .image {
width: 100%;
height: 100%;
position: relative !important;
object-fit: cover; // Optional
}
-
Esa es una de las mejores soluciones que he encontrado para la imagen distante. Para imágenes locales, es mucho más fácil, pero para imágenes cargadas dinámicamente, esta solución funciona de maravilla.
– GRosay
3 oct 2021 a las 9:22
-
Ninguna de las soluciones que encontré aquí me funciona.
– Hugo
9 de septiembre a las 13:29
-
No hay necesidad de una posición relativa en el elemento de la imagen, ¡así que puede eliminar eso!
– Ali Radmanesh
18 de septiembre a las 7:23
Creo que también proporciono un atributo de ajuste de objeto en el elemento Imagen como este: –
<Image
alt="Mountains"
src="/mountains.jpg"
layout="fill"
objectFit="cover"
/>
El ejemplo proporcionado por Nextjs puede ser https://github.com/vercel/next.js/blob/canary/examples/image-component/pages/layout-fill.js
En caso de que no quiera usar valores absolutos para el alto y el ancho, es decir, en px, etc., puede hacer algo como esto
<div style={{ position: "relative", width: "100%", paddingBottom: "20%" }} >
<Image
alt="Image Alt"
src="/image.jpg"
layout="fill"
objectFit="contain" // Scale your image down to fit into the container
/>
</div>
Fuente original https://stackoverflow.com/a/66358533/12242764
Caballero jinete
<img alt="" src="https://some/image/uri" loading="lazy" />
En SiguienteJS
<div>
<Image
alt=""
src="https://some/image/uri"
width="100%"
height="100%"
layout="fill"
objectFit="contain"
/>
</div>
alto horno
Funciona para mí en el componente de imagen next.js
<Image src="/path/image.jpg" alt="" title="" width="100%" height="100%" layout="responsive" objectFit="cover"/>
-
no me funciona, atributos
width="100%" height="100%"
no parecen tener valores válidos– Ariel Mira
3 de septiembre a las 18:06
No creo que esto sea posible sin manipular la posición de img para que sea relativa, o editar el relleno en el contenedor desde la parte superior del relleno hasta el relleno izquierdo.
– Piet van Leeuwen
7 ago a las 23:18