@position-try
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-try
CSS Regel wird verwendet, um eine benutzerdefinierte Fallback-Option für Positionierungen zu definieren, die zur Definition von Positionierung und Ausrichtung für Anker-Positionierungselemente genutzt werden kann. Eine oder mehrere Fallback-Optionen für position-try
können über die position-try-fallbacks
-Eigenschaft oder die Abkürzung position-try
auf das verankerte Element angewendet werden. Wenn das positionierte Element an eine Stelle verschoben wird, an der es beginnt, aus dem enthaltenden Block oder dem Sichtfenster herauszuragen, wählt der Browser die erste Fallback-Option aus, die das positionierte Element vollständig zurück auf den Bildschirm bringt.
Jede Positionsoption wird mit einem <dashed-ident>
benannt und enthält eine Liste von Deskriptoren, die Definitionen wie Einfügeposition, Rand, Größenanpassung und Selbstausrichtung angeben. Der <dashed-ident>
wird verwendet, um die benutzerdefinierte Positionsoption in der position-try-fallbacks
-Eigenschaft und der Kurzform position-try
zu referenzieren.
Für detaillierte Informationen über Ankerfunktionen und die Verwendung von Fallback-Optionen besuchen Sie die CSS-Anker-Positionierung Modul-Startseite und den Leitfaden Überlauf behandeln: Fallbacks und bedingtes Verstecken.
Syntax
@position-try --try-option-name {
descriptor-list
}
Hinweis:>--try-option-name
ist ein <dashed-ident>
, das einen Namen für die benutzerdefinierte Positionsoption angibt, die dann der Liste der position-try-fallbacks
hinzugefügt werden kann.
Deskriptoren
Die Deskriptoren definieren Eigenschaftswerte, die das Verhalten der benutzerdefinierten Positionsoption festlegen, d. h., wohin das positionierte Element platziert wird.
position-anchor
-
Gibt einen
position-anchor
-Eigenschaftswert an, der das Ankerelement definiert, an das das positionierte Element gebunden ist, indem ein<dashed-ident>
-Wert angegeben wird, der demanchor-name
-Eigenschaftswert des Ankerelements entspricht. position-area
-
Gibt einen
position-area
-Eigenschaftswert an, der die Position des ankerpositionierten Elements relativ zum Anker definiert. - Inset-Eigenschaften Deskriptoren
-
Geben Werte der Funktion
anchor()
an, die die Position der Kanten des ankerpositionierten Elements relativ zur Kante des Ankerelements definieren. Inset-Eigenschaften-Deskriptoren können für die folgenden Eigenschaften festgelegt werden: - Rand-Eigenschaften-Deskriptoren
-
Geben den Randwert an, der für das ankerpositionierte Element festgelegt ist. Rand-Eigenschaften-Deskriptoren können für die folgenden Eigenschaften festgelegt werden:
- Größenanpassung-Eigenschaften-Deskriptoren
-
Geben Werte der Funktion
anchor-size()
an, die die Größe des ankerpositionierten Elements relativ zur Größe des Ankerelements definieren. Größenanpassung-Eigenschaften-Deskriptoren können für die folgenden Eigenschaften festgelegt werden: - Selbstausrichtungs-Eigenschaften-Deskriptoren
-
Geben den Wert
anchor-center
an, um das ankerpositionierte Element relativ zur Mitte des Ankerelements in Block- oder Inline-Richtung auszurichten. Die Eigenschaften-Deskriptorenalign-self
undjustify-self
können den Wertanchor-center
annehmen.
Hinweis:
Wenn eine benutzerdefinierte Positionsoption auf ein Element angewendet wird, haben die von den Deskriptoren der @position-try
-Regel definierten Eigenschaftswerte Vorrang vor den Werten, die über standardmäßige CSS-Eigenschaften auf das Element gesetzt wurden.
Formale Syntax
@position-try =
@position-try <dashed-ident> { <declaration-list> }
Beispiele
Verwendung von benutzerdefinierten Positionsoptionen
In diesem Beispiel definieren wir ein Ankerelement und ein ankerpositioniertes Element und erstellen dann vier benannte benutzerdefinierte Fallback-Positionierungsoptionen. Diese Optionen werden auf das positionierte Element angewendet, um sicherzustellen, dass sein Inhalt immer sichtbar bleibt, egal wo sich das Ankerelement im Sichtfenster befindet.
HTML
Wir fügen zwei <div>
-Elemente ein, die zu einem Anker und einem ankerpositionierten Element werden:
<div class="anchor">⚓︎</div>
<div class="infobox">
<p>This is an information box.</p>
</div>
CSS
Wir gestalten zunächst das <body>
-Element so, dass es sehr groß ist, damit wir den Anker und das positionierte Element horizontal und vertikal im Sichtfenster verschieben können:
body {
width: 1500px;
height: 500px;
}
Dem Anker wird ein anchor-name
zugewiesen und es wird eine position
-Eigenschaft mit dem Wert absolute
darauf gesetzt. Wir positionieren es dann irgendwo in der Nähe der Mitte der anfänglichen <body>
-Rendering mittels top
- und left
-Werten:
.anchor {
anchor-name: --myAnchor;
position: absolute;
top: 100px;
left: 350px;
}
Anschließend verwenden wir die @position-try
-Regel, um vier benutzerdefinierte Positionsoptionen zu definieren, mit beschreibenden <dashed-ident>
-Namen, um sie zu identifizieren und ihren Zweck zu beschreiben. Jede Option platziert das positionierte Element in einer bestimmten Position um das Ankerelement und gibt ihm einen passenden 10px
-Rand zwischen dem positionierten Element und seinem Anker. Die Positionierung wird auf verschiedene Weise gehandhabt, um die verfügbaren Techniken zu demonstrieren:
- Die erste und die letzte Positionsoption verwenden eine
position-area
. - Die zweite Positionsoption verwendet
top
mit einemanchor()
-Wert undjustify-self: anchor-center
, um das positionierte Element in der Inline-Richtung am Anker zu zentrieren. - Die dritte Positionsoption verwendet
left
mit einemanchor()
-Wert, der innerhalb einercalc()
-Funktion eingewickelt ist, die10px
Abstand hinzufügt (anstelle des Abstands mitmargin
wie bei den anderen Optionen). Es wird dannalign-self: anchor-center
verwendet, um das positionierte Element in der Blockrichtung am Anker zu zentrieren.
Schließlich erhalten die linken und rechten Positionsoptionen eine schmalere width
.
@position-try --custom-left {
position-area: left;
width: 100px;
margin: 0 10px 0 0;
}
@position-try --custom-bottom {
top: anchor(bottom);
justify-self: anchor-center;
margin: 10px 0 0 0;
position-area: none;
}
@position-try --custom-right {
left: calc(anchor(right) + 10px);
align-self: anchor-center;
width: 100px;
position-area: none;
}
@position-try --custom-bottom-right {
position-area: bottom right;
margin: 10px 0 0 10px;
}
Das Infokästchen erhält eine feste Positionierung, eine position-anchor
-Eigenschaft, die auf den anchor-name
des Ankers verweist, um die beiden miteinander zu verknüpfen, und es wird mit der oberen Kante des Ankers über eine position-area
verbunden. Außerdem geben wir ihm eine feste width
und eine untere margin
. Die benutzerdefinierten Positionsoptionen werden dann in der position-try-fallbacks
-Eigenschaft referenziert, um zu verhindern, dass das positionierte Element überläuft oder aus dem Blickfeld gescrollt wird, wenn sich der Anker nahe an den Rand des Sichtfensters bewegt.
.infobox {
position: fixed;
position-anchor: --myAnchor;
position-area: top;
width: 200px;
margin: 0 0 10px 0;
position-try-fallbacks:
--custom-left, --custom-bottom,
--custom-right, --custom-bottom-right;
}
Ergebnis
Scrollen Sie die Seite und bemerken Sie die Änderung in der Platzierung des positionierten Elements, wenn sich der Anker an den verschiedenen Rändern des Sichtfensters nähert. Dies ist auf die Anwendung verschiedener Fallback-Positionsoptionen zurückzuführen.
Lassen Sie uns durchgehen, wie diese Positionsoptionen funktionieren:
- Zunächst beachten Sie, dass unsere Standardposition durch
position-area: top
definiert ist. Wenn das Infokästchen nicht in irgendeine Richtung überläuft, sitzt das Infokästchen oberhalb des Ankers, und die in derposition-try-fallbacks
-Eigenschaft gesetzten Fallback-Positionsoptionen werden ignoriert. Beachten Sie auch, dass das Infokästchen eine feste Breite und einen unteren Rand hat. Diese Werte ändern sich, wenn verschiedene Fallback-Positionsoptionen angewendet werden. - Wenn das Infokästchen zu überlaufen beginnt, versucht der Browser zuerst die Position
--custom-left
. Dadurch wird das Infokästchen mitposition-area: left
an die linke Seite des Ankers verschoben, der Rand entsprechend angepasst und dem Infokästchen eine andere Breite gegeben. - Als nächstes versucht der Browser die Position
--custom-bottom
. Dadurch wird das Infokästchen mittop
undjustify-self
an die untere Seite des Ankers verschoben, anstatt eineposition-area
zu verwenden, und ein geeigneter Rand gesetzt. Es enthält keinenwidth
-Deskriptor, sodass das Infokästchen zu seiner Standardbreite von200px
zurückkehrt, die durch diewidth
-Eigenschaft gesetzt wurde. - Der Browser versucht dann die Position
--custom-right
. Dies funktioniert ähnlich wie die Position--custom-left
, wobei derselbewidth
-Deskriptorwert angewendet wird. Wir verwenden jedochleft
undalign-self
, um das positionierte Element zu platzieren, anstatt eineposition-area
. Und wir wickeln denleft
-Wert in einecalc()
-Funktion ein, in der wir10px
hinzufügen, um Abstände zu schaffen, anstattmargin
zu verwenden. - Wenn keine der anderen Fallback-Optionen erfolgreich ist, um zu verhindern, dass das positionierte Element überläuft, versucht der Browser als letzten Ausweg die Position
--custom-bottom-right
. Dadurch wird das positionierte Element mitposition-area: bottom right
unten rechts zum Anker platziert.
Wenn eine Positionsoption angewendet wird, überschreiben ihre Werte die anfänglich auf das positionierte Element gesetzten Werte. Beispielsweise wird die Breite, die ursprünglich auf das positionierte Element gesetzt wurde, auf 200px
eingestellt, aber wenn die Positionsoption --custom-right
angewendet wird, wird ihre Breite auf 100px
festgelegt.
In einigen Fällen müssen wir Werte innerhalb der benutzerdefinierten Positionsoptionen einstellen, um die anfänglich gesetzten Werte zu deaktivieren. Die Optionen --custom-bottom
und --custom-right
verwenden Inset-Eigenschafts- und *-self: anchor-center
-Werte, um das positionierte Element zu platzieren, daher entfernen wir den zuvor gesetzten position-area
-Wert in jedem Fall, indem wir position-area: none
setzen. Wenn wir dies nicht tun würden, würde der anfänglich gesetzte Wert position-area: top
weiterhin wirksam bleiben und die anderen Positionierungsinformationen beeinträchtigen.
Spezifikationen
Specification |
---|
CSS Anchor Positioning # at-ruledef-position-try |
Browser-Kompatibilität
Report problems with this compatibility data on GitHubdesktop | mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
@position-try |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support
- No support
- No support
- Experimental. Expect behavior to change in the future.
- See implementation notes.
Siehe auch
position-area
position-anchor
position-try-fallbacks
position-try
- Die
anchor()
-Funktion - Die
anchor-size()
-Funktion - CSS-Anker-Positionierung Modul
- Verwendung von CSS-Anker-Positionierung Leitfaden
- Überlauf behandeln: Fallbacks und bedingtes Verstecken Leitfaden
CSSPositionTryRule