content
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
* Some parts of this feature may have varying levels of support.
Die content-Eigenschaft in CSS ersetzt den Inhalt mit einem generierten Wert. Sie kann genutzt werden, um zu definieren, was in einem Element oder Pseudo-Element gerendert wird. Bei Elementen gibt die content-Eigenschaft an, ob das Element normal (normal oder none) gerendert wird oder mit einem Bild (und zugehörigem "alt"-Text) ersetzt wird. Für Pseudo-Elemente und Randboxen definiert content den Inhalt als Bilder, Text, beides oder keines, was bestimmt, ob das Element überhaupt gerendert wird.
Objekte, die mithilfe der content-Eigenschaft eingefügt werden, sind anonyme Replaced Elements.
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
/* 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";
/* <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:
noneodernormal.normalist der Standardwert der Eigenschaft. <content-replacement>, wenn ein DOM-Knoten ersetzt wird.<content-replacement>ist immer ein<image>.- Ein
<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 Alternativtextwert eines
<string>oder<counter>, dem ein Schrägstrich (/) vorangestellt ist.
Die oben genannten Schlüsselwörter und Datentypen werden im Folgenden ausführlicher beschrieben:
none-
Wird es auf ein Pseudo-Element angewendet, wird das Pseudo-Element nicht generiert. Wird es auf ein Element angewendet, hat der Wert keine Wirkung.
normal-
Bei den
::beforeund::afterPseudo-Elementen wird dieser Wert zunoneberechnet. Bei anderen Pseudo-Elementen wie::marker,::placeholderoder::file-selector-buttonerzeugt er den initialen (oder normalen) Inhalt des Elements. Bei regulären Elementen oder Randboxen berechnet er sich zu den Nachkommen des Elements. Dies ist der Standardwert. <string>-
Eine Zeichenfolge in passenden einfachen oder doppelten Anführungszeichen. Mehrere Zeichenfolgenwerte werden verkettet (es gibt keinen Verkettungsoperator in CSS).
<image>-
Ein
<image>, das ein darzustellendes Bild darstellt. Dies kann einem<url>,image-set(), oder<gradient>Datentyp entsprechen oder ein Teil der Webseite selbst sein, definiert durch dieelement()-Funktion. <counter>-
Der
<counter>-Wert ist ein CSS Counter, im Allgemeinen eine Zahl, die durch Berechnungen definiert wird, die von den Eigenschaften<counter-reset>und<counter-increment>vorgegeben werden. Er kann entweder durch diecounter()- odercounters()-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 Geltungsbereich des gegebenen Pseudo-Elements. Er ist im angegebenen<list-style-type>(decimalstandardmäßig) formatiert. 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 gegebenen Namen im Geltungsbereich des gegebenen Pseudo-Elements, vom äußersten zum innersten, getrennt durch die angegebene Zeichenfolge. Die Zähler werden im angegebenen<list-style-type>(decimalstandardmäßig) dargestellt.
<quote>-
Der
<quote>Datentyp enthält sprach- und positionsabhängige Schlüsselwörter:open-quoteundclose-quote-
Diese Werte werden durch die entsprechende Zeichenfolge aus der
quotesEigenschaft ersetzt. no-open-quoteundno-close-quote-
Fügt keinen Inhalt ein, erhöht (verringert) jedoch die Verschachtelungsebene für Anführungszeichen.
<target>-
Der
<target>Datentyp umfasst drei Ziel-Funktionen,<target-counter()>,<target-counters()>und<target-text()>, die Querverweise aus dem Zielende eines Links erstellen. Siehe Formale Syntax. <leader()>-
Der
<leader()>Datentyp enthält eine Leader-Funktion:leader( <leader-type> ). Diese Funktion akzeptiert die Schlüsselwertdotted,solidoderspace(entsprichtleader("."),leader("_")undleader(" ")), oder einen<string>als Parameter. Wenn unterstützt und als Wert fürcontentverwendet, wird der bereitgestellte Leader-Typ als sich wiederholendes Muster eingefügt, das den Inhalt über eine horizontale Linie visuell verbindet. attr(x)-
Die
attr(x)CSS-Funktion ruft den Wert eines Attributs des ausgewählten Elements oder des Ursprungs-Elements des Pseudo-Elements ab. Der Wert des Attributsxdes Elements ist eine unverarbeitete Zeichenfolge, die den Attributnamen darstellt. Gibt es kein Attributx, wird eine leere Zeichenfolge zurückgegeben. Die Groß-/Kleinschreibung des Attributnamenparameters hängt von der Dokumentsprache ab. - Alternativtext:
/ <string> | <counter> -
Für ein Bild oder irgendein
<content-list>Element kann ein Alternativtext angegeben werden, indem ein Schrägstrich und dann eine Zeichenfolge oder ein Counter angehängt wird. Der Alternativtext ist für die Sprachausgabe durch Screenreader gedacht, kann aber auch in einigen Browsern angezeigt werden. Die/ <string>oder/ <counter>Datentypen spezifizieren den "Alt-Text" für das Element.
Formale Definition
| Anfangswert | normal |
|---|---|
| Anwendbar auf | All elements, tree-abiding pseudo-elements, and page margin boxes |
| Vererbt | Nein |
| Berechneter Wert | Bei 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. |
| Animationstyp | diskret |
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-style> =
<counter-style-name> |
<symbols()>
<syntax> =
'*' |
<syntax-component> [ <syntax-combinator> <syntax-component> ]* |
<syntax-string>
<image-tags> =
ltr |
rtl
<image-src> =
<url> |
<string>
<image-set-option> =
[ <image> | <string> ] [ <resolution> || type( <string> ) ]?
<cf-image> =
[ <image> | <color> ] &&
<percentage [0,100]>?
<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
Durch CSS generierter Inhalt ist nicht im DOM enthalten. Daher wird er nicht im Barrierefreiheitsbaum dargestellt und bestimmte Kombinationen aus assistiver Technik/Browsern werden ihn nicht ankündigen. Wenn der Inhalt Informationen vermittelt, die für das Verständnis des Zwecks der Seite wesentlich sind, ist es besser, ihn im Hauptdokument zu inkludieren.
Wenn der eingefügte Inhalt nicht dekorativ ist, prüfen Sie, dass die Informationen assistiven Technologien bereitgestellt werden und auch verfügbar sind, wenn CSS ausgeschaltet ist.
- Barrierefreiheitssupport für CSS generierten Inhalt – Tink (2015)
- WCAG, Richtlinie 1.3: Erstellen Sie Inhalte, die auf verschiedene Weise präsentiert werden können
- Verstehen des Erfolgskriteriums 1.3.1 | W3C Versteht WCAG 2.0
- Fehler des Erfolgskriteriums 1.3.1: Einfügen von nicht-dekorativem generiertem Inhalt Techniken für WCAG 2.0
Beispiele
Die ersten fünf Beispiele erzeugen generierten Inhalt auf Pseudo-Elementen. Die letzten drei sind Beispiele für das Ersetzen von Elementen.
Anfügen von Zeichenfolgen basierend auf der Klassifizierung eines Elements
Dieses Beispiel fügt generierten Text nach dem Text von Elementen mit einem bestimmten Klassennamen ein. Der Text wird rot gefärbt.
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
.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
Anführungszeichen
Dieses Beispiel fügt unterschiedlich gefärbte Anführungszeichen um Zitate ein.
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
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 die Art der generierten Anführungszeichen auf der Sprache basiert. Browser fügen standardmäßig automatisch offene und geschlossene Anführungszeichen vor und nach <q>-Elementen hinzu, sodass die Anführungszeichen in diesem Beispiel erscheinen würden, ohne dass sie explizit gesetzt werden. Sie könnten ausgeschaltet werden, indem die jeweiligen content-Eigenschaften auf no-open-quote und no-close-quote gesetzt werden oder indem beide auf none gesetzt werden. Sie können auch ausgeschaltet werden, indem die quotes-Eigenschaft auf none gesetzt wird.
Hinzufügen von Text zu Listenelementzählern
Dieses Beispiel kombiniert einen Zähler zwischen zwei <string>s, die allen Listenelementen vorangestellt werden, und erstellt somit detailliertere Markierungen für Listenelemente (<li>) innerhalb ungeordneter Listen (<ol>).
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
ol {
counter-reset: items;
margin-left: 2em;
}
li {
counter-increment: items;
}
li::marker {
content: "item " counters(items, ".", numeric) ": ";
}
Ergebnis
Der generierte Inhalt auf jeder Listenmarkierung fügt den Text "item " als Präfix hinzu, einschließlich eines Leerzeichens, um das Präfix vom Zähler zu trennen, dem ": " folgt, ein Doppelpunkt und ein weiteres Leerzeichen. Die counters()-Funktion definiert einen numerischen items-Zähler, wobei die Nummern der verschachtelten geordneten Listen in den meisten Browsern mit einem Punkt (.) getrennt werden.
Zeichenfolgen mit Attributwerten
Dieses Beispiel ist nützlich für Druckstile. Es verwendet einen Attributselektor, 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
<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
a[href^="https://"]::after
{
content: " (URL: " attr(href) ")";
color: darkgreen;
}
Ergebnis
Der generierte Inhalt ist der Wert des href-Attributs, dem "URL: " vorausgeht, mit einem Leerzeichen, alles in Klammern.
Hinzufügen eines Bildes mit Alternativtext
Dieses Beispiel fügt ein Bild vor allen Links ein. Zwei content-Werte werden bereitgestellt. Der spätere content-Wert umfasst ein Bild mit Alternativtext, der von einem Screenreader als Sprache ausgegeben werden kann.
HTML
<a href="https://www.mozilla.org/en-US/">Mozilla Home Page</a>
CSS
Der CSS-Code, um das Bild zu zeigen und den Alternativtext zu setzen, ist unten gezeigt. Dieser stellt auch die Schriftart und Farbe für den Inhalt ein.
a::before {
content: url("https://mozorg.cdn.mozilla.net/media/img/favicon.ico") /
" MOZILLA: ";
}
Ergebnis
Hinweis: Der Alternativtextwert wird im Barrierefreiheitsbaum des Browsers sichtbar gemacht. Siehe Abschnitt Siehe auch für browserspezifische Barrierefreiheitspanels.
Bei Nutzung eines Screenreaders sollte er das Wort "MOZILLA" aussprechen, wenn er das Bild erreicht. Sie können das ::before Pseudo-Element mit Ihrem Entwickler-Tool-Auswahlwerkzeug auswählen und den accessible name im Barrierefreiheitsteil betrachten.
Elementersatz mit URL
Dieses Beispiel ersetzt ein reguläres Element! Der Inhalt des Elements wird mit einem SVG unter Verwendung des <url> Typs ersetzt.
Pseudo-Elemente werden auf ersetzten Elementen nicht gerendert. Da dieses Element ersetzt ist, werden keine passenden ::after oder ::before erzeugt 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 erzeugt, da das Element ersetzt ist.
HTML
<div id="replaced">This content is replaced!</div>
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 erzeugt werden.
Elementersatz mit <gradient>
Dieses Beispiel zeigt, wie die Inhalte eines Elements durch jeden Typ von <image> ersetzt werden können, in diesem Fall ein CSS-Gradient. Die Inhalte des Elements werden durch einen linear-gradient() ersetzt. Wir stellen Alt-Text bereit, weil alle Bilder zur Barrierefreiheit beschrieben werden sollten.
HTML
<div id="replaced">I disappear</div>
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ätsübersicht. 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.
Elementersatz mit image-set()
Dieses Beispiel ersetzt den Inhalt eines Elements durch ein image-set(). Wenn das Display des Benutzers eine normale Auflösung hat, wird das 1x.png angezeigt. Bildschirme mit einer höheren Auflösung zeigen das 2x.png-Bild an.
HTML
<div id="replaced">I disappear!</div>
CSS
#replaced {
content: image-set(
"1x.png" 1x,
"2x.png" 2x
) / "DPI";
}
Ergebnis
Spezifikationen
| Specification |
|---|
| CSS Generated Content Module Level 3> # content-property> |
Browser-Kompatibilität
Siehe auch
::after::before::marker::scroll-button()::scroll-marker:target-currentcontainquotes<gradient>image-set()<url>- Replaced elements
- CSS generierter Inhalt Modul
- CSS Listen und Zähler Modul
- Barrierefreiheitspanels: Firefox Accessibility inspector, Chrome Accessibility pane, und Safari Accessibility tree