CSS/@-Regeln

Aus selfHTML
Zur Navigation springenZur Suche springen

Neben Regelsätzen, die das Zuordnen von Eigenschaften zu Elementen ermöglichen, gibt es in CSS noch eine weitere Sorte von Regeln. Diese Regeln beginnen mit dem At-Zeichen (@), daher nennt man sie @-Regeln.


@charset - Angabe der Zeichencodierung

Mit der @charset-Regel kann angegeben werden, in welcher Zeichencodierung ein Stylesheet verfasst wurde.

    {{#fornumargs:nr|name|{{#vardefine:class|}}{{#vardefine:classext|}}{{#vardefine:ext|-Extended}}
  • [[Datei:Iconset{{#var:ext}}.png|alt={{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}|{{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}]]
  • {{#vardefine:class}}{{#vardefine:classext}}}}

Diese Regel wird nur dann beachtet, wenn die Zeichencodierung nicht durch eine der folgenden Alternativen festgelegt wurde: Durch einen HTTP-Header, durch eine Byte-Order-Mark oder durch das Dokument, in dem sich das Stylesheet befindet (d.h. @charset ist in einem HTML style-Element wirkungslos).

Da die Codierung eines Dokuments bzw. eines Stylesheets eine sehr grundlegende Information ist, gelten strenge Regeln bei der Verarbeitung dieser @-Regel. Die Angabe der Zeichencodierung ist jedoch optional, wenn das Stylesheet in UTF-8 kodiert wurde, da es sich dabei um die Standardcodierung handelt.

Die Regel muss im Stylesheet an allererster Stelle stehen, d.h. kein einziges Zeichen darf vor dem @-Zeichen notiert werden. Im Gegensatz zu anderen Bestandteilen von CSS darf @charset nur in Kleinbuchstaben geschrieben werden.

Nach @charset folgt genau ein Leerzeichen gefolgt von einem doppelten Anführungszeichen. Direkt darauf folgt der Name der verwendeten Zeichencodierung. Bei diesem Namen spielt es keine Rolle, ob er in Groß- oder Kleinbuchstaben verfasst wurde. Direkt nach dem Codierungsnamen folgt wieder ein doppeltes Anführungszeichen sowie ein abschließender Strichpunkt.

Die @charset-Regel darf nur einmal in einem Dokument vorkommen.

Beispiel
@charset "utf-8"; /* Korrekt. */
@charset "ISO-8859-1"; /* Korrekt. */
@charset 'utf-8'; /* Falsch (nur doppelte Anführungszeichen sind erlaubt). */

@viewport - Anpassungen für unterschiedliche Ausgabegeräte

Die @viewport-Regel erlaubt Festlegungen für die Darstellung auf unterschiedlichen visuellen Ausgabemedien. Sie soll die von Apple stammende Viewport-Einstellung mit <meta name="viewport" ...> standardisieren und ersetzen.

    {{#fornumargs:nr|name|{{#vardefine:class|}}{{#vardefine:classext|}}{{#vardefine:ext|-Extended}}
  • [[Datei:Iconset{{#var:ext}}.png|alt={{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}|{{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}]]
  • {{#vardefine:class}}{{#vardefine:classext}}}}

Details: caniuse.com

Folgende Angaben sind möglich:

  • width als zusammenfassende Eigenschaft von
    • min-width und max-width
  • height als zusammenfassende Eigenschaft von
    • min-height und max-height
  • zoom
  • min-zoom
  • max-zoom
  • user-zoom
  • orientation
  • resolution

Achtung!

Diese @-Regel ist derzeit (Stand: Oktober 2017) nur in den Internetexplorer ab Version 10 (mit Vendorpräfix -ms-) integriert. Verwenden Sie stattdessen <meta name="viewport" content="width=device-width, initial-scale=1.0"> (siehe Viewport einstellen)

@import - Einbinden externer Stylesheets

Die @import-Regel erlaubt es einem Stylesheet, ein anderes Stylesheet einzubinden („zu importieren“). Sie ist also das CSS-Gegenstück zu den zahlreichen Varianten, Stylesheets in HTML- oder XML-Dokumente einzubinden.

    {{#fornumargs:nr|name|{{#vardefine:class|}}{{#vardefine:classext|}}{{#vardefine:ext|-Extended}}
  • [[Datei:Iconset{{#var:ext}}.png|alt={{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}|{{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}]]
  • {{#vardefine:class}}{{#vardefine:classext}}}}

Eine @import-Regel muss am Beginn eines Stylesheets (nach @charset, aber vor allen anderen Regelsätzen) notiert werden. Nach @import folgt die Angabe der Adresse des einzubindenden Stylesheets. CSS erlaubt dazu sowohl Zeichenketten als auch Dateireferenzierung.

Ein Dokument darf auch mehrere @import-Regeln enthalten.

Beispiel
@import "stylesheet1.css";
@import url('http://www.example.org/stylesheet2.css');

Medienspezifisches Einbinden von Stylesheets

Das Einbinden von Stylesheets kann auch bei der @import-Regel ein bestimmte Ausgabemedien gebunden werden. Dazu wird nach Angabe der einzubindenden Datei eine Medienabfrage formuliert. Es handelt sich dabei aber nicht um eine Zeichenkette, daher wird auf Anführungszeichen verzichtet.

    {{#fornumargs:nr|name|{{#vardefine:class|}}{{#vardefine:classext|}}{{#vardefine:ext|-Extended}}
  • [[Datei:Iconset{{#var:ext}}.png|alt={{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}|{{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}]]
  • {{#vardefine:class}}{{#vardefine:classext}}}}
Beispiel
@import "druck-stylesheet.css" print, embossed;
@import 'viel-platz.css' screen and (min-width: 600px);
Beachten Sie: Internet Explorer bis Version 7 unterstützen das medienspezifische Einbinden von Stylesheets nicht. Internet Explorer 8 unterstützt diese Funktion zwar, ignoriert aber Stylesheets die für das Medium print eingebunden werden.

Sie können für jede Internetseite beliebig viele Stylesheets einbinden. Beachten Sie dabei jedoch sowohl die Regeln zur Reihenfolge der Abarbeitung von CSS-Deklarationen als auch die Hinweise zur Performanceoptimierung.

Spezifische Abschnitte

Wenn Regeln für unterschiedliche Medien, Browser oder Dokumente festgelegt werden sollen, ist es nicht erforderlich, diese in unterschiedliche Dateien auszulagern. Mithilfe verschiedener @-Regeln lassen sich beispielsweiseRegelsätze zusammenfassen, die nur für ein bestimmtes Ausgabemedium oder Seiten einer bestimmten Domain gelten sollen.

@media - Medienspezifische Abschnitte

Hauptartikel: CSS/Media Queries

Mit der @media-Regel können CSS-Deklarationen zusammengefasst werden, die nur für ein bestimmtes Medium gültig sind. Innerhalb eines Stylesheets können mehrere medienspezifische Abschnitte definiert werden.

    {{#fornumargs:nr|name|{{#vardefine:class|}}{{#vardefine:classext|}}{{#vardefine:ext|-Extended}}
  • [[Datei:Iconset{{#var:ext}}.png|alt={{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}|{{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}]]
  • {{#vardefine:class}}{{#vardefine:classext}}}}

Details: caniuse.com

Die Regel besteht aus dem einleitenden @media, einer Medienabfrage sowie einem durch geschweifte Klammern begrenzten Abschnitt. Innerhalb dieses Abschnitts werden die für das Medium geltenden Regelsätze notiert.

Beispiel
@media screen 
{
   p {font-size: 1.5em;}
}

@media print 
{
   p {font-size: 13pt;}
}
Dieses Beispiel zeigt die Eigenschaft font-size, der je nach Ausgabemedium ein anderer Wert zugewiesen wird: Für Bildschirmausgaben die relative Einheit Em, für Ausdrucke die absolute Einheit Punkt.

Siehe auch: Formular zum ausfüllen und dann ausdrucken

@document - Herkunftspezifische Abschnitte

Mit der @document-Regel lassen sich Abschnitte von CSS-Deklarationen speziell für Dokumente einer bestimmten Herkunft erstellen. Besonders ist dies für User-Stylesheets interessant. Innerhalb eines Stylesheets können mehrere herkunftspezifische Abschnitte definiert werden.

    {{#fornumargs:nr|name|{{#vardefine:class|}}{{#vardefine:classext|}}{{#vardefine:ext|-Extended}}
  • [[Datei:Iconset{{#var:ext}}.png|alt={{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}|{{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}]]
  • {{#vardefine:class}}{{#vardefine:classext}}}}

Die Regel besteht aus dem einleitenden @document, einer Herkunftsabfrage sowie einem durch geschweifte Klammern begrenzten Abschnitt. Innerhalb dieses Abschnitts werden die für das Medium geltenden Regelsätze notiert.

Beispiel
@document url('http://wiki.selfhtml.org/wiki/Doku:CSS/Grundlagen_von_CSS/@-Regeln')
{
   li {font-size: 1.5em;} /* # 1 # */
}

@document url-prefix('http://wiki-test2.selfhtml.org') 
{
   html, body {background-color: red;} /* # 2 # */
}

@document domain('selfhtml.org')
{
   * {color: #780000;} /* # 3 # */
}
Dieses Beispiel
  • gibt für Listenelemente dieser (und nur dieser) Seite eine Schriftgröße vor (# 1 #)
  • setzt für alle html- und body-Elemente des Test-Wikis einen roten Hintergrund (# 2 #)
  • legt für alle Seiten der Domain „selfhtml.org“, einschließlich Subdomains eine rotbraune Schriftfarbe fest (# 3 #)

Achtung!

Die @-Regel @document ist noch nicht in alle aktuellen Browser implementiert, deshalb muss man proprietäre Regeln verwenden.

Für Firefox

  • @-moz-document

für Safari und Chrome

  • @-webkit-document

@supports - Browserspezifische Abschnitte

Mit der feature query @supports teilen Sie Browsern mit, dass enthaltene Regeln nur angewendet werden sollen, wenn der Browser eine bestimmte Eigenschaft oder den Wert einer Eigenschaft beherrscht.

    {{#fornumargs:nr|name|{{#vardefine:class|}}{{#vardefine:classext|}}{{#vardefine:ext|-Extended}}
  • [[Datei:Iconset{{#var:ext}}.png|alt={{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}|{{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}]]
  • {{#vardefine:class}}{{#vardefine:classext}}}}

Details: caniuse.com

Die Regel besteht aus einem einleitenden @supports gefolgt von beliebig vielen in runden Klammern durch boolsche Operatoren (AND, OR und NOT) verknüpfte syntaktisch korrekte CSS-Deklarationen. Anschließend folgen in geschweiften Klammern die entsprechenden Deklarationen.

Featureabfrage, ob Grid Layout unterstützt wird
div > * {
  display: inline-block;
}
@supports (display: grid) {
  div {
    display: grid;
  }
}

Für Browser, die die Eigenschaft display:grid unterstützen, wird das div zum Grid-Container. Browser, die grid nicht kennen, ordnen alle Kindelemente des div (die Rasterelemente) durch display:inline-block nebeneinander an.

Fallback mit @supports not
@supports not (display: grid) {
  div > * {
   display: inline-block;
  }
}

Für Browser, die die Eigenschaft display: grid nicht unterstützen, werden die Kindelemente des div nebeneinander platziert.

Beachten Sie: Ältere Browser, die angesprochen werden sollen (IE 9-11), verstehen auch die @supports-Regel nicht. Deshalb ist die obere Variante vorzuziehen!

Kombination verschiedener @-Regeln

@page - Außenabstände in aufgeteilten Medien

Wenn ein Medium die Inhalte eines Dokuments nicht kontinuierlich wiedergeben kann (z.B. durch Scrollen oder Vorlesen), wird der Inhalt in mehrere Seiten aufgeteilt. Die Regel @page erlaubt es, diese Seiten anzusprechen, so dass ein Außenabstand definiert werden kann. Als Außenabstand wird zum Beispiel die Entfernung zwischen den Rändern eines Blatt Papiers und dem aufgedruckten Inhalt bezeichnet.

    {{#fornumargs:nr|name|{{#vardefine:class|}}{{#vardefine:classext|}}{{#vardefine:ext|-Extended}}
  • [[Datei:Iconset{{#var:ext}}.png|alt={{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}|{{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}]]
  • {{#vardefine:class}}{{#vardefine:classext}}}}

Auf @page folgt ein durch geschweifte Klammern getrennter Abschnitt, in dem der Außenabstand definiert wird. Dies erfolgt über die margin-Eigenschaften.

Außenabstände, die durch @page festgelegt werden, müssen nicht zwingend eingehalten werden. Ein Browser kann und wird dem Benutzer die Möglichkeit geben, Außenabstände selbst zu bestimmten. Dies gilt vor allem für Printmedien.

Beispiel
@page { margin: .5in; }
@page { margin-top: 1.5cm; margin-left: 2.5cm; }
Beachten Sie: Per !important festgelegte Außenabstände überschreiben sogar die Browsereinstellungen unter "Seite einrichten ..." und dabei wird nicht beachtet, dass die Drucker in der Regel nicht das gesamte Papier bedrucken können.

Erste, linke und rechte Seiten

Mit Hilfe von @page können auch Regeln definiert werden, die nur für die erste Seite, nur für linke oder nur für rechte Seiten gelten sollen.

Die erste Seite ist eine linke Seite, wenn die Schreibrichtung (siehe die direction-Eigenschaft) des Wurzelelements von links nach rechts verläuft und eine rechte Seite, wenn die Schreibrichtung des Wurzelelements von rechts nach links verläuft.

Durch das Einfügen eines Seitenumbruches (page-break-*-Eigenschaften) vor dem ersten auszugebenden Inhalt kann die erste Seite von einer linken in eine rechte Seite (und umgekehrt) verwandelt werden.

Um eine bestimmte Art von Seiten anzusprechen wird nach @page, getrennt durch ein Leerzeichen, eine der Pseudoklassen :first (die erste Seite), :left (linke Seiten) bzw. :right (rechte Seiten) angegeben. Diese Pseudoklassen existieren allein für die Verwendung mit @page.

Beispiel
@page :first { margin-top: 5cm; }
@page :left  { margin-right: 3.5cm; }
@page :right { margin-left: 3.5cm; }
@page        { margin: 2.5cm; }
In diesem Beispiel erhält die erste Seite einen großen Abstand an der Oberseite des Blatts. Die linken und rechten Seiten erhalten jeweils zusätzlichen Abstand am Bundsteg. Zuletzt werden die übrigen Abstände allgemein definiert. Dies ist möglich, da @page-Regeln mit Pseudoklasse höher gewichtet werden als solche ohne.

Seitengrößen bei Druckausgabe

Die Eigenschaft size legt bei paged-Medien die Außenmaße fest. Absolute Seiten haben feste Maße, während relative Seiten den Inhalt an den Medientyp anpassen.

    {{#fornumargs:nr|name|{{#vardefine:class|}}{{#vardefine:classext|}}{{#vardefine:ext|-Extended}}
  • [[Datei:Iconset{{#var:ext}}.png|alt={{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}|{{#explode:{{#var:classext|{{#var:class|leer+Leer}}}}|+|-1}}]]
  • {{#vardefine:class}}{{#vardefine:classext}}}}

Folgende Angaben sind möglich:

  • auto: (Standardwert) relative Seitenverhältnisse
  • 1 oder 2 Längenangaben: absolute Seitengröße, wird nur 1 Wert angegeben, wird ein Quadrat erzeugt, zwei Werte ermöglichen ein Rechteck
  • portrait: Hochformat, relative Seitengröße
  • landscape: Querformat, relative Seitengröße
  • inherit
Beachten Sie: Wenn die Seitengröße mit einer width, height, device-width, device-height, aspect-ratio, device-aspect-ratio oder orientation Media Query festgelegt wurde, muss die Größenangabe in size ignoriert werden.