position-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 position-anchor
CSS Eigenschaft gibt den Ankernamen des Ankerelements an (d.h. ein Element, das einen Ankernamen über die anchor-name
Eigenschaft gesetzt hat), mit dem ein positioniertes Element verbunden ist.
Syntax
/* Single values */
position-anchor: auto;
position-anchor: --anchorName;
/* Global values */
position-anchor: inherit;
position-anchor: initial;
position-anchor: revert;
position-anchor: revert-layer;
position-anchor: unset;
Werte
auto
-
Verknüpft ein positioniertes Element mit seinem impliziten Ankerelement, falls es eines hat — zum Beispiel wie durch das nicht standardmäßige HTML
anchor
Attribut festgelegt. <dashed-ident>
-
Der Name des Ankerelements, mit dem das positionierte Element verbunden werden soll, wie im
anchor-name
Attribut des Ankerelements aufgeführt. Dies wird als Standardankerspezifizierer bezeichnet.
Beschreibung
Diese Eigenschaft ist nur für "positionierte" Elemente relevant — Elemente und Pseudo-Elemente, die eine position
von absolute
oder fixed
haben.
Um ein Element relativ zu einem Ankerelement zu positionieren, benötigt das positionierte Element drei Merkmale: eine Verbindung, eine Position und einen Ort. Die Eigenschaften position-anchor
und anchor-name
bieten eine explizite Verbindung.
Das Ankerelement akzeptiert einen oder mehrere <dashed-ident>
Ankernamen, die über die anchor-name
Eigenschaft gesetzt wurden. Wenn einer dieser Namen dann als Wert der position-anchor
Eigenschaft des positionierten Elements gesetzt wird, sind die beiden Elemente verbunden.
Wenn es mehrere Ankerelemente mit dem im position-anchor
Attribut aufgeführten Ankernamen gibt, wird das positionierte Element mit dem letzten Ankerelement in der Quellreihenfolge mit diesem Ankernamen verbunden.
Um ein positioniertes Element an seinen Anker zu binden, muss es relativ zu einem Ankerelement platziert werden, indem eine Ankerpositionierungsfunktion wie die anchor()
Funktion (als Wert für inset properties festgelegt) oder die position-area
Eigenschaft verwendet wird.
Wenn der verbundene Anker versteckt ist, zum Beispiel mit display: none
oder visibility: hidden
, oder wenn er Teil der übersprungenen Inhalte eines anderen Elements aufgrund von content-visibility: hidden
ist, wird das ankerpositierte Element nicht angezeigt.
Die position-anchor
Eigenschaft wird auf allen positionierten Elementen unterstützt, einschließlich Pseudo-Elementen wie ::before
und ::after
. Pseudo-Elemente sind implizit an dasselbe Element wie das Ursprungs-Element des Pseudo-Elements verankert, es sei denn, es wird anders festgelegt.
Für weitere Informationen über Ankereigenschaften und -verwendung lesen Sie die CSS Anker-Positionierung Modul-Hauptseite und die Verwendung von CSS Anker-Positionierung Anleitung.
Formale Definition
Anfangswert | auto |
---|---|
Anwendbar auf | absolut positionierte Elemente |
Vererbt | Nein |
Berechneter Wert | wie angegeben |
Animationstyp | diskret |
Formale Syntax
position-anchor =
auto |
<anchor-name>
<anchor-name> =
<dashed-ident>
Beispiele
Siehe die anchor-name
Dokumentation für grundlegende Verwendung und zusätzliche position-anchor
Beispiele.
Verwendung eines Schieberegler-Daumen als Anker
In diesem Beispiel wird ein <output>
relativ zu einem Anker positioniert, der der Daumen eines Bereichsschiebereglers ist.
HTML
Wir fügen ein <input type="range">
Element und ein <output>
Element hinzu, um den Wert des Bereichs anzuzeigen. Der Wert, der im <output>
Element angezeigt wird, wird über JavaScript aktualisiert, wenn sich der Schiebereglerwert ändert.
<label for="slider">Change the value:</label>
<input type="range" min="0" max="100" value="25" id="slider" />
<output>25</output>
CSS
Wir geben dem Daumen, der durch das ::-webkit-slider-thumb
Pseudo-Element repräsentiert wird, einen Ankernamen von --thumb
. Wir setzen dann diesen Namen als Wert der position-anchor
Eigenschaft des <output>
Elements fest und geben ihm einen position
Wert von fixed
. Diese Schritte verbinden das <output>
mit dem Daumen.
Schließlich verwenden wir die left
und top
Eigenschaften mit anchor()
Werten, um das <output>
relativ zum Daumen zu positionieren.
input::-webkit-slider-thumb {
anchor-name: --thumb;
}
output {
position-anchor: --thumb;
position: absolute;
left: anchor(right);
bottom: anchor(top);
}
JavaScript
Wir fügen einen Ereignislistener hinzu, der den Inhalt des <output>
Elements aktualisiert, wenn sich der Wert des <input>
ändert:
const input = document.querySelector("input");
const output = document.querySelector("output");
input.addEventListener("input", (event) => {
output.innerText = `${input.value}`;
});
Ergebnisse
Das Ergebnis wird am Daumen verankert. Ändern Sie den Wert. Wenn die Ankerpositionierung in Ihrem Browser unterstützt wird, wird der Wert über und rechts vom Daumen sein, egal wo er entlang des Schiebereglers ist.
Mehrere positionierte Elemente und Anker
In diesem Beispiel können Sie mehrere positionierte Elemente bewegen und sie mit verschiedenen Ankern verbinden. Dieses Beispiel zeigt, wie ein Anker mit mehreren positionierten Elementen verbunden werden kann, aber ein ankerpositioniertes Element kann nur mit einem einzelnen Anker zur gleichen Zeit verbunden sein, dem Anker, der durch die anchor-position
Eigenschaft definiert ist.
HTML
Wir haben vier Anker und zwei positionierte Elemente, die durch unterschiedliche id
Werte unterschieden werden. Die positionierten Elemente enthalten <select>
Felder, die Ihnen erlauben, den Anker auszuwählen, mit dem Sie sie verbinden möchten.
<div id="anchor-container">
<div class="anchor" id="anchor1">⚓︎</div>
<div class="anchor" id="anchor2">⚓︎</div>
<div class="anchor" id="anchor3">⚓︎</div>
<div class="anchor" id="anchor4">⚓︎</div>
</div>
<div class="infobox" id="infobox1">
<form>
<label for="anchor1-anchor-select">Place infobox on:</label>
<select id="anchor1-anchor-select">
<option value="1">Anchor 1</option>
<option value="2">Anchor 2</option>
<option value="3">Anchor 3</option>
<option value="4">Anchor 4</option>
</select>
</form>
</div>
<div class="infobox" id="infobox2">
<form>
<label for="anchor2-anchor-select">Place infobox on:</label>
<select id="anchor2-anchor-select">
<option value="1">Anchor 1</option>
<option value="2">Anchor 2</option>
<option value="3">Anchor 3</option>
<option value="4">Anchor 4</option>
</select>
</form>
</div>
CSS
Wir deklarieren das erste anchor
<div>
als Anker, indem wir die anchor-name
Eigenschaft verwenden, die zwei durch Kommas getrennte Ankernamen erhält, einen für jedes positionierte Element. Dies ist der Anfangszustand der Demo – beide positionierten Elemente werden an den ersten Anker gebunden.
#anchor1 {
anchor-name: --myAnchor1, --myAnchor2;
}
Jedes der positionierten Elemente erhält eine position-anchor
Eigenschaft mit einem Wert, der einem der beiden Ankernamen entspricht. Die positionierten Elemente erhalten dann anker-relative Positionierungsinformationen durch eine Kombination von inset, alignment und margin Eigenschaften.
#infobox1 {
position-anchor: --myAnchor1;
position: fixed;
left: anchor(right);
align-self: anchor-center;
margin-left: 10px;
}
#infobox2 {
position-anchor: --myAnchor2;
position: fixed;
bottom: anchor(top);
justify-self: anchor-center;
margin-bottom: 15px;
}
JavaScript
Wir ändern dynamisch, auf welchen Ankerelementen die anchor-name
Werte gesetzt sind, als Reaktion auf verschiedene Anker, die in den <select>
Menüs der positionierten Elemente ausgewählt werden. Die Schlüsselfunktionalität hier ist der change
Ereignishandler, updateAnchorNames()
. Er setzt beide Ankernamen auf einen Anker, wenn die Anker, die in den beiden <select>
Menüs gewählt werden, gleich sind. Andernfalls setzt er einen einzelnen Ankernamen auf zwei separate Anker, wie es angemessen ist.
// Get references to the two select menus
const select1 = document.querySelector("#anchor1-anchor-select");
const select2 = document.querySelector("#anchor2-anchor-select");
// Store references to all the anchors in a NodeList (array-like)
const anchors = document.querySelectorAll("#anchor-container > div");
// Set the same change event handler on both select menus
select1.addEventListener("change", updateAnchorNames);
select2.addEventListener("change", updateAnchorNames);
function updateAnchorNames() {
// Remove all anchor names from all anchors
for (const anchor of anchors) {
anchor.style.anchorName = "none";
}
// convert the select menu values to numbers, and remove one to
// make them match the selected anchors' index positions in the NodeList
const value1 = Number(select1.value) - 1;
const value2 = Number(select2.value) - 1;
if (value1 === value2) {
// If the chosen anchors are both the same, set both anchor
// names on the same anchor
anchors[value1].style.anchorName = "--myAnchor1, --myAnchor2";
} else {
// If they are not the same, set the anchor names separately
// on each selected anchor
anchors[value1].style.anchorName = "--myAnchor1";
anchors[value2].style.anchorName = "--myAnchor2";
}
}
Ergebnis
Wählen Sie verschiedene Werte aus den Dropdown-Menüs, um die Anker zu ändern, relativ zu denen die Elemente positioniert sind.
Spezifikationen
Specification |
---|
CSS Anchor Positioning # position-anchor |
Browser-Kompatibilität
Siehe auch
anchor-name
- HTML
anchor
Attribut - CSS Anker-Positionierung Modul
- Verwendung von CSS Anker-Positionierung Leitfaden