Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

content CSS property

Baseline Weitgehend verfügbar *

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.

Die content-Eigenschaft CSS ersetzt den Inhalt durch einen generierten Wert. Sie kann verwendet werden, um zu definieren, was innerhalb eines Elements oder Pseudo-Elements gerendert wird. Für Elemente legt die content-Eigenschaft fest, ob das Element normal (normal oder none) rendert oder durch ein Bild (und dazugehörigen "alt"-Text) ersetzt wird. Für Pseudo-Elemente und Randboxen definiert content den Inhalt als Bilder, Text, beides oder keins, was bestimmt, ob das Element überhaupt rendert.

Objekte, die über die content-Eigenschaft eingefügt werden, sind anonyme ersetzte Elemente.

Probieren Sie es aus

.topic-games::before {
  content: "🎮 " / "games";
}

.topic-weather::before {
  content: "⛅ " / "cloudy";
}

.topic-hot::before {
  content: url("/shared-assets/images/examples/fire.png") / "On fire";
  margin-right: 6px;
}
<p class="topic-games">Game News: A new inFamous is not planned</p>

<p class="topic-weather">
  Weather for Today: Heat, violent storms and twisters
</p>

<p class="topic-hot">Trending Article: Must-watch videos of the week</p>

Syntax

css
/* Keywords that cannot be combined with other values */
content: normal;
content: none;

