anchor()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die anchor()
CSS Funktion kann innerhalb der Werteigenschaften eines ankerpositionierten Elements inset property verwendet werden und gibt einen Längenwert zurück, der relativ zur Position der Kanten des zugehörigen Ankerelements ist.
Syntax
/* 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(--myAnchor bottom);
inset-block-end: anchor(--myAnchor start);
/* side of named anchor with fallback */
top: anchor(--myAnchor bottom, 50%);
inset-block-end: anchor(--myAnchor start, 200px);
left: calc(anchor(--myAnchor right, 0%) + 10px);
Parameter
Die Syntax der anchor()
Funktion ist wie folgt:
anchor(, )
Die Parameter sind:
Optional-
Der
anchor-name
Eigenschaftswert eines Ankerelements, an dem Sie die Seite des Elements relativ positionieren möchten. Dies ist ein
Wert. Wenn nicht angegeben, wird der Standardanker des Elements verwendet, der in seinerposition-anchor
Eigenschaft referenziert oder über dasanchor
HTML-Attribut mit dem Element assoziiert ist.Hinweis: Das Angeben eines
innerhalb eineranchor()
Funktion assoziiert ein Element nicht mit einem Anker; es positioniert das Element nur relativ zu diesem Anker. Dieposition-anchor
CSS-Eigenschaft oder dasanchor
HTML-Attribut sind weiterhin erforderlich, um die Assoziation zu erstellen. -
Gibt die Seite des Ankers an oder die relative Entfernung von der
start
Seite, zu der das Element relativ positioniert wird. Wenn ein physischer oder logischer Wert verwendet wird, der nicht kompatibel mit der Rand-Eigenschaft ist, auf dieanchor()
gesetzt ist, wird der Rückfallwert verwendet. Gültige Werte umfassen:top
-
Der obere Rand des Ankerelements.
right
-
Der rechte Rand des Ankerelements.
bottom
-
Der untere Rand des Ankerelements.
left
-
Der linke Rand des Ankerelements.
start
-
Der logische Anfang des enthaltenen Blocks des Ankerelements entlang der Achse der Rand-Eigenschaft, auf die die
anchor()
Funktion gesetzt ist. end
-
Das logische Ende des enthaltenen Blocks des Ankerelements entlang der Achse der Rand-Eigenschaft, auf die die
anchor()
Funktion gesetzt ist. self-start
-
Der logische Anfang des Inhalts des Ankerelements entlang der Achse der Rand-Eigenschaft, auf die die
anchor()
Funktion gesetzt ist. self-end
-
Das logische Ende des Inhalts des Ankerelements entlang der Achse der Rand-Eigenschaft, auf die die
anchor()
Funktion gesetzt ist. center
-
Die Mitte der Achse der Rand-Eigenschaft, auf die die
anchor()
Funktion gesetzt ist. -
Gibt die Entfernung als Prozentsatz vom Anfang des Inhalts des Elements entlang der Achse der Rand-Eigenschaft an, auf die die
anchor()
Funktion gesetzt ist.
Das CSS-Anker-Positionierungsmodul spezifiziert zwei zusätzliche
Werte,inside
undoutside
, die noch nicht implementiert wurden.
Optional-
Gibt einen Rückfallwert an, auf den die Funktion aufgelöst werden soll, wenn die
anchor()
Funktion ansonsten ungültig wäre.
Rückgabewert
Beschreibung
Die anchor()
Funktion ermöglicht es, ein Element relativ zu den Kanten eines Ankerelements zu positionieren. Sie ist nur innerhalb von inset property Werten gültig, die auf absolut oder fest positionierten Elementen festgelegt sind.
Sie gibt einen
Wert zurück, der den Abstand zwischen der ankerpositionierten Elementseite angibt, die durch den Randwert spezifiziert ist, und der Seite des Ankerelements, die durch den gewählten
Wert angegeben ist. Da sie einen
zurückgibt, kann sie in anderen CSS-Funktionen verwendet werden, die Längenwerte akzeptieren, einschließlich calc()
, clamp()
, usw.
Wenn kein Anker mit dem durch den
spezifizierten Namen existiert oder das positionierte Element keinen Anker zugeordnet hat (d.h. über die position-anchor
Eigenschaft), wird der erste Parameter als ungültig betrachtet und der Rückfallwert
wird verwendet, falls vorhanden. Zum Beispiel, wenn top: anchor(bottom, 50px)
auf dem positionierten Element spezifiziert wurde, aber kein Anker damit assoziiert war, würde der Rückfallwert verwendet werden, sodass top
einen berechneten Wert von 50px
erhält.
Für detaillierte Informationen zu Ankerfunktionen und deren Verwendung siehe die CSS anker positionieren Modul-Seite und den Verwendung von CSS-Ankerpositionierung Leitfaden.
Eigenschaften, die anchor()
Funktionswerte akzeptieren
Die CSS Rand-Eigenschaften, die eine anchor()
Funktion als Wertkomponente akzeptieren, umfassen:
top
left
bottom
right
inset
Kurzforminset-block-start
inset-block-end
inset-block
Kurzforminset-inline-start
inset-inline-end
inset-inline
Kurzform
Kompatibilität von Rand-Eigenschaften und
Werten
Wenn eine anchor()
Funktion innerhalb eines Rand-Eigenschaftswerts verwendet wird, muss der innerhalb der anchor()
Funktion spezifizierte
Parameter mit der Achse kompatibel sein, auf der die Rand-Eigenschaft liegt.
Das bedeutet, dass physische
Werte innerhalb der Werte von physischen Rand-Eigenschaften verwendet werden können, wenn die Eigenschaft dieselbe Achsenrichtung wie der
hat. Mit anderen Worten sind die Seiten top
und bottom
nicht innerhalb der left
und right
Eigenschaftswerte gültig, und die Seiten left
und right
sind nicht innerhalb der top
und bottom
Eigenschaftswerte 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äre, würde der Rückfallwert verwendet werden, sodass top
einen berechneten Wert von 50px
erhält. Wenn kein Rückfall vorhanden ist, verhält sich die Rand-Eigenschaft, als wäre sie auf auto
gesetzt.
Sie können logische
Werte sowohl innerhalb logischer als auch physischer Rand-Eigenschaften verwenden, da logische
Werte relativ zur relevanten Achse der Rand-Eigenschaft 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 gut.
Die Situation wird komplizierter, wenn physische
Parameter innerhalb von logischen Rand-Eigenschaftswerten verwendet werden, da die physische Seite mit der Achse übereinstimmen muss, auf die die Rand-Eigenschaft im aktuellen Schreibmodus relevant ist. Zum Beispiel:
- In einem horizontalen Schreibmodus ist die Blockrichtung von oben nach unten, daher wird
inset-block-end: anchor(bottom)
funktionieren, aberinset-block-end: anchor(left)
ist nicht kompatibel. Wenninset-block-end: anchor(left, 50px)
gesetzt wäre, würde der berechnete Wert50px
betragen, und das positionierte Element würde50px
vom Blockende (unten) seines nächsten positionierten Vorgängers oder des Viewports, abhängig vom gesetztenposition
Wert, positioniert. - In einem vertikalen Schreibmodus ist die Blockrichtung von rechts nach links oder von links nach rechts, daher wird
inset-block-end: anchor(left)
funktionieren, aberinset-block-end: anchor(top)
ist nicht kompatibel. Wenninset-block-end: anchor(top, 50px)
gesetzt wäre, würde der berechnete Wert50px
betragen, und das positionierte Element würde50px
vom Blockende (links oder rechts, abhängig vom Schreibmodus) seines nächsten positionierten Vorgängers oder des Viewports, abhängig vom gesetztenposition
Wert, positioniert.
Um das Potenzial für Verwirrung mit diesen Werten zu mindern, wird Ihnen empfohlen, logische Rand-Eigenschaften mit logischen
Werten zu verwenden, und physische Rand-Eigenschaften mit physischen
Werten. Sie sollten die Verwendung logischer Werte nach Möglichkeit bevorzugen, da diese besser für die Internationalisierung sind.
Die center
und
Werte sind innerhalb der anchor()
Funktion in allen logischen und physischen Rand-Eigenschaften gültig.
Die folgende Tabelle listet die Rand-Eigenschaften und die
Parameterwerte auf, die mit ihnen kompatibel sind. Wir haben nur die Langform-Rand-Eigenschaften aufgelistet; diese umfassen die Werte der Kurzform-Rand-Eigenschaften.
Rand-Eigenschaft | Kompatibler Wert |
---|---|
Alle | center |
Alle |
|
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 Schreibmodileft und right in vertikalen Schreibmodi |
inset-inline-start und inset-inline-end |
start , end , self-start und self-end left und right in horizontalen Schreibmoditop und bottom in vertikalen Schreibmodi |
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 einen Abstand zwischen den Kanten des Ankers und des positionierten Elements zu schaffen. Alternativ können Sie die anchor()
Funktion in eine calc()
Funktion einfügen, um den Abstand hinzuzufügen.
Dieses Beispiel positioniert die rechte Kante des positionierten Elements bündig an der linken Kante des Ankerelements und fügt dann eine Margin ein, um etwas Platz zwischen den Kanten zu schaffen:
.positionedElement {
right: anchor(left);
margin-left: 10px;
}
Dieses Beispiel positioniert die logische Block-Endkante des positionierten Elements 10px
von der logischen Block-Startkante des Ankerelements entfernt:
.positionedElement {
inset-block-end: calc(anchor(start) + 10px);
}
Positionieren eines Elements relativ zu mehreren Ankern
Sie können ein Element relativ zu mehreren Ankern positionieren, indem Sie verschiedene
Werte innerhalb der anchor()
Funktion verschiedener Rand-Eigenschaften desselben Elements angeben (siehe Element positioniert relativ zu mehreren Ankern unten). Dies kann verwendet werden, um nützliche Funktionen wie Ziehgriffe an den Ecken eines positionierten Elements zu erstellen, die verwendet werden können, um seine Größe zu ändern.
Während ein positioniertes Element relativ zu mehr als einem Ankerelement positioniert werden kann, ist es immer nur mit dem einzigen Anker, der über seine position-anchor
Eigenschaft (oder das anchor
HTML-Attribut) definiert ist, assoziiert. Dies ist der Anker, mit dem das Element scrollt, wenn die Seite scrollt; er kann auch verwendet werden, um zu steuern, wann das Element bedingt versteckt wird.
Formale Syntax
Beispiele
Häufige Verwendung
In diesem Beispiel wird die anchor()
Funktion verwendet, um die Höhe eines ankerpositionierten 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 innerhalb einer calc()
Funktion wird dann verwendet, um das ankerpositionierte Element von seinem Anker zu versetzen.
HTML
Wir fügen ein This is a positioned element. Wir setzen den Dieses Beispiel zeigt ein Element, das relativ zu einem Anker über seine Wir spezifizieren zwei Wir fügen auch etwas Fülltext um die beiden This is an information box. Wir erklären das Wir lauschen auf das Wählen Sie verschiedene Werte aus den Dropdown-Menüs, um zu sehen, wie sie die Positionierung der Infobox beeinflussen. Dieses Beispiel positioniert ein Element relativ zu zwei verschiedenen Ankern, die verwendet werden, um die Position der oberen linken und unteren rechten Ecken des ankerpositionierten Elements festzulegen. Die Anker können über Tastatursteuerungen oder per Drag-and-Drop bewegt werden, um die Größe des positionierten Elements zu ändern. Wir spezifizieren insgesamt drei This is an information box. Die Anker sind jeweils mit einem anderen Das ankerpositionierte Element, dessen Das positionierte Element ist relativ zu beiden Ankerelementen positioniert. Ziehen Sie sie mit der Maus, oder drücken Sie die Tabulatortaste, um zu ihnen zu gelangen und verwenden Sie die W, A, S, und D Tasten, um sie nach oben, unten, links und rechts zu bewegen. Beobachten Sie, wie sich deren Position verändert und infolgedessen der Bereich des positionierten Elements. Scrollen Sie, um zu sehen, wie die Positionen aller Elemente beibehalten werden. Hinweis:
Dieses Beispiel ist ein Konzeptnachweis und nicht für den Einsatz in Produktionscode gedacht. Zu den Mängeln gehört, dass das Beispiel zusammenbricht, wenn Sie versuchen, die Anker horizontal oder vertikal aneinander vorbeizubewegen. Element, das wir relativ zu diesem Anker positionieren:
CSS
anchor-name
Wert des Ankerelements als den Wert der position-anchor
Eigenschaft des positionierten Elements, um die Elemente zu assoziieren, und setzen dann drei Rand-Eigenschaften auf dem ankerpositionierten Element. Die ersten beiden positionieren die obere Kante des Elements bündig an der oberen Kante des Ankers und die untere Kante bündig an der unteren Kante des Ankers. In der dritten Rand-Eigenschaft wird die anchor()
Funktion innerhalb einer calc()
Funktion verwendet, um die linke Kante des Elements 10px
zur rechten Kante des Ankers zu positionieren..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
Wertetop
und left
Eigenschaften positioniert ist, die unter Verwendung von anchor()
Funktionen definiert sind. Es enthält auch zwei Dropdown-Menüs, mit denen Sie die
Werte innerhalb dieser anchor()
Funktionen variieren können, um zu sehen, welche Auswirkungen sie haben.HTML
anchor
und eines mit einer Klasse von infobox
. Diese sind als das Ankerelement und das positionierte Element gedacht, das wir damit assoziieren werden.
höher zu machen, sodass er scrollen kann. Dieses Beispiel enthält auch zwei
Elemente, um die Dropdown-Menüs zu erstellen, die die Auswahl verschiedener
Werte ermöglichen, um das positionierte Element zu platzieren. Wir haben den Fülltext und die Elemente aus Gründen der Kürze ausgeblendet.
CSS
anchor
anchor-name
Eigenschaft darauf setzen. Dann assoziieren wir es mit dem positionierten Element, indem wir denselben Wert für seine position-anchor
Eigenschaft festlegen. top: anchor(--myAnchor bottom)
positioniert die obere Kante der Infobox bündig an der unteren Kante ihres Ankers, während left: anchor(right)
die linke Kante der Infobox bündig an der rechten Kante ihres Ankers positioniert. Dies liefert eine Anfangsposition, die überschrieben wird, wenn verschiedene Werte aus den Dropdown-Menüs ausgewählt werden.
.anchor {
anchor-name: --myAnchor;
}
.infobox {
position: fixed;
position-anchor: --myAnchor;
top: anchor(--myAnchor bottom);
left: anchor(right);
}
JavaScript
change
Ereignis, das auftritt, wenn ein neuer
Wert ausgewählt wird, und setzen den ausgewählten Wert als
in der anchor()
Funktion innerhalb des relevanten Rand-Eigenschaftswerts (top
oder left
) der Infobox.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(--myAnchor ${anchorSide})`;
});
leftSelect.addEventListener("change", (e) => {
const anchorSide = e.target.value;
infobox.style.left = `anchor(${anchorSide})`;
});
Ergebnis
Element positioniert relativ zu mehreren Ankern
HTML
anchor
und werden als Anker definiert; jedes hat eine individuelle id
, die verwendet wird, um ihnen unterschiedliche Positionierungsinformationen bereitzustellen. Das letzte infobox
und wird als das positionierte Element definiert. Wir fügen das tabindex
Attribut hinzu, um ihnen Tastaturfokus zu ermöglichen.
CSS
anchor-name
Wert, einem position
Wert von absolute
und unterschiedlichen Randwerten versehen, um die Anker in einer Rechteckform zu positionieren..anchor {
position: absolute;
}
#anchor1 {
anchor-name: --myAnchor1;
top: 50px;
left: 100px;
}
#anchor2 {
anchor-name: --myAnchor2;
top: 200px;
left: 350px;
}
position
auf fixed
gesetzt ist, ist mit einem Anker über seine position-anchor
Eigenschaft assoziiert. Es ist relativ zu zwei Ankern positioniert, indem zwei verschiedene
Werte mit den anchor()
Funktionen auf seinen Rand-Eigenschaften gesetzt werden. In diesem Fall haben wir
Werte für den
Parameter verwendet, der die Entfernung vom Anfang der Achse der Rand-Eigenschaft angibt, auf die die Funktion gesetzt ist..infobox {
position-anchor: --myAnchor1;
position: fixed;
top: anchor(--myAnchor1 100%);
left: anchor(--myAnchor1 100%);
bottom: anchor(--myAnchor2 0%);
right: anchor(--myAnchor2 0%);
}
Ergebnis
Spezifikationen
Specification CSS Anchor Positioning
# anchor-posBrowser-Kompatibilität
Siehe auch