Signatur
Beschreibung
Das Interface HTMLAreaElement steht für ein <area>-Element. Solche Elemente legen innerhalb einer <map> klickbare Bereiche auf einem Bild fest, einer sogenannten Image-Map. Das Interface erbt alle Eigenschaften und Methoden von HTMLElement. Dazu kommen Eigenschaften für die Geometrie (shape, coords), das Linkverhalten (href, target, download, rel, relList, referrerPolicy, ping) und den Alternativtext (alt).
Wie HTMLAnchorElement nutzt es das Mixin HTMLHyperlinkElementUtils. Deshalb lassen sich URL-Bestandteile direkt lesen und schreiben: protocol, host, hostname, port, pathname, search, hash, origin (nur lesbar), username und password. Mit toString() erhält man die vollständige URL, also denselben Wert wie href.
Typische Einsätze sind das dynamische Erzeugen oder Anpassen von Image-Maps, etwa bei responsiven Bildern, deren Koordinaten neu berechnet werden müssen. Weitere Anwendungen sind die Auswertung von Klicks auf einzelne Bereiche und das nachträgliche Umschreiben von Linkzielen, zum Beispiel für Tracking-Parameter.
shape:"rect","circle","poly"oder"default"coords: Koordinaten als kommagetrennte Zeichenkette in CSS-Pixelnalt: Alternativtext. Pflicht, sobaldhrefgesetzt ist
Rückgabewert
document.createElement("area") oder über DOM-Abfragen wie querySelector("area"). Einen öffentlichen Konstruktor gibt es nicht.Beispiele
Image-Map dynamisch erzeugen
const img = document.querySelector('#grundriss');
const map = document.createElement('map');
map.name = 'raeume';
const kueche = document.createElement('area');
kueche.shape = 'rect';
kueche.coords = '0,0,200,150';
kueche.href = '/raeume/kueche';
kueche.alt = 'Küche';
map.append(kueche);
document.body.append(map);
img.useMap = '#raeume';
console.log(kueche instanceof HTMLAreaElement, kueche.shape);
URL-Bestandteile lesen und ändern
const area = document.createElement('area');
area.href = 'https://example.com/shop/produkt?id=42#details';
console.log(area.hostname, area.pathname, area.search, area.hash);
// Tracking-Parameter ergänzen
const params = new URLSearchParams(area.search);
params.set('utm_source', 'imagemap');
area.search = params.toString();
console.log(area.toString());
Klicks auf Bereiche per Event-Delegation auswerten
const map = document.querySelector('map[name="weltkarte"]');
map.addEventListener('click', (event) => {
const area = event.target.closest('area');
if (!area) return;
event.preventDefault();
console.log(`Region: ${area.alt} (${area.shape}: ${area.coords})`);
});
Koordinaten bei responsiven Bildern skalieren
const img = document.querySelector('img[usemap="#raeume"]');
const skaliereAreas = () => {
const faktor = img.clientWidth / img.naturalWidth;
for (const area of document.querySelectorAll('map[name="raeume"] area')) {
area.dataset.orig ??= area.coords;
area.coords = area.dataset.orig
.split(',')
.map((wert) => Math.round(Number(wert) * faktor))
.join(',');
}
};
img.complete ? skaliereAreas() : img.addEventListener('load', skaliereAreas);
window.addEventListener('resize', skaliereAreas);
// Wichtig · Fallstricke
- Barrierefreiheit: Ein
<area>mithrefbraucht immer einen aussagekräftigenalt-Text. Screenreader lesen sonst nur die URL oder gar nichts vor. - Keine automatische Skalierung:
coordsgelten in CSS-Pixeln relativ zur dargestellten Bildgröße. Wird das Bild per CSS skaliert, verrutschen die Bereiche, wenn man sie nicht per Skript anpasst. - Veraltete Eigenschaften:
noHrefist obsolet. Ein Bereich ohne Link entsteht, indem manhrefeinfach weglässt. - Sicherheit: Setzt man
hrefaus Benutzereingaben, muss manjavascript:-URLs verhindern, denn sonst droht XSS. Beitarget="_blank"öffnen moderne Browser implizit mitnoopener. Wer Wert darauf legt, setztrel="noopener"trotzdem ausdrücklich. - Leeres
href: Ohne Attribut liefern die URL-Eigenschaften leere Zeichenketten,originliefert ebenfalls einen leeren String. - Kompatibilität: Wird von allen modernen Browsern unterstützt.
referrerPolicy,downloadundpingkamen später hinzu.pingist in Firefox standardmäßig deaktiviert.