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

View in English Always switch to English

anchor() CSS-Funktion

Baseline 2026
Neu verfügbar
*

Seit Januar 2026 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.

Want more browser support for this feature? Tell us why.

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

Die anchor() CSS Funktion kann innerhalb der Werte einer anker-positionierten Einbettungseigenschaft verwendet werden und gibt einen Längenwert relativ zur Position der Kanten des zugehörigen Ankerelements zurück.

Syntax

css
/* side or percentage */
top: anchor(bottom);
top: anchor(50%);
top: calc(anchor(bottom) + 10px)
inset-block-end: anchor(start);

/* side of named anchor */
top: anchor(--my-anchor bottom);
inset-block-end: anchor(--my-anchor start);

/* side of named anchor with fallback */
top: anchor(--my-anchor bottom, 50%);
inset-block-end: anchor(--my-anchor start, 200px);
left: calc(anchor(--my-anchor right, 0%) + 10px);

Parameter

Die Syntax der anchor() Funktion ist wie folgt:

anchor(<anchor-name> <anchor-side>, <length-percentage>)

Die Parameter sind:

<anchor-name> Optional

Der Wert der anchor-name Eigenschaft eines Ankerelements, auf das Sie die Seite des Elements relativ ausrichten möchten. Dies ist ein <dashed-ident> Wert. Wenn weggelassen, wird der Standardanker des Elements verwendet, der in seiner position-anchor Eigenschaft referenziert wird oder über das anchor HTML-Attribut mit dem Element verbunden ist.

Hinweis: Die Angabe eines <anchor-name> innerhalb einer anchor() Funktion verknüpft kein Element mit einem Anker; es positioniert lediglich das Element relativ zu diesem Anker. Die CSS-Eigenschaft position-anchor oder das anchor HTML-Attribut ist weiterhin erforderlich, um die Verknüpfung herzustellen.

<anchor-side>

Gibt die Seite des Ankers oder den relativen Abstand von der start-Seite an, zu der das Element relativ positioniert ist. Wenn ein physischer oder logischer Wert verwendet wird, der nicht mit der Einbettungseigenschaft kompatibel ist, auf die anchor() gesetzt ist, wird der Ausweichwert verwendet. Gültige Werte sind:

top

Die Oberseite des Ankerelements.

Die rechte Seite des Ankerelements.

bottom

Die Unterseite des Ankerelements.

left

Die linke Seite des Ankerelements.

inside

Dieselbe Seite wie die Einbettungseigenschaft.

outside

Die gegenüberliegende Seite der Einbettungseigenschaft.

start

Der logische Anfang des umgebenden Blocks des Ankerelements entlang der Achse der Einbettungseigenschaft, auf der die anchor() Funktion gesetzt ist.

end

Das logische Ende des umgebenden Blocks des Ankerelements entlang der Achse der Einbettungseigenschaft, auf der die anchor() Funktion gesetzt ist.

self-start

Der logische Anfang des Inhalts des Ankerelements entlang der Achse der Einbettungseigenschaft, auf der die anchor() Funktion gesetzt ist.

self-end

Das logische Ende des Inhalts des Ankerelements entlang der Achse der Einbettungseigenschaft, auf der die anchor() Funktion gesetzt ist.

center

Die Mitte der Achse der Einbettungseigenschaft, auf der die anchor() Funktion gesetzt ist.

<percentage>

Gibt den Abstand als Prozentsatz vom Anfang des Inhalts des Elements entlang der Achse der Einbettungseigenschaft an, auf der die anchor() Funktion gesetzt ist.

<length-percentage> Optional

Gibt einen Ausweichwert an, auf den die Funktion zurückgreifen sollte, falls die anchor() Funktion ansonsten ungültig wäre.

Rückgabewert

Gibt einen <length> Wert zurück.

Beschreibung

Die anchor() Funktion ermöglicht es, ein Element relativ zu den Kanten eines Ankerelements zu positionieren. Sie ist nur innerhalb von Einbettungseigenschaft Werten gültig, die auf absolut oder fest positionierten Elementen gesetzt sind.

