Divida la imagen en muchas imágenes más pequeñas y permita hipervínculos desde cada imagen individual (como un mapa de imagen)
Resumen
Tengo una imagen (1920px x 1080px) que quiero dividir en imágenes más pequeñas de 40px por 40px. Quiero mostrar las imágenes en una página web para que se vea como la imagen completa original de 1920×1080. Serán 48 imágenes de ancho (columnas) por 27 filas.
Para cada imagen quiero tener un enlace y texto alternativo diferente.
Cuando se cambie el tamaño de la pantalla de forma reactiva, quiero que las imágenes se reduzcan para que no se envuelvan alrededor de la página o se desplacen fuera de la página.
Marco de trabajo
Actualmente usando Vue y Vuetify.
Intenté
- He intentado usar la imagen completa sin dividirla y poner un mapa de imágenes en ella. Esto funciona perfectamente mientras está a pantalla completa, sin embargo, cuando la página se ajusta de forma reactiva al cambio de tamaño, las coordenadas del mapa de imágenes se rompen ya que el tamaño de la imagen subyacente ha cambiado. No pude averiguar cómo obtener que la escala de la imagen ajuste el mapa de imágenes en consecuencia.
-
He intentado usar filas (v-row) y columnas (v-col) de Vuetify para contener la v-img… las imágenes no se reducían correctamente, o se envolvían o simplemente se desplazaban fuera de la página (class=”d-flex flex-nowrap”).
He tenido una sugerencia de mirar Flex o CSS Grid para esto, sin embargo, estoy un poco aprensivo de que llegaré al final de experimentar con ellos y terminaré teniendo el mismo tipo de problema.
Cualquier sugerencia es muy apreciada. Gracias.
davy.ai
Solución para Mostrar Imágenes Pequeñas de una Imagen Grande en una Página Web
Requisitos
Marco de Trabajo
El proyecto está utilizando Vue.js y Vuetify.js.
Solución
El problema con el uso de un mapa de imágenes en la imagen de tamaño completo es que cuando el tamaño de la imagen se reduce, las coordenadas del mapa no se ajustan en consecuencia. Una solución alternativa es dividir la imagen grande en imágenes más pequeñas de 40px por 40px usando un editor de imágenes y colocarlas en la página web usando CSS Grid.
Implementación HTML
Implementación CSS
Cada imagen está envuelta en una etiqueta
<a>
para proporcionar un hipervínculo y una etiqueta<img>
para la imagen en sí. Cada imagen más pequeña tiene 40px por 40px, y el número total de imágenes es de 48 en una fila y 27 filas.El diseño CSS Grid se utiliza para colocar cada imagen en su posición correspondiente en la cuadrícula. Las propiedades
grid-template-columns
ygrid-template-rows
se establecen enrepeat(48, 40px)
yrepeat(27, 40px)
, respectivamente, para crear la cuadrícula de 48 columnas y 27 filas, con cada celda siendo de 40px por 40px. La propiedadmax-width
se establece en 1920px, y la propiedadwidth
se establece en 100% para permitir que la cuadrícula se adapte al tamaño de la pantalla.La propiedad
object-fit: cover
se usa en la etiqueta<img>
para asegurarse de que cada imagen cubra toda la celda de 40px por 40px, independientemente de la relación de aspecto de la imagen original.Solución Dinámica
Para agregar una carga dinámica de imágenes y administración de enlaces, podemos usar la directiva
v-for
en Vue.js para generar el HTML de cada imagen de forma dinámica a partir de una matriz de objetos que contienen la fuente de la imagen, el enlace y el texto alternativo.Con esta solución dinámica, podemos modificar fácilmente la lista de imágenes actualizando la matriz de
images
en los datos de Vue.js. Esto puede ser útil si se agregan nuevas imágenes al proyecto o si queremos cambiar los enlaces o el texto alternativo para las imágenes.Solución Responsiva
Para que las imágenes se ajusten en consecuencia cuando el tamaño de la pantalla cambia, podemos usar Media Queries CSS para ajustar las propiedades
grid-template-columns
ygrid-template-rows
en diferentes tamaños de pantalla.En este ejemplo, la cuadrícula se ajusta para tener 24 columnas y 54 filas cuando el tamaño de la pantalla está entre 1200px y 768px, 12 columnas y 108 filas cuando el tamaño de la pantalla está entre 768px y 576px, y 6 columnas y 216 filas cuando el tamaño de la pantalla es menor de 576px.
Esto permite que las imágenes se ajusten en consecuencia sin envolver o desplazarse fuera de la página.
Conclusión
Con CSS Grid, podemos mostrar fácilmente una imagen grande dividida en imágenes más pequeñas en una página web mientras se conserva la relación de aspecto de cada imagen más pequeña. Agregar carga dinámica y comportamiento responsivo hace que la solución sea escalable y adaptable a diferentes proyectos.