anchor-size()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die anchor-size()
CSS Funktion ermöglicht das Festlegen der Größe, Position und Ränder von anchor-positionierten Elementen relativ zu den Abmessungen von Ankerelementen. Sie gibt die <length>
einer angegebenen Seite des Zielankerelements zurück. anchor-size()
ist nur gültig, wenn es im Wert von Größen-, Einfügungs- und Rand-Properties von anchor-positionierten Elementen verwendet wird.
Für detaillierte Informationen zu Ankerfunktionen und ihrer Verwendung siehe die CSS-Ankerpositionierung Modul-Übersichtsseite und den Leitfaden zur Verwendung von CSS-Ankerpositionierung.
Syntax
/* sizing relative to anchor side */
width: anchor-size(width);
block-size: anchor-size(block);
height: calc(anchor-size(self-inline) + 2em);
/* sizing relative to named anchor's side */
width: anchor-size(--my-anchor width);
block-size: anchor-size(--my-anchor block);
/* sizing relative to named anchor's side with fallback */
width: anchor-size(--my-anchor width, 50%);
block-size: anchor-size(--my-anchor block, 200px);
/* positioning relative to anchor side */
left: anchor-size(width);
inset-inline-end: anchor-size(--my-anchor height, 100px);
/* setting margin relative to anchor side */
margin-left: calc(anchor-size(width) / 4);
margin-block-start: anchor-size(--my-anchor self-block, 20px);
Parameter
Die Syntax der anchor-size()
Funktion ist wie folgt:
anchor-size(<anchor-name> <anchor-size>, <length-percentage>)
Die Parameter sind:
<anchor-name>
Optional-
Der
anchor-name
Propertywert eines Ankerelements, zu dem Sie die Größe, Position oder Ränder des Elements relativ setzen möchten. Dies ist ein<dashed-ident>
Wert. Wenn ausgelassen, wird der Standardanker des Elements verwendet.Hinweis: Die Angabe eines
<anchor-name>
innerhalb eineranchor-size()
Funktion verknüpft oder verbindet kein Element mit einem Anker; es definiert lediglich, welcher Anker als Referenz für die Propertywerte des Elements verwendet werden soll. <anchor-size>
Optional-
Gibt die Abmessung des Ankerelements an, zu der die Propertywerte des positionierten Elements relativ gesetzt werden sollen. Gültige Werte sind:
width
-
Die Breite des Ankerelements.
height
-
Die Höhe des Ankerelements.
block
-
Die Länge des containing block des Ankerelements in Blockrichtung.
inline
-
Die Länge des containing block des Ankerelements in Inline-Richtung.
self-block
-
Die Länge des Ankerelements in Blockrichtung.
self-inline
-
Die Länge des Ankerelements in Inline-Richtung.
Hinweis: Wenn dieser Parameter weggelassen wird, wird die Dimension auf den
<anchor-size>
Schlüsselbegriff eingestellt, der mit der Achse der Property übereinstimmt, in der die Funktion enthalten ist. Zum Beispiel istwidth: anchor-size();
gleichbedeutend mitwidth: anchor-size(width);
. <length-percentage>
Optional-
Gibt die Größe an, die als Fallback-Wert verwendet werden soll, wenn das Element nicht absolut oder fix positioniert ist oder das Ankerelement nicht existiert. Wenn dieser Parameter in einem Fall ausgelassen wird, in dem der Fallback ansonsten verwendet werden würde, ist die Deklaration ungültig.
Hinweis:
Die Ankerdimension, zu der Sie die Propertywerte des positionierten Elements relativ setzen, muss nicht auf derselben Achse sein wie der festgelegte Größenwert. Zum Beispiel ist width: anchor-size(height)
gültig.
Rückgabewert
Gibt einen <length>
Wert zurück.
Beschreibung
Die anchor-size()
Funktion ermöglicht es, dass Größen-, Positions- und Randwerte eines positionierten Elements in Bezug auf die Abmessungen eines Ankerelements ausgedrückt werden können; sie gibt einen <length>
Wert zurück, der die Dimension eines spezifischen Ankerelements darstellt, zu dem die Propertywerte des positionierten Elements relativ gesetzt werden. Es ist ein gültiger Wert für Größen-, Einfügungs- und Randproperties, die auf anchor-positionierten Elementen eingestellt werden.
Die zurückgegebene Länge ist die vertikale oder horizontale Größe eines Ankerelements oder seines containing block. Die verwendete Dimension wird durch den <anchor-size>
Parameter definiert. Wenn dieser Parameter weggelassen wird, stimmt die verwendete Dimension mit der Achse der Größe, Position oder Randproperty überein, auf der sie gesetzt ist. Beispielsweise:
width: anchor-size()
ist gleichbedeutend mitwidth: anchor-size(width)
.top: anchor-size()
ist gleichbedeutend mittop: anchor-size(height)
.margin-inline-end: anchor-size()
ist gleichbedeutend mitmargin-inline-end: anchor-size(self-inline)
.margin-inline-end: anchor-size()
ist auch gleichbedeutend mitmargin-inline-end: anchor-size(width)
in horizontalen Schreibmodi odermargin-inline-end: anchor-size(height)
in vertikalen Schreibmodi.
Das Ankerelement, das als Grundlage für die Dimensionen verwendet wird, ist das Element mit dem im <anchor-name>
Parameter angegebenen anchor-name
. Wenn mehrere Elemente denselben Anker-Namen haben, wird das letzte Element mit diesem Anker-Namen in der DOM-Reihenfolge verwendet.
Wenn kein <anchor-name>
Parameter in den Funktionsaufruf einbezogen ist, wird der Standardanker des Elements, der in seiner position-anchor
Property referenziert wird oder über das anchor
HTML-Attribut mit dem Element verknüpft ist, verwendet.
Wenn ein <anchor-name>
Parameter enthalten ist und keine Elemente mit diesem Anker-Namen existieren, wird der Fallback-Wert verwendet. Wenn kein Fallback enthalten war, wird die Deklaration ignoriert. Zum Beispiel, wenn width: anchor-size(--foo width, 50px); height: anchor-size(--foo width);
auf dem positionierten Element angegeben sind, aber keine Anker mit dem Namen --foo
im DOM existieren, wäre die width
50px
und die height
Deklaration hätte keine Wirkung.
Wenn ein Element Größen-, Positions- oder Randproperties mit anchor-size()
Werten darauf gesetzt hat, aber es sich nicht um ein anchor-positioniertes Element handelt (es hat seine position
Property nicht auf absolute
oder fixed
gesetzt oder ist nicht über seine position-anchor
Property mit einem Anker verknüpft), wird der Fallback-Wert verwendet, wenn einer verfügbar ist. Wenn kein Fallback verfügbar ist, wird die Deklaration ignoriert.
Wenn zum Beispiel width: anchor-size(width, 50px);
auf dem positionierten Element angegeben ist, aber kein Anker damit verknüpft ist, würde der Fallback-Wert verwendet, sodass width
einen berechneten Wert von 50px
erhält.
Für detaillierte Informationen zu Ankerfunktionen und ihrer Verwendung siehe die CSS-Ankerpositionierung Modul-Übersichtsseite und den Leitfaden zur Verwendung von CSS-Ankerpositionierung.
Eigenschaften, die anchor-size()
Funktionswerte akzeptieren
Zu den Eigenschaften, die eine anchor-size()
Funktion als Wert akzeptieren, gehören:
- Größen-Eigenschaften:
- Einfüge-Eigenschaften:
bottom
left
right
top
inset
shorthandinset-block
shorthandinset-block-end
inset-block-start
inset-inline
shorthandinset-inline-end
inset-inline-start
- Rand-Eigenschaften:
margin
shorthandmargin-bottom
margin-left
margin-right
margin-top
margin-block
shorthandmargin-block-end
margin-block-start
margin-inline
shorthandmargin-inline-end
margin-inline-start
Verwendung von anchor-size()
innerhalb von calc()
Die häufigsten anchor-size()
Funktionen, die Sie verwenden werden, beziehen sich einfach auf eine Dimension des Standardankers. Alternativ schließen Sie die anchor-size()
Funktion innerhalb einer calc()
Funktion ein, um die auf das positionierte Element angewendete Größe zu modifizieren.
Zum Beispiel, diese Regel setzt die Breite des positionierten Elements gleich der Breite des Standardanker-Elements:
.positionedElem {
width: anchor-size(width);
}
Diese Regel setzt die Inline-Größe des positionierten Elements auf das Vierfache der Inline-Größe des Ankerelements, wobei die Multiplikation in einer calc()
Funktion durchgeführt wird:
.positionedElem {
inline-size: calc(anchor-size(self-inline) * 4);
}
Formale Syntax
Beispiele
Grundlegende anchor-size()
Verwendung
Dieses Beispiel zeigt zwei Elemente, die relativ zu einem Anker positioniert und mit anchor-size()
Funktionen dimensioniert sind.
HTML
Wir spezifizieren drei <div>
Elemente, ein anchor
Element und die zwei infobox
Elemente, die wir relativ zum Anker positionieren. Wir fügen auch Fülltext hinzu, um den <body>
so groß zu machen, dass Scrollen erforderlich ist, aber dies wurde der Kürze halber ausgeblendet.
<div class="anchor">⚓︎</div>
<div class="infobox" id="infobox1">
<p>This is the first infobox.</p>
</div>
<div class="infobox" id="infobox2">
<p>This is the second infobox.</p>
</div>
CSS
Wir deklarieren das anchor
<div>
als Ankerelement, indem wir ihm einen anchor-name
zuweisen. Die positionierten Elemente, bei denen ihre position
Eigenschaften auf fixed
gesetzt sind, sind über ihre position-anchor
Eigenschaften mit dem Ankerelement verknüpft. Wir setzen auch absolute height
und width
Dimensionen auf den Anker, um einen Bezugspunkt beim Überprüfen der Dimensionen der positionierten Elemente zu bieten, zum Beispiel mit Entwicklerwerkzeugen im Browser:
.anchor {
anchor-name: --my-anchor;
width: 100px;
height: 100px;
}
.infobox {
position-anchor: --my-anchor;
position: fixed;
}
Wir setzen einige unterschiedliche Propertywerte auf die positionierten Elemente:
- Die positionierten Elemente sind mit unterschiedlichen
position-area
Werten an den Anker gebunden, die die Elemente an unterschiedlichen Stellen um das Ankerelement platzieren. - Die
height
der ersten Infobox wird auf dieselbe Höhe wie das Ankerelement gesetzt:anchor-size(height)
gibt die Höhe des Ankerelements zurück. Diewidth
des Elements wird auf das Doppelte der Breite des Ankerelements gesetzt, indem dieanchor-size()
Funktion innerhalb einercalc()
Funktion verwendet wird:anchor-size(width)
ruft die Breite des Ankerelements ab, die dann verdoppelt wird. - Die
height
der zweiten Infobox wird auf zwei Drittel der Höhe des Ankerelements gesetzt, unter Verwendung einer ähnlichen Technik. - Randwerte sind enthalten, um etwas Abstand vom Ankerelement zu schaffen.
#infobox1 {
position-area: right;
height: anchor-size(height);
width: calc(anchor-size(width) * 2);
margin-left: 5px;
}
#infobox2 {
position-area: top span-right;
height: calc(anchor-size(height) / 1.5);
margin-bottom: 5px;
}
Ergebnis
Verwenden Sie Ihre Browser-Tools, um die anchor-positionierten Elemente zu inspizieren. Die erste Infobox wird 100px
hoch und 200px
breit sein, während die zweite Infobox eine Höhe von ungefähr 66,7px
hat, wobei die width
standardmäßig auf max-content
eingestellt ist.
Beispiel für Position und Rand
Spezifikationen
Specification |
---|
CSS Anchor Positioning # anchor-size-fn |