Sie gibt einen <length> Wert zurück, der den Abstand von der Kante des umgebenden Blocks, die der Einbettungseigenschaft entspricht, zur Kante des Ankerelements angibt, die durch den <anchor-side> Wert spezifiziert ist. Da sie einen <length> zurückgibt, kann sie innerhalb von anderen CSS-Funktionen verwendet werden, die Längenwerte akzeptieren, einschließlich calc(), clamp() usw.

Existiert kein Anker mit dem durch den <anchor-name> angegebenen Namen oder hat das positionierte Element keinen mit ihm verbundenen Anker (z.B. über die position-anchor Eigenschaft), wird der erste Parameter als ungültig angesehen, und der Ausweichwert <length-percentage> wird verwendet, falls vorhanden. Zum Beispiel, wenn top: anchor(bottom, 50px) auf das positionierte Element angewendet wird, aber kein Anker zugeordnet ist, wird der Ausweichwert verwendet und top würde einen berechneten Wert von 50px erhalten.

Für detaillierte Informationen zu Ankerfunktionen und deren Verwendung siehe das CSS-Ankerpositionierungs Modul und den Verwendung der CSS-Ankerpositionierung Leitfaden.

Eigenschaften, die anchor() Funktionswerte akzeptieren

Die CSS Einbettungseigenschaften, die eine anchor() Funktion als Wertkomponente akzeptieren, umfassen:

Kompatibilität von Einbettungseigenschaften und <anchor-side> Werten

Wenn Sie eine anchor() Funktion innerhalb eines Einbettungseigenschaftswerts verwenden, muss der innerhalb der anchor() Funktion angegebene <anchor-side> Parameter mit der Achse kompatibel sein, auf der die Einbettungseigenschaft liegt.

Das bedeutet, dass physische <anchor-side> Werte innerhalb der Werte physischer Einbettungseigenschaften verwendet werden können, wenn die Eigenschaft dieselbe Achsenrichtung wie das <anchor-side> hat. Mit anderen Worten sind die Seiten top und bottom nicht innerhalb der Werte der left und right Eigenschaften valide, und die Seiten left und right sind innerhalb der top und bottom Werte nicht gültig. Zum Beispiel ist top: anchor(bottom) in Ordnung, da beide vertikale Werte sind, aber top: anchor(left) ist nicht gültig, da left ein horizontaler Wert ist. Wenn top: anchor(left, 50px) angegeben würde, würde der Ausweichwert verwendet, so dass top einen berechneten Wert von 50px erhalten würde. Wenn kein Ausweichwert vorhanden ist, verhält sich die Einbettungseigenschaft so, als ob sie auf auto gesetzt wäre.

Sie können logische <anchor-side> Werte sowohl innerhalb logischer als auch physischer Einbettungseigenschaften verwenden, da logische <anchor-side> Werte relativ zur relevanten Achse der Einbettungseigenschaft sind, unabhängig davon, ob die Eigenschaft logisch oder relativ ist. Zum Beispiel funktionieren top: anchor(start), top: anchor(self-end), inset-block-start: anchor(end) und inset-inline-end: anchor(self-start) alle problemlos.

Die Situation wird komplizierter, wenn physische <anchor-side> Parameter innerhalb logischer Einbettungseigenschaftswerte verwendet werden, da die physische Seite die Achse entsprechen muss, zu der die Einbettungseigenschaft im aktuellen Schreibmodus relevant ist. Beispielsweise:

  • In einem horizontalen Schreibmodus ist die Blockrichtung von oben nach unten; daher funktioniert inset-block-end: anchor(bottom), aber inset-block-end: anchor(left) ist inkompatibel. Wenn inset-block-end: anchor(left, 50px) gesetzt wäre, läge der berechnete Wert bei 50px und das positionierte Element wäre 50px vom Blockende (unten) seines nächsten positionierten Vorgängers oder des Viewports entfernt, abhängig vom gesetzten position-Wert.
  • In einem vertikalen Schreibmodus ist die Blockrichtung von rechts nach links oder von links nach rechts; daher funktioniert inset-block-end: anchor(left), aber inset-block-end: anchor(top) ist inkompatibel. Wenn inset-block-end: anchor(top, 50px) gesetzt wäre, läge der berechnete Wert bei 50px und das positionierte Element wäre 50px vom Blockende (links oder rechts, abhängig vom Schreibmodus) seines nächsten positionierten Vorgängers oder des Viewports entfernt, abhängig vom gesetzten position-Wert.

