Signatur
Beschreibung
values() gehört zur Map-ähnlichen Schnittstelle CSSFontFeatureValuesMap und verhält sich wie Map.prototype.values(). Anders als die Kurzbeschreibung nahelegt, liefert der Iterator nur die Werte und keine [key, value]-Paare. Paare bekommt man mit entries(), die Schlüssel mit keys().
Eine CSSFontFeatureValuesMap erhält man über die Eigenschaften einer CSSFontFeatureValuesRule, also einer @font-feature-values-Regel: styleset, stylistic, swash, ornaments, annotation und characterVariant. Jede dieser Maps ordnet einem selbst gewählten Namen (z. B. nice-style) eine Liste ganzzahliger Feature-Indizes zu, auf die font-variant-alternates dann verweist.
Die Methode ist nützlich, wenn Sie die definierten OpenType-Indizes einer Schrift auslesen möchten, etwa zur Fehlersuche, für Werkzeuge rund um Schrift-Konfigurationen oder um zu prüfen, ob bestimmte Stilsätze belegt sind. Die Namen spielen dabei keine Rolle.
Beispiele
Werte eines styleset-Blocks auslesen
const sheet = new CSSStyleSheet();
sheet.replaceSync(`
@font-feature-values Font One {
@styleset {
nice-style: 12;
double-style: 1 3;
}
}
`);
const rule = sheet.cssRules[0]; // CSSFontFeatureValuesRule
const iterator = rule.styleset.values();
console.log(iterator.next().value);
console.log(iterator.next().value);
console.log(iterator.next().done);
Alle belegten Indizes mit for...of sammeln
const sheet = new CSSStyleSheet();
sheet.replaceSync(`
@font-feature-values MyFont {
@swash { fancy: 1; extra: 2; }
}
`);
const rule = sheet.cssRules[0];
const indices = [];
for (const value of rule.swash.values()) {
indices.push(...value);
}
console.log(indices);
Mit Spread-Syntax und Funktionsprüfung
const rule = [...document.styleSheets]
.flatMap((s) => { try { return [...s.cssRules]; } catch { return []; } })
.find((r) => r instanceof CSSFontFeatureValuesRule);
if (rule?.styleset && typeof rule.styleset.values === 'function') {
const all = [...rule.styleset.values()];
console.log('Stilsätze:', all);
} else {
console.log('Keine @font-feature-values-Regel oder keine Unterstützung');
}
// Wichtig · Fallstricke
- Nur Werte: Die Methode liefert keine
[key, value]-Paare. Wenn Sie die Namen auch brauchen, nehmen Sieentries()oderforEach(). - Jeder Wert ist ein Array, auch wenn nur ein einzelner Index deklariert ist, z. B.
[12]statt12. - Der Iterator ist nach einem Durchlauf verbraucht. Für einen erneuten Durchlauf müssen Sie
values()noch einmal aufrufen. - Browser-Kompatibilität: Die Map-Eigenschaften von
CSSFontFeatureValuesRule(etwastyleset) werden nicht überall unterstützt. Firefox kennt die Regel zum Beispiel schon lange, stellt die Maps aber teilweise nicht bereit. Prüfen Sie vor der Nutzung, ob die Funktion vorhanden ist. - Bei Stylesheets von fremden Ursprüngen (CORS) löst der Zugriff auf
cssRuleseinenSecurityErroraus. Fangen Sie ihn mittry...catchab.