/* <content-replacement>: <image> values */
content: url("http://www.example.com/test.png");
content: linear-gradient(#e66465, #9198e5);
content: image-set("image1x.png" 1x, "image2x.png" 2x);

/* speech output: alternative text after a "/"  */
content: url("../img/test.png") / "This is the alt text";
content: counter(chapter) / "Chapter " counter(chapter);

/* <string> value */
content: "unparsed text";

/* <counter> values, optionally with <list-style-type> */
content: counter(chapter_counter);
content: counter(chapter_counter, upper-roman);
content: counters(section_counter, ".");
content: counters(section_counter, ".", decimal-leading-zero);

/* attr() value linked to the HTML attribute value */
content: attr(href);

/* <quote> values */
content: open-quote;
content: close-quote;
content: no-open-quote;
content: no-close-quote;

/* <content-list>: a list of content values. 
Several values can be used simultaneously */
content: "prefix" url("http://www.example.com/test.png");
content: "prefix" url("/img/test.png") "suffix" / "Alt text";
content: open-quote counter(chapter_counter);

/* Global values */
content: inherit;
content: initial;
content: revert;
content: revert-layer;
content: unset;

Werte

Der Wert kann sein:

  • Eines von zwei Schlüsselwörtern: none oder normal. normal ist der Standardwert der Eigenschaft.
  • <content-replacement>, wenn ein DOM-Knoten ersetzt wird. <content-replacement> ist immer ein <image>.
  • Eine <content-list>, wenn Pseudo-Elemente und Randboxen ersetzt werden. Eine <content-list> ist eine Liste von einem oder mehreren anonymen Inline-Boxen, die in der angegebenen Reihenfolge erscheinen. Jedes <content-list>-Element ist vom Typ <string>, <image>, <counter>, <quote>, <target> oder <leader()>.
  • Ein optionaler alternativer Textwert, der <string>, <counter> oder attr()-Funktionswerte enthalten kann und von einem Schrägstrich (/) vorangestellt wird.

Die oben genannten Schlüsselwörter und Datentypen werden im Folgenden ausführlicher beschrieben:

none

Wird auf ein Pseudo-Element angewendet, wird das Pseudo-Element nicht generiert. Wird auf ein Element angewendet, hat der Wert keine Auswirkung.

normal

Für die ::before- und ::after-Pseudo-Elemente wird dieser Wert zu none berechnet. Bei anderen Pseudo-Elementen wie ::marker, ::placeholder oder ::file-selector-button erzeugt er den initialen (oder normalen) Inhalt des Elements. Für normale Elemente oder Randboxen wird er auf die Nachkommen des Elements berechnet. Dies ist der Standardwert.

<string>

Eine Zeichenfolge, die in übereinstimmende einfache oder doppelte Anführungszeichen eingeschlossen ist. Mehrere Zeichenfolgenwerte werden verkettet (es gibt keinen Verkettungsoperator in CSS).

<image>

Ein <image>, das ein anzuzeigendes Bild darstellt. Dies kann einem <url>, image-set()- oder <gradient>-Datentyp oder einem Teil der Webseite selbst entsprechen, der durch die element()-Funktion definiert ist.

<counter>

Der <counter>-Wert ist ein CSS-Zähler, im Allgemeinen eine Zahl, die durch Berechnungen definiert wird, die durch die Eigenschaften counter-reset und counter-increment festgelegt werden. Er kann entweder mit der counter()- oder der counters()-Funktion angezeigt werden.

counter()

Die counter()-Funktion hat zwei Formen: 'counter(name)' oder 'counter(name, style)'. Der generierte Text ist der Wert des innersten Zählers des angegebenen Namens im Bereich an dem angegebenen Pseudo-Element. Er wird im angegebenen list-style-type formatiert (decimal standardmäßig).

counters()

Die counters()-Funktion hat ebenfalls zwei Formen: 'counters(name, string)' oder 'counters(name, string, style)'. Der generierte Text ist der Wert aller Zähler mit dem angegebenen Namen im Bereich an dem angegebenen Pseudo-Element, von außen nach innen, getrennt durch die angegebene Zeichenfolge. Die Zähler werden im angegebenen list-style-type gerendert (decimal standardmäßig).

<quote>

Der <quote>-Datentyp umfasst sprach- und positionsabhängige Schlüsselwörter:

open-quote und close-quote

Diese Werte werden durch die entsprechenden Zeichenfolgen aus der quotes-Eigenschaft ersetzt.

no-open-quote und no-close-quote

Fügt keinen Inhalt ein, aber erhöht (verringert) die Verschachtelungsstufe für Anführungszeichen.

<target>

Der <target>-Datentyp umfasst drei Ziel-Funktionen, <target-counter()>, <target-counters()> und <target-text()>, die Querverweise erstellen, die vom Zielende eines Links stammen. Siehe Formal Syntax.

<leader()>

Der <leader()>-Datentyp umfasst eine Führungsfunktion: leader( <leader-type> ). Diese Funktion akzeptiert die Schlüsselwortwerte dotted, solid oder space (entspricht leader("."), leader("_") und leader(" "), bzw.) oder eine <string> als Parameter. Wenn sie unterstützt wird und als Wert für content verwendet wird, wird der bereitgestellte leader-typ als sich wiederholendes Muster eingefügt, das visuell den Inhalt über eine horizontale Linie verbindet.

attr(x)

Die attr(x) CSS-Funktion ruft den Wert eines Attributs des ausgewählten Elements oder des Pseudo-Elements ab. Der Wert des Attributs x des Elements ist eine uninterpretierte Zeichenkette, die den Attributnamen darstellt. Wenn kein Attribut x vorhanden ist, wird eine leere Zeichenkette zurückgegeben. Die Groß-/Kleinschreibungsabhängigkeit des Attributnamen-Parameters hängt von der Dokumentensprache ab.

alternativer Text: / <string> | <counter> | attr()

Alternativer Text kann für ein Bild oder für alle <content-list>-Elemente angegeben werden, indem ein Schrägstrich und dann eine Kombination aus Zeichenfolgen, Zählern und attr()-Funktionen angehängt werden. Der alternative Text ist für die Sprachausgabe von Bildschirmlesegeräten vorgesehen, kann aber auch in einigen Browsern angezeigt werden.

Formale Definition

Anfangswertnormal
Anwendbar aufAll elements, tree-abiding pseudo-elements, and page margin boxes
VererbtNein
Berechneter WertBei Elementen ist der berechnete Wert immer normal. Falls bei ::before und ::after normal angegeben ist, ist der berechnete Wert none. Ansonsten, für URI Werte die absolute URI; für attr() Werte der resultierende String; für andere Schlüsselwörter wie angegeben.
Animationstypdiskret

Formale Syntax

content = 
normal |
none |
[ <content-replacement> | <content-list> ] [ / [ <string> | <counter> | <attr()> ]+ ]? |
<element()>

<content-replacement> =
<image>

<content-list> =
[ <string> | <image> | <attr()> | contents | <quote> | <leader()> | <target> | <string()> | <content()> | <counter> ]+

<counter> =
<counter()> |
<counters()>

<attr()> =
attr( <attr-name> <attr-type>? , <declaration-value>? )

<element()> =
element( <id-selector> )

<image> =
<url> |
<image()> |
<image-set()> |
<cross-fade()> |
<element()> |
<gradient>

<quote> =
open-quote |
close-quote |
no-open-quote |
no-close-quote

<leader()> =
leader( <leader-type> )

<target> =
<target-counter()> |
<target-counters()> |
<target-text()>

<string()> =
string( <custom-ident> , [ first | start | last | first-except ]? )

<content()> =
content( [ text | before | after | first-letter | marker ]? )

<counter()> =
counter( <counter-name> , <counter-style>? )

<counters()> =
counters( <counter-name> , <string> , <counter-style>? )

<attr-name> =
[ <ident-token>? '|' ]? <ident-token>

<attr-type> =
type( <syntax> ) |
raw-string |
number |
<attr-unit>

<id-selector> =
<hash-token>

<image()> =
image( <image-tags>? [ <image-src>? , <color>? ]! )

<image-set()> =
image-set( <image-set-option># )

<cross-fade()> =
cross-fade( <cf-image># )

<leader-type> =
dotted |
solid |
space |
<string>

<target-counter()> =
target-counter( [ <string> | <url> ] , <custom-ident> , <counter-style>? )

<target-counters()> =
target-counters( [ <string> | <url> ] , <custom-ident> , <string> , <counter-style>? )

<target-text()> =
target-text( [ <string> | <url> ] , [ content | before | after | first-letter ]? )

<counter-name> =
<custom-ident>

<counter-style> =
<counter-style-name> |
<symbols()>

<syntax> =
'*' |
<syntax-component> [ <syntax-combinator> <syntax-component> ]* |
<syntax-string>

<attr-unit> =
<custom-ident>

<image-tags> =
ltr |
rtl

<image-src> =
<url> |
<string>

<image-set-option> =
[ <image> | <string> ] [ <resolution> || type( <string> ) ]?

<cf-image> =
[ <image> | <color> ] &&
<percentage [0,100]>?

<counter-style-name> =
<custom-ident>

<symbols()> =
symbols( <symbols-type>? [ <string> | <image> ]+ )

<syntax-component> =
<syntax-single-component> <syntax-multiplier>? |
'<' transform-list '>'

<syntax-combinator> =
'|'

<syntax-string> =
<string>

<symbols-type> =
cyclic |
numeric |
alphabetic |
symbolic |
fixed

<syntax-single-component> =
'<' <syntax-type-name> '>' |
<ident>

<syntax-multiplier> =
'#' |
'+'

<syntax-type-name> =
angle |
color |
custom-ident |
image |
integer |
length |
length-percentage |
number |
percentage |
resolution |
string |
time |
url |
transform-function

Barrierefreiheit

CSS-generierter Inhalt ist nicht im DOM enthalten. Aus diesem Grund wird er nicht im Barrierefreiheitsbaum dargestellt und bestimmte Kombinationen von unterstützenden Technologien/Browsern werden ihn nicht ankündigen. Wenn der Inhalt Informationen vermittelt, die zum Verständnis des Zwecks der Seite entscheidend sind, ist es besser, ihn im Hauptdokument zu platzieren.

Wenn eingefügter Inhalt nicht dekorativ ist, überprüfen Sie, ob die Informationen den unterstützenden Technologien zur Verfügung stehen und auch verfügbar sind, wenn CSS deaktiviert ist.

Beispiele

Die ersten fünf Beispiele erstellen generierten Inhalt auf Pseudo-Elementen. Die letzten drei sind Beispiele für das Ersetzen von Elementen.

Hinzufügen von Zeichenfolgen basierend auf der Klasse eines Elements

Dieses Beispiel fügt generierten Text nach dem Text von Elementen ein, die einen bestimmten Klassennamen haben. Der Text wird rot gefärbt.

HTML

html
<h2>Paperback Best Sellers</h2>
<ol>
  <li>Political Thriller</li>
  <li class="new-entry">Halloween Stories</li>
  <li>My Biography</li>
  <li class="new-entry">Vampire Romance</li>
</ol>

CSS

css
.new-entry::after {
  content: " New!"; /* The leading space creates separation
                       between the DOM node's content and the generated content
                       being added. */
  color: red;
}

Ergebnis

Zitate

Dieses Beispiel fügt unterschiedlich gefärbte Anführungszeichen um Zitate ein.

HTML

html
<p>
  According to Sir Tim Berners-Lee,
  <q cite="http://www.w3.org/People/Berners-Lee/FAQ.html#Internet">
    I was lucky enough to invent the Web at the time when the Internet already
    existed - and had for a decade and a half.
  </q>
  We must understand that there is nothing fundamentally wrong with building on
  the contributions of others.
</p>
<p lang="fr-fr">
  Mais c'est Magritte qui a dit,
  <q lang="fr-fr"> Ceci n'est pas une pipe. </q>.
</p>

CSS

css
q {
  color: blue;
}

q::before,
q::after {
  font-size: larger;
  color: red;
  background: #cccccc;
}

q::before {
  content: open-quote;
}

q::after {
  content: close-quote;
}

Ergebnis

Beachten Sie, dass der Typ der erzeugten Anführungszeichen auf der Sprache basiert. Browser fügen standardmäßig öffnende und schließende Anführungszeichen vor und nach <q>-Elementen hinzu, daher würden die Anführungszeichen in diesem Beispiel erscheinen, ohne dass sie explizit gesetzt wurden. Sie hätten durch das Setzen der jeweiligen content-Eigenschaftswerte auf no-open-quote und no-close-quote, oder durch Setzen beider auf none, deaktiviert werden können. Sie können auch durch Setzen der quotes-Eigenschaft auf none deaktiviert werden.

Hinzufügen von Text zu Listenelementzählern

Dieses Beispiel kombiniert einen Zähler, der zwischen zwei <string>s eingefügt wird, vor allen Listenelementen, wodurch ein detaillierteres Markierungszeichen für Listenelemente (<li>) innerhalb ungeordneter Listen (<ol>) erstellt wird.

HTML

html
<ol>
  <li>Dogs</li>
  <li>Cats</li>
  <li>
    Birds
    <ol>
      <li>Owls</li>
      <li>Ducks</li>
      <li>Flightless</li>
    </ol>
  </li>
  <li>Marsupials</li>
</ol>

CSS

css
ol {
  counter-reset: items;
  margin-left: 2em;
}
li {
  counter-increment: items;
}
li::marker {
  content: "item " counters(items, ".", numeric) ": ";
}

Ergebnis

Der generierte Inhalt auf dem Markierungszeichen jedes Listenelements fügt den Text "item " als Präfix hinzu, einschließlich eines Leerzeichens, um das Präfix vom Zähler zu trennen, dem ": ", Doppelpunkt und ein weiteres Leerzeichen folgen. Die counters()-Funktion definiert einen numerischen items-Zähler, bei dem die Nummern verschachtelter geordneter Listen in den meisten Browsern durch einen Punkt (.) getrennt sind.

Zeichenfolgen mit Attributwerten

Dieses Beispiel ist nützlich für Druck-Stylesheets. Es wird ein Attributselektor verwendet, um jeden vollständig qualifizierten sicheren Link auszuwählen und den Wert des href-Attributs nach dem Linktext als Inhalt des ::after-Pseudo-Elements hinzuzufügen.

HTML

html
<ul>
  <li><a href="https://mozilla.com">Mozilla</a></li>
  <li><a href="/">MDN</a></li>
  <li><a href="https://openwebdocs.org">OpenWebDocs</a></li>
</ul>

CSS

css
a[href^="https://"]::after {
  content: " (URL: " attr(href) ")";
  color: darkgreen;
}

Ergebnis

Der generierte Inhalt ist der Wert des href-Attributs, vorangestellt von "URL: ", mit einem Leerzeichen, alles in Klammern.

Hinzufügen eines Bildes mit alternativem Text

Dieses Beispiel fügt ein Bild vor allen Links ein. Zwei content-Werte werden bereitgestellt. Der spätere content-Wert enthält ein Bild mit alternativem Text, das von einem Bildschirmleser als Sprache ausgegeben werden kann.

HTML

html
<a href="https://www.mozilla.org/en-US/">Mozilla Home Page</a>

CSS

Der CSS-Code, um das Bild anzuzeigen und den alternativen Text festzulegen, wird unten gezeigt. Dieser setzt auch die Schriftart und Farbe für den Inhalt.

css
a::before {
  content: url("https://mozorg.cdn.mozilla.net/media/img/favicon.ico") /
    " MOZILLA: ";
}

Ergebnis

Hinweis: Der alternative Textwert wird im Barrierefreiheitsbaum des Browsers angezeigt. Siehe den Abschnitt Siehe auch für browserspezifische Barrierefreiheits-Panels.

Wenn Sie einen Bildschirmleser verwenden, sollte er das Wort "MOZILLA" sprechen, wenn er das Bild erreicht. Sie können das ::before-Pseudo-Element mit Ihrem Entwicklertools-Auswahlwerkzeug auswählen und den zugänglichen Namen im Barrierefreiheits-Panel anzeigen.

Einbeziehen von Zählern im alternativen Text

Dieses Beispiel zeigt eine Liste von Links zu einer Reihe von Buchkapiteln und zeigt, wie generierter Inhalt verwendet werden kann, um ein Buchsymbol und einen Zähler vor jedem hinzuzufügen, mit alternativem Text, der das Wort "Kapitel" anstelle des Symbols enthält. Dies führt dazu, dass das Wort "Kapitel" und die Kapitelnummer vor dem Text im zugänglichen Namen jedes Links stehen, der Bildschirmleser Benutzern angekündigt wird, wenn der Link fokussiert wird.

HTML

Wir fügen eine Überschrift gefolgt von einer geordneten Liste von Kapitel-Titellinks mit <ol>, <li> und <a>-Elementen ein.

html
<h2>Chapter list</h2>
<ol>
  <li><a href="#">A stranger calls</a></li>
  <li><a href="#">Two owls</a></li>
  <li><a href="#">Dinner was bland</a></li>
  <li><a href="#">Three owls</a></li>
  <li><a href="#">No-one answered the door</a></li>
  <li><a href="#">The stranger leaves</a></li>
  <li><a href="#">Bedtime</a></li>
</ol>

CSS

Der CSS-Code enthält ein counter-reset für den chapter-Zähler auf dem <ol>-Element. Wir inkrementieren den chapter-Zähler auf jedem <li>-Element mit counter-increment und entfernen die Listenmarkierungen, indem wir den Wert von list-style-type auf none setzen.

css
ol {
  counter-reset: chapter;
}

li {
  counter-increment: chapter;
  list-style-type: none;
}

Als nächstes setzen wir die ::before-Pseudo-Elemente der <a>-Elemente auf generierten content gleich einem Buch-Emoji, um ein Kapitel darzustellen, plus dem aktuellen chapter-Zählerwert und einem Leerzeichen, damit der generierte Inhalt vom Linktext getrennt ist. Schließlich setzen wir den alternativen Text des generierten Inhalts auf den aktuellen chapter-Zählerwert, dem das Wort "Kapitel" vorausgeht.

css
a::before {
  content: "📖 " counter(chapter) " " / "Chapter " counter(chapter);
}

Ergebnis

Wenn ein Bildschirmleser zu einem Link innerhalb der Liste navigiert, kündigen unterstützende Browser "Kapitel" gefolgt von der aktuellen Zählnummer, gefolgt vom Linktext an, zum Beispiel, "Kapitel 1 Ein Fremder ruft an" und "Kapitel 2 Zwei Eulen".

Ersetzen von Elementen mit URL

Dieses Beispiel ersetzt ein normales Element! Der Inhalt des Elements wird durch ein SVG unter Verwendung des <url>-Typs ersetzt.

Pseudo-Elemente werden bei Ersetzungselementen nicht gerendert. Da dieses Element ersetzt wird, werden alle übereinstimmenden ::after oder ::before nicht generiert oder angewendet. Um dies zu demonstrieren, fügen wir einen ::after-Deklarationsblock hinzu, der versucht, die id als generierten Inhalt hinzuzufügen. Dieses Pseudo-Element wird nicht generiert, da das Element ersetzt wurde.

HTML

html
<div id="replaced">This content is replaced!</div>

CSS

css
#replaced {
  content: url("mdn.svg");
}

/* will not show if element replacement is supported */
div::after {
  content: " (" attr(id) ")";
}

Ergebnis

Beim Generieren von Inhalten auf regulären Elementen (anstatt nur auf Pseudo-Elementen) wird das gesamte Element ersetzt. Das bedeutet, dass ::before und ::after Pseudo-Elemente nicht generiert werden.

Ersetzen von Elementen mit <gradient>

Dieses Beispiel zeigt, wie Inhalte eines Elements durch jeden <image>-Typ ersetzt werden können, in diesem Fall durch einen CSS-Gradienten. Die Inhalte des Elements werden durch einen linear-gradient() ersetzt. Wir stellen alternativen Text bereit, da alle Bilder für die Barrierefreiheit beschrieben werden sollten.

HTML

html
<div id="replaced">I disappear</div>

CSS

css
div {
  border: 1px solid;
  background-color: #cccccc;
  min-height: 100px;
  min-width: 100px;
}

#replaced {
  content: repeating-linear-gradient(blue 0, orange 10%) /
    "Gradients and alt text are supported";
}

Ergebnis

Überprüfen Sie die Browser-Kompatibilitätstabelle. Alle Browser unterstützen Gradienten und alle Browser unterstützen das Ersetzen von Elementen durch Bilder, aber nicht alle Browser unterstützen Gradienten als content-Wert.

Ersetzen von Elementen mit image-set()

Dieses Beispiel ersetzt den Inhalt eines Elements mit einem image-set(). Wenn das Display des Benutzers eine normale Auflösung hat, wird das 1x.png angezeigt. Displays mit höherer Auflösung zeigen das 2x.png-Bild an.

HTML

html
<div id="replaced">I disappear!</div>

CSS

css
#replaced {
  content: image-set(
    "1x.png" 1x,
    "2x.png" 2x
  ) / "DPI";
}

Ergebnis

Spezifikationen

Spezifikation
CSS Generated Content Module Level 3
# propdef-content

Browser-Kompatibilität

Siehe auch