Um das Potenzial für Verwirrungen mit diesen Werten zu mildern, wird empfohlen, logische Einbettungseigenschaften mit logischen <anchor-side> Werten zu verwenden und physische Einbettungseigenschaften mit physischen <anchor-side> Werten. Sie sollten die Verwendung logischer Werte bevorzugen, wann immer dies möglich ist, da sie besser für die Internationalisierung geeignet sind.

Die center und <percentage> Werte sind innerhalb der anchor() Funktion in allen logischen und physischen Einbettungseigenschaften gültig.

Die folgende Tabelle listet die Einbettungseigenschaften und die mit ihnen kompatiblen <anchor-side> Parameterwerte auf. Wir haben nur die langen Einbettungseigenschaften aufgelistet; diese umfassen die Kurzform der Einbettungseigenschaftswerte.

Einbettungseigenschaft Kompatibler <anchor-side> Wert
Alle center
Alle <percentage>
top und bottom top, bottom, start, end, self-start, self-end
left und right left, right, start, end, self-start, self-end
inset-block-start und inset-block-end start, end, self-start, und self-end
top und bottom in horizontalen Schreibmodi
left und right in vertikalen Schreibmodi
inset-inline-start und inset-inline-end start, end, self-start, und self-end
left und right in horizontalen Schreibmodi
top und bottom in vertikalen Schreibmodi

Verwendung von anchor() zur Positionierung von Popovers

Wenn Sie anchor() verwenden, um Popovers zu positionieren, seien Sie sich bewusst, dass die Standardstile für Popovers mit der Position, die Sie erreichen möchten, in Konflikt stehen können. Die üblichen Übeltäter sind die Standardstile für margin und inset, daher ist es ratsam, diese zurückzusetzen:

css
.positionedPopover {
  margin: 0;
  inset: auto;
}

Die CSS-Arbeitsgruppe untersucht Möglichkeiten, um dieses Workaround zu vermeiden.

Verwendung von anchor() innerhalb von calc()

Wenn sich die anchor() Funktion auf eine Seite des Standardankers bezieht, können Sie einen margin einfügen, um bei Bedarf Abstände zwischen den Kanten des Ankers und des positionierten Elements zu schaffen. Alternativ können Sie die anchor() Funktion innerhalb einer calc() Funktion einschließen, um Abstände hinzuzufügen.

Dieses Beispiel positioniert die rechte Kante des positionierten Elements bündig an der linken Kante des Ankerelements und fügt dann einen Rand hinzu, um etwas Platz zwischen den Kanten zu schaffen:

css
.positionedElement {
  right: anchor(left);
  margin-right: 10px;
}

Dieses Beispiel positioniert die logische Block-Endkante des positionierten Elements 10px von der logischen Block-Startkante des Ankerelements entfernt:

css
.positionedElement {
  inset-block-end: calc(anchor(start) + 10px);
}

Positionierung eines Elements relativ zu mehreren Ankern

Sie können ein Element relativ zu mehreren Ankern positionieren, indem Sie innerhalb der anchor() Funktion unterschiedliche <anchor-name> Werte für verschiedene Einbettungseigenschaften desselben Elements angeben (siehe Element positioniert relativ zu mehreren Ankern unten). Dies kann verwendet werden, um nützliche Funktionen wie Zuggriffe an den Ecken eines positionierten Elements zu erstellen, mit denen es in der Größe verändert werden kann.

Während ein positioniertes Element relativ zu mehr als einem Ankerelement positioniert werden kann, ist es nur jemals mit dem einzelnen Anker verbunden, der über seine position-anchor Eigenschaft definiert ist (oder das anchor HTML-Attribut). Dies ist der Anker, mit dem das Element beim Scrollen der Seite mitscrollt; er kann auch verwendet werden, um zu steuern, wann das Element bedingt verborgen wird.

Formale Syntax

<anchor()> = 
anchor( <anchor-name>? &&
<anchor-side> , <length-percentage>? )

<anchor-name> =
<dashed-ident>

<anchor-side> =
inside |
outside |
top |
left |
right |
bottom |
start |
end |
self-start |
self-end |
<percentage> |
center

