Start · Sprachen · JavaScript · Referenz · CSSPageRule.style

CSSPageRule.style

Eigenschaft

Schreibgeschützte Eigenschaft, die ein <code>CSSPageDescriptors</code>-Objekt mit den Deskriptoren (z. B. <code>size</code>, <code>margin</code>) einer <code>@page</code>-Regel liefert.

seit JavaScript Baseline: alle Browser (CSSPageDescriptors seit ca Kategorie: webapi

Signatur

get CSSPageRule.style

Beschreibung

Die Eigenschaft style einer CSSPageRule gibt Zugriff auf die Deklarationen innerhalb einer @page-Regel. Das ist die At-Regel, mit der man Seitengröße, Ränder und Ausrichtung für den Druck bzw. für seitenbasierte Medien festlegt. Der Rückgabewert ist ein CSSPageDescriptors-Objekt. Diese Klasse erbt von CSSStyleDeclaration und hat zusätzlich eigene Eigenschaften für seitenspezifische Deskriptoren wie size, pageOrientation und die margin-Varianten.

Die Eigenschaft selbst kann man nicht neu zuweisen. Das zurückgegebene Objekt ist aber live und lässt sich ändern: Mit setProperty(), getPropertyValue(), removeProperty() oder direkten Zuweisungen wie style.margin = "2cm" ändert man die Druckeinstellungen zur Laufzeit. Das ist nützlich, wenn Nutzer vor dem Drucken zum Beispiel Format oder Ränder selbst wählen sollen.

An eine CSSPageRule kommt man über document.styleSheets und die Liste cssRules eines Stylesheets. Dort filtert man nach rule instanceof CSSPageRule. Ob das Stylesheet von einer anderen Herkunft (Cross-Origin) stammt, spielt dabei eine Rolle.

Rückgabewert

Typ
CSSPageDescriptors
Beschreibung
Ein live veränderbares Objekt mit den Deskriptoren der @page-Regel. Es erbt von CSSStyleDeclaration. Ältere Browser liefern stattdessen direkt eine CSSStyleDeclaration.

Beispiele

Deskriptoren einer @page-Regel auslesen

// Im Dokument: <style>@page { size: A4; margin: 2cm; }</style>
const pageRules = [...document.styleSheets]
  .flatMap((sheet) => [...sheet.cssRules])
  .filter((rule) => rule instanceof CSSPageRule);

for (const rule of pageRules) {
  console.log(rule.selectorText || '(ohne Selektor)');
  console.log(rule.style.getPropertyValue('size'));
  console.log(rule.style.margin);
}
(ohne Selektor) A4 2cm

Druckränder zur Laufzeit ändern

const sheet = new CSSStyleSheet();
sheet.insertRule('@page { margin: 1cm; }');
document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];

const pageRule = sheet.cssRules[0];

document.querySelector('#rand').addEventListener('change', (e) => {
  pageRule.style.setProperty('margin', `${e.target.value}mm`);
  console.log(pageRule.cssText);
});
@page { margin: 15mm; }

Querformat vor dem Drucken setzen

const printLandscape = () => {
  const sheet = new CSSStyleSheet();
  sheet.replaceSync('@page { size: A4 landscape; }');
  document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];

  const { style } = sheet.cssRules[0];
  console.log(style.size);
  window.print();

  // Nach dem Drucken wieder entfernen
  document.adoptedStyleSheets = document.adoptedStyleSheets.filter((s) => s !== sheet);
};

printLandscape();
A4 landscape

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie rule.style = ... hat keine Wirkung, im Strict Mode wirft sie eventuell einen Fehler. Stattdessen ändert man die Eigenschaften des zurückgegebenen Objekts.
  • Kompatibilität: CSSPageRule.style gibt es seit langem in allen modernen Browsern. Den spezialisierten Typ CSSPageDescriptors liefern Browser erst seit etwa 2023/2024. Ältere Versionen geben eine einfache CSSStyleDeclaration zurück. Nutzt man deshalb getPropertyValue() und setProperty(), funktioniert der Code in allen Browsern.
  • Cross-Origin-Stylesheets: Wird cssRules bei einem Stylesheet von fremder Herkunft ohne passende CORS-Header gelesen, wirft das einen SecurityError. Den Zugriff deshalb in try/catch einschließen.
  • Nicht jeder Browser wertet jeden Deskriptor aus. Wie gut zum Beispiel size oder die Randbereiche (@top-center usw.) unterstützt werden, ist unterschiedlich, vor allem in Firefox und Safari. Wirksam werden die Werte erst in der Druckvorschau bzw. beim Drucken.