Como esto no se puede hacer con la manipulación simple de HTML/CSS, la única alternativa es JavaScript para, de hecho, recalcular las coordenadas basadas en el cambio de tamaño de la imagen. Con este fin he juntado una función (aunque hay dos funciones implicadas) que logra este fin:
function findSizes(el, src) {
if (!el || !src) {
return false;
}
else {
var wGCS = window.getComputedStyle,
pI = parseInt,
dimensions = {};
dimensions.actualWidth = pI(wGCS(el, null).width.replace('px', ''), 10);
var newImg = document.createElement('img');
newImg.src = src;
newImg.style.position = 'absolute';
newImg.style.left = '-10000px';
document.body.appendChild(newImg);
dimensions.originalWidth = newImg.width;
document.body.removeChild(newImg);
return dimensions;
}
}
function remap(imgElem) {
if (!imgElem) {
return false;
}
else {
var mapName = imgElem
.getAttribute('usemap')
.substring(1),
map = document.getElementsByName(mapName)[0],
areas = map.getElementsByTagName('area'),
imgSrc = imgElem.src,
sizes = findSizes(imgElem, imgSrc),
currentWidth = sizes.actualWidth,
originalWidth = sizes.originalWidth,
multiplier = currentWidth/originalWidth,
newCoords;
for (var i = 0, len = areas.length; i < len; i++) {
newCoords = areas[i]
.getAttribute('coords')
.replace(/(\d+)/g,function(a){
return Math.round(a * multiplier);
});
areas[i].setAttribute('coords',newCoords);
}
}
}
var imgElement = document.getElementsByTagName('img')[0];
remap(imgElement);
JS Fiddle demo.
Sin embargo, tenga en cuenta que esto requiere un navegador que implemente window.getComputedStyle()
(la mayoría de los navegadores actuales, pero solo en IE de la versión 9 y superior). Además, no hay verificaciones de cordura que no sean garantizar que los argumentos necesarios pasen a las funciones. Sin embargo, estos deberían ser un comienzo si quieres experimentar.
Referencias:
las imágenes tienen dimensiones definidas, ¿por qué usar porcentaje? asumiendo que no está estirando las imágenes para llenar la pantalla (lo que se considera una mala práctica). –
Mis imágenes definitivamente se extenderán para adaptarse a todo el navegador de la ventana. Y si administra sus imágenes cuidadosamente (proporcionando, por ejemplo, una versión diferente utilizando consultas de medios u otras técnicas), entonces no es una mala práctica. –
bueno, si asigna una imagen diferente para cada tamaño de pantalla, debería poder usar dimensiones fijas para las 'áreas' del mapa. ver la respuesta de @Baszz. –