<length-percentage> =
<length> |
<percentage>

Beispiele

Häufige Nutzung

In diesem Beispiel wird die anchor() Funktion verwendet, um die Höhe eines anker-positionierten Elements auf die Höhe seines Ankers zu setzen, indem die unteren und oberen Kanten auf die unteren und oberen Kanten des Ankers gesetzt werden. Die anchor() Funktion wird dann innerhalb einer calc() Funktion verwendet, um das anker-positionierte Element von seinem Anker zu verschieben.

HTML

Wir fügen ein <div>-Element ein, das wir als unseren Anker setzen, und ein <p>-Element, das wir relativ zu diesem Anker positionieren:

html
<div class="anchor">⚓︎</div>

<p class="positionedElement">This is a positioned element.</p>

CSS

Wir setzen den anchor-name Wert des Ankerelements als Wert der Eigenschaft position-anchor des positionierten Elements ein, um die Elemente zu verknüpfen, und setzen dann drei Einbettungseigenschaften auf das anker-positionierte Element. Die ersten beiden positionieren die obere Kante des Elements bündig zur oberen Kante des Ankers und die untere Kante bündig zur unteren Kante des Ankers. In der dritten Einbettungseigenschaft wird die anchor() Funktion innerhalb einer calc() Funktion verwendet, um die linke Kante des Elements 10px zur rechten Kante des Ankers zu positionieren.

css
.anchor {
  anchor-name: --infobox;
  background: palegoldenrod;
  font-size: 3em;
  width: fit-content;
  border: 1px solid goldenrod;
}

.positionedElement {
  position: absolute;
  position-anchor: --infobox;
  margin: 0;
  top: anchor(top);
  left: calc(anchor(right) + 10px);
  bottom: anchor(bottom);
  background-color: olive;
  border: 1px solid darkolivegreen;
}

Ergebnisse

Vergleich verschiedener <anchor-side> Werte

Dieses Beispiel zeigt ein Element, das relativ zu einem Anker über seine top und left Eigenschaften positioniert ist, die mithilfe von anchor() Funktionen definiert sind. Es enthält auch zwei Drop-Down-Menüs, mit denen Sie die <anchor-side> Werte innerhalb dieser anchor() Funktionen variieren können, um deren Auswirkungen zu sehen.

HTML

Wir spezifizieren zwei <div>-Elemente, eines mit einer Klasse von anchor und eines mit einer Klasse von infobox. Diese sind als das Ankerelement und das positionierte Element gedacht, die wir miteinander verknüpfen werden.

Wir fügen auch einige Fülltexte um die beiden <div>-Elemente ein, um den <body> höher zu machen, damit es scrollen kann. Dieses Beispiel enthält auch zwei <select>-Elemente, um die Drop-Down-Menüs zu erstellen, die es ermöglichen, verschiedene <anchor-side> Werte auszuwählen, mit denen das positionierte Element platziert wird. Wir haben die Fülltexte und die <select>-Elemente aus Platzgründen ausgeblendet.

html
<div class="anchor">⚓︎</div>

<div class="infobox">
  <p>This is an information box.</p>
</div>

CSS

Wir erklären das anchor <div> als ein Ankerelement, indem wir einen Ankernamen darauf über die anchor-name Eigenschaft setzen. Dann verknüpfen wir es mit dem positionierten Element, indem wir denselben Wert für seine position-anchor Eigenschaft einstellen. top: anchor(--my-anchor bottom) positioniert die Oberkante der Infobox bündig mit der Unterkante ihres Ankers, während left: anchor(right) die linke Kante der Infobox bündig mit der rechten Kante ihres Ankers positioniert. Dies stellt eine anfängliche Position dar, die überschrieben wird, wenn unterschiedliche Werte aus den Drop-Down-Menüs ausgewählt werden.

css
.anchor {
  anchor-name: --my-anchor;
}

.infobox {
  position: fixed;
  position-anchor: --my-anchor;
  top: anchor(--my-anchor bottom);
  left: anchor(right);
}

JavaScript

