@namespace

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

@namespace ist eine At-Regel, die XML-Namespaces definiert, die in einem CSS-Stylesheet verwendet werden sollen.

Probieren Sie es aus

Syntax

css
/* Default namespace */
@namespace url(XML-namespace-URL);
@namespace "XML-namespace-URL";

/* Prefixed namespace */
@namespace prefix url(XML-namespace-URL);
@namespace prefix "XML-namespace-URL";

Beschreibung

Die definierten Namespaces können verwendet werden, um die universellen, Typ- und Attributselektoren auf Elemente innerhalb dieses Namespaces zu beschränken. Die @namespace-Regel ist im Allgemeinen nur nützlich, wenn Sie mit Dokumenten arbeiten, die mehrere Namespaces enthalten — wie HTML mit eingebettetem SVG oder MathML oder XML, das mehrere Vokabulare mischt.

Alle @namespace-Regeln müssen allen @charset und @import-Regeln folgen und allen anderen At-Regeln und Stildeklarationen in einem Stylesheet vorausgehen.

@namespace kann verwendet werden, um den Standard-Namespace für das Stylesheet zu definieren. Wenn ein Standard-Namespace definiert ist, gelten alle universellen und Typselektoren (aber nicht Attributselektoren, siehe Hinweis unten) nur für Elemente in diesem Namespace.

Die @namespace-Regel kann auch verwendet werden, um ein Namespace-Präfix zu definieren. Wenn ein universeller-, Typ- oder Attributselektor mit einem Namespace-Präfix versehen ist, stimmt dieser Selektor nur überein, wenn der Namespace und der Name des Elements oder Attributs übereinstimmen.

In HTML werden bekannte fremde Elemente automatisch Namespaces zugewiesen. Dies bedeutet, dass HTML-Elemente so agieren, als ob sie zum XHTML-Namespace (http://www.w3.org/1999/xhtml) gehören, selbst wenn im Dokument kein xmlns-Attribut vorhanden ist, und dass die <svg> und <math> Elemente ihre entsprechenden Namespaces zugewiesen bekommen (http://www.w3.org/2000/svg und http://www.w3.org/1998/Math/MathML).

Hinweis: In XML hat ein Attribut, sofern ein Präfix nicht direkt auf dem Attribut definiert ist (z.B., xlink:href), keinen Namespace. Mit anderen Worten erben Attribute nicht den Namespace des Elements, auf dem sie sich befinden. Um dieses Verhalten nachzubilden, gilt der Standard-Namespace in CSS nicht für Attributselektoren.

Formale Syntax

@namespace = 
@namespace <namespace-prefix>? [ <string> | <url> ] ;

<namespace-prefix> =
<ident>

<url> =
<url()> |
<src()>

<url()> =
url( <string> <url-modifier>* ) |
<url-token>

<src()> =
src( <string> <url-modifier>* )

Beispiele

Standard- und präfixierte Namespaces festlegen

css
@namespace url(http://www.w3.org/1999/xhtml);
@namespace svg url(http://www.w3.org/2000/svg);

/* This matches all XHTML <a> elements, as XHTML is the default unprefixed namespace */
a {
}

/* This matches all SVG <a> elements */
svg|a {
}

/* This matches both XHTML and SVG <a> elements */
*|a {
}

Spezifikationen

Specification
CSS Namespaces Module Level 3
# declaration

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch