Así que me encontré con un problema al tratar de hacer clic en los objetos de una imagen. Tengo una imagen con 3 objetos que quiero vincular a 3 páginas diferentes/ejecutar 3 funciones diferentes al hacer clic.
Ahora mi problema ocurre cuando cambio el tamaño de mi ventana. La imagen tiene el siguiente estilo para mostrar siempre los objetos, incluso si cambio el tamaño de la ventana y lleno toda la pantalla.
img { object-fit: cover; object-position: center; width: 100%; height: calc(100vh - 90px); }Dado que los objetos son bastante grandes y cuando cambio el tamaño, digamos en la vista móvil, los enlaces se superpondrán y serán más grandes que la pantalla misma.
Esta es la estructura HTML actual, que puedo cambiar.
<div> <img src="img/steintafelAussen.jpg" alt="Kircheneingang" /> <div class="buttons"> <button class="btn-1"></button> <button class="btn-2"></button> <button class="btn-3"></button> </div> </div>Ahora mi pregunta es, ¿sería posible asignar los tamaños y las posiciones de los botones a la imagen, que se reescalen automáticamente, o necesitaría usar consultas de medios para lograrlo?
Estaba pensando en rastrear la escala inicial de la imagen de alguien y aplicarla a los enlaces con transform: scale(); , ¿quizás?
¿Puedo usar un SVG transparente que se coloca sobre la imagen, tiene 3 objetos con eventListeners en lugar de enlaces?
Usar JS está bien, ya que es una aplicación vue 3.
He resuelto el problema colocando un SVG del mismo tamaño sobre la imagen y agregando eventListeners a las rutas de los enlaces. Conduciendo al siguiente código:
.wrapper { aspect-ratio: 4 / 3; position: absolute; max-height: calc(100vh - 90px); /*Calc because my header and footer are 40px and 50px otherwise it would be 100vh*/ margin: auto; width: auto; top: 40px; /*header is 40px*/ right: 0; bottom: 50px; /*footer is 50px*/ left: 0; } .img, .overlay-svg { position: absolute; max-height: 100%; margin: auto; width: auto; top: 0; right: 0; bottom: 0; left: 0; } <div class="wrapper"> <img class="img" src="/path/to/image" /> <svg class="overlay-svg" viewBox="0 0 2049 1537" xmlns="http://www.w3.org/2000/svg" > <path class="btn-svg" d="M810 523V495.5L890 479.5H993.5L1090 495.5L1178 523V1311L787 1329.5L799.5 940.5L810 523Z" /> <path class="btn-svg" d="M1461 672L1808 585L1832 1537H1471.5L1461 672Z" /> <path class="btn-svg btn-lamp" d="M481 567L517 512L544 567L577 589.5L544 699L506.5 739.5L466 690L451 579L481 567Z" /> </svg> </div>