Wir lauschen dem change Ereignis, das auftritt, wenn ein neuer <anchor-side> Wert ausgewählt wird, und setzen den ausgewählten Wert als <anchor-side> in der anchor() Funktion innerhalb der entsprechenden Einbettungseigenschaft (top oder left) der Infobox.

js
const infobox = document.querySelector(".infobox");
const topSelect = document.querySelector("#top-anchor-side");
const leftSelect = document.querySelector("#left-anchor-side");

topSelect.addEventListener("change", (e) => {
  const anchorSide = e.target.value;
  infobox.style.top = `anchor(--my-anchor ${anchorSide})`;
});

leftSelect.addEventListener("change", (e) => {
  const anchorSide = e.target.value;
  infobox.style.left = `anchor(${anchorSide})`;
});

Ergebnis

Wählen Sie unterschiedliche Werte aus den Drop-Down-Menüs, um zu sehen, wie sie die Positionierung der Infobox beeinflussen.

Element positioniert relativ zu mehreren Ankern

Dieses Beispiel positioniert ein Element relativ zu zwei verschiedenen Ankern, die verwendet werden, um die Position der oberen linken und unteren rechten Ecken des anker-positionierten Elements festzulegen. Die Anker können über Tastatursteuerung oder durch Ziehen bewegt werden, was die Größe des positionierten Elements verändert.

HTML

Wir spezifizieren insgesamt drei <div>-Elemente. Die ersten beiden haben eine Klasse von anchor und werden als Anker definiert; jedes hat eine individuelle id, die verwendet wird, um ihnen unterschiedliche Positionierungsinformationen zu geben. Das letzte <div> hat eine Klasse von infobox und wird als das positionierte Element definiert. Wir fügen das tabindex Attribut hinzu, um es zu erlauben, Tastaturfokus zu erhalten.

html
<div id="anchor1" class="anchor" tabindex="0">⚓︎1</div>

<div id="anchor2" class="anchor" tabindex="0">⚓︎2</div>

<div class="infobox">
  <p>This is an information box.</p>
</div>

CSS

Die Anker erhalten jeweils einen anderen anchor-name Wert, einen position Wert von absolute und verschiedene Einbettungswerte, um die Anker in einer rechteckigen Formation zu positionieren.

css
.anchor {
  position: absolute;
}

#anchor1 {
  anchor-name: --my-anchor1;
  top: 50px;
  left: 100px;
}

#anchor2 {
  anchor-name: --my-anchor2;
  top: 200px;
  left: 350px;
}

Das anker-positionierte Element, dessen position auf fixed gesetzt ist, wird über seine position-anchor Eigenschaft mit einem Anker verbunden. Es wird relativ zu zwei Ankern positioniert, indem innerhalb der anchor() Funktionen auf seinen Einbettungseigenschaften zwei unterschiedliche <anchor-name> Werte angegeben werden. In diesem Fall haben wir <percentage> Werte für den <anchor-side> Parameter verwendet, der den Abstand vom Anfang der Achse der Einbettungseigenschaft angibt, auf der die Funktion gesetzt ist.

css
.infobox {
  position-anchor: --my-anchor1;
  position: fixed;
  top: anchor(--my-anchor1 100%);
  left: anchor(--my-anchor1 100%);
  bottom: anchor(--my-anchor2 0%);
  right: anchor(--my-anchor2 0%);
}

Ergebnis

Das positionierte Element wird relativ zu beiden Ankerelementen positioniert. Ziehen Sie sie mit der Maus oder navigieren Sie mit der Tabulatortaste und verwenden Sie die Tasten W, A, S und D, um sie nach oben, unten, links und rechts zu bewegen. Sehen Sie, wie sich dadurch ihre Position und folglich das Bereich des positionierten Elements ändert. Scrollen Sie, um zu sehen, wie die Positionen aller Elemente beibehalten werden.

Hinweis: Dieses Beispiel ist ein Machbarkeitsnachweis und nicht für die Verwendung in Produktionscode vorgesehen. Zu seinen Schwachstellen gehört, dass das Beispiel nicht funktioniert, wenn Sie versuchen, die Anker horizontal oder vertikal aneinander vorbeizubewegen.

Spezifikationen

Spezifikation
CSS Anchor Positioning Module Level 1
# anchor-pos

Browser-Kompatibilität

Siehe auch