Start · Sprachen · JavaScript · Referenz · MathMLElement.attributeStyleMap

MathMLElement.attributeStyleMap

Eigenschaft

Gibt ein lebendiges <code>StylePropertyMap</code>-Objekt zurück, über das die Inline-Stile (<code>style</code>-Attribut) eines MathML-Elements typisiert gelesen und geschrieben werden.

seit JavaScript Chromium 109+, Safari 16.4+; Firefox: nicht unters Kategorie: webapi

Signatur

MathMLElement.attributeStyleMap

Beschreibung

Die schreibgeschützte Eigenschaft attributeStyleMap des MathMLElement-Interfaces gibt ein lebendiges StylePropertyMap-Objekt zurück. Es enthält die Stil-Eigenschaften, die im style-Attribut des Elements stehen. Änderungen an der Map wirken sich sofort auf das Attribut aus, und Änderungen am Attribut zeigen sich direkt in der Map.

Die Eigenschaft gehört zum CSS Typed Object Model (CSS Typed OM). Anders als bei element.style bekommt man keine reinen Zeichenketten zurück, sondern typisierte Objekte wie CSSUnitValue (z. B. { value: 1.5, unit: "em" }) oder CSSKeywordValue. Damit kann man mit Zahlen rechnen, ohne selbst Zeichenketten wie "12px" zerlegen und wieder zusammensetzen zu müssen. Das ist praktisch, wenn Formeln dynamisch skaliert, eingefärbt oder animiert werden sollen, etwa einzelne <mi>-, <mo>- oder <mn>-Elemente.

Die Eigenschaft selbst lässt sich nicht neu zuweisen. Man arbeitet stattdessen mit den Methoden der Map: set(), append(), get(), getAll(), has(), delete() und clear(). Außerdem lässt sich die Map mit for…of durchlaufen. Sie spiegelt nur Inline-Stile wider. Welche Werte am Ende tatsächlich gelten (also inklusive der Stylesheets), liefert element.computedStyleMap().

Rückgabewert

Typ
StylePropertyMap
Beschreibung
Ein lebendiges StylePropertyMap-Objekt, das mit dem style-Attribut des Elements verknüpft ist. Es lässt sich lesen und schreiben, die Eigenschaft selbst ist aber schreibgeschützt.

Beispiele

Einzelne Variable einer Formel einfärben

// <math><mi id="x">x</mi><mo>+</mo><mn>1</mn></math>
const mi = document.getElementById('x');

mi.attributeStyleMap.set('color', 'crimson');
mi.attributeStyleMap.set('font-weight', 'bold');

console.log(mi.getAttribute('style'));
console.log(mi.attributeStyleMap.get('color').toString());
color: crimson; font-weight: bold; crimson

Schriftgröße einer Formel typisiert vergrößern

const math = document.querySelector('math');

// Startwert als typisierter Wert setzen
math.attributeStyleMap.set('font-size', CSS.em(1));

const zoomIn = () => {
  const size = math.attributeStyleMap.get('font-size'); // CSSUnitValue
  math.attributeStyleMap.set('font-size', CSS.em(size.value + 0.25));
};

zoomIn();
zoomIn();
const current = math.attributeStyleMap.get('font-size');
console.log(current.value, current.unit);
1.5 "em"

Inline-Stile auflisten und entfernen

const mo = document.querySelector('math mo');
mo.setAttribute('style', 'color: blue; padding-inline: 4px');

for (const [prop, values] of mo.attributeStyleMap) {
  console.log(prop, values.map(String).join(', '));
}

mo.attributeStyleMap.delete('color');
console.log(mo.attributeStyleMap.has('color'), mo.attributeStyleMap.size);
color blue padding-inline-end 4px padding-inline-start 4px false 2

Funktionsprüfung mit Rückfall auf element.style

const highlight = (el) => {
  if ('attributeStyleMap' in el) {
    el.attributeStyleMap.set('background-color', 'yellow');
  } else {
    // z. B. Firefox ohne CSS Typed OM
    el.style.backgroundColor = 'yellow';
  }
};

document.querySelectorAll('math mi').forEach(highlight);

// Wichtig · Fallstricke

  • Browser-Unterstützung: Das CSS Typed OM gibt es in Chromium-Browsern und in Safari ab 16.4, in Firefox (Stand 2024) jedoch nicht. Vorher mit 'attributeStyleMap' in element prüfen und bei Bedarf auf element.style zurückgreifen. Bei MathML hängt die Unterstützung außerdem von MathML Core ab, das in Chromium seit Version 109 enthalten ist.
  • Nur Inline-Stile: Werte aus Stylesheets tauchen hier nicht auf. Die tatsächlich geltenden Werte liefert computedStyleMap().
  • Kurzschreibweisen: Wird eine Kurzschreibweise wie padding-inline gesetzt, kann sie beim Durchlaufen der Map in ihre Einzel-Eigenschaften aufgelöst erscheinen. get() auf die Kurzschreibweise liefert dann unter Umständen einen CSSStyleValue, der nur als Zeichenkette vorliegt.
  • Fehler: set() wirft einen TypeError, wenn der Eigenschaftsname unbekannt ist oder der Wert nicht zur Eigenschaft passt (z. B. CSS.px(5) für color).
  • MathML-Präsentationsattribute wie mathcolor oder mathsize erscheinen nicht in der Map, auch wenn sie sich auf den Stil auswirken.
  • Benutzerdefinierte Eigenschaften (--foo) werden als CSSUnparsedValue zurückgegeben.