@position-try
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die @position-try CSS-At-Regel wird verwendet, um eine benutzerdefinierte Fallback-Option für Positionsversuche zu definieren, die zur Definition von Positionierung und Ausrichtung für ankerpositionierte Elemente genutzt werden kann. Eine oder mehrere Sätze von Positionsversuchs-Fallback-Optionen können über die position-try-fallbacks-Eigenschaft oder die position-try-Kurzform auf das Ankerelement angewendet werden. Wenn das positionierte Element an eine Position verschoben wird, an der es beginnt, seinen umgebenden Block oder das Ansichtsfenster zu überlaufen, wählt der Browser die erste gefundene Positionsversuchs-Fallback-Option, die das positionierte Element vollständig zurück auf den Bildschirm bringt.
Jede Positionsoption wird mit einem <dashed-ident> benannt und enthält eine Descriptor-Liste, die Deklarationen spezifiziert, die Informationen wie Einfügeposition, Rand, Größenanpassung und Selbstausrichtung definieren. Das <dashed-ident> wird verwendet, um die benutzerdefinierte Positionsoption in der position-try-fallbacks-Eigenschaft und der position-try-Kurzform zu referenzieren.
Für detaillierte Informationen zu Ankerfunktionen und der Nutzung von Fallback-Optionen für Positionsversuche, siehe die Modul-Landingpage CSS-Ankerpositionierung und den Leitfaden Fallback-Optionen und bedingtes Verstecken bei Überläufen.
Syntax
@position-try --try-option-name {
descriptor-list
}
Hinweis:
Der --try-option-name ist ein <dashed-ident>, der einen Identifikationsnamen für die benutzerdefinierte Positionsoption spezifiziert, der dann verwendet werden kann, um diese Fallback-Option zur position-try-fallbacks-Liste hinzuzufügen.
Deskriptoren
Die Deskriptoren spezifizieren Eigenschaftswerte, die das Verhalten der benutzerdefinierten Positionsoption definieren, d.h. wo das positionierte Element platziert wird.
position-anchor-
Spezifiziert einen
position-anchor-Eigenschaftswert, 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-
Spezifiziert einen
position-area-Eigenschaftswert, der die Position des ankerpositionierten Elements relativ zum Anker definiert. - Deskriptoren der Einfügeigenschaft
-
Spezifizieren
anchor()-Funktionswerte, die die Position der Kanten des ankerpositionierten Elements relativ zur Kante des Ankerelements definieren. Einfügeigenschafts-Deskriptoren können gesetzt werden, die die folgenden Eigenschaften repräsentieren: - Rand-Eigenschaftsdeskriptoren
-
Spezifizieren den gesetzten Rand auf dem ankerpositionierten Element. Rand-Eigenschaftsdeskriptoren können gesetzt werden, die die folgenden Eigenschaften repräsentieren:
- Größenanpassungs-Eigenschaftsdeskriptoren
-
Spezifizieren
anchor-size()-Funktionswerte, die die Größe des ankerpositionierten Elements relativ zur Ankerelementgröße definieren. Größenanpassungs-Eigenschaftsdeskriptoren können gesetzt werden, die die folgenden Eigenschaften repräsentieren: - Selbstausrichtungs-Eigenschaftsdeskriptoren
-
Spezifizieren den
anchor-center-Wert, um das ankerpositionierte Element relativ zur Mitte des Ankerelements in Block- oder Inline-Richtung auszurichten. Diealign-self- undjustify-self-Eigenschaftsdeskriptoren können denanchor-center-Wert annehmen.
Hinweis:
Wenn eine benutzerdefinierte Positionsoption auf ein Element angewendet wird, haben die in der @position-try-At-Regel-Deskriptor definierten Eigenschaftswerte Vorrang vor den über Standard-CSS-Eigenschaften auf das Element gesetzten Werten.
Formale Syntax
@position-try =
@position-try <dashed-ident> { <declaration-list> }
Beispiele
>Verwendung der benutzerdefinierten Positionsoption
In diesem Beispiel definieren wir ein Ankerelement und ein ankerpositioniertes Element und erstellen dann vier benannte benutzerdefinierte Positionsversuchs-Fallback-Optionen. Diese Optionen werden auf das positionierte Element angewendet, um sicherzustellen, dass dessen Inhalte immer sichtbar sind, egal wo sich das Ankerelement im Ansichtsfenster 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 stylen zunächst das <body>-Element, um es sehr groß zu machen, damit wir den Anker und das positionierte Element im Ansichtsfenster, sowohl horizontal als auch vertikal, scrollen können:
body {
width: 1500px;
height: 500px;
}
Dem Anker wird ein anchor-name zugewiesen und er hat einen position-Wert von absolute gesetzt. Wir positionieren ihn dann irgendwo in der Nähe des Zentrums des anfänglichen <body>-Renderings mit top- und left-Werten:
.anchor {
anchor-name: --my-anchor;
position: absolute;
top: 100px;
left: 350px;
}
Als Nächstes verwenden wir die @position-try-At-Regel, um vier benutzerdefinierte Positionsoptionen zu definieren, mit beschreibenden <dashed-ident>-Namen, um sie zu identifizieren und ihren Zweck zu beschreiben. Jede platziert das positionierte Element an einer bestimmten Position um das Ankerelement und gibt ihm einen entsprechenden 10px-Rand zwischen dem positionierten Element und seinem Anker. Die Positionierung wird auf verschiedene Arten gehandhabt, um die verschiedenen verfügbaren Techniken zu demonstrieren:
- Die erste und letzte Positionsoption verwenden ein
position-area. - Die zweite Positionsoption verwendet
topmit einemanchor()-Wert undjustify-self: anchor-center, um das positionierte Element in der Inline-Richtung am Anker zu zentrieren. - Die dritte Positionsoption verwendet
leftmit einemanchor()-Wert, der in einencalc()-Funktionsaufruf eingeschlossen ist, der10pxAbstand hinzufügt (anstatt wie die anderen Optionen den Abstand mitmarginzu schaffen). Sie verwendet dannalign-self: anchor-center, um das positionierte Element in der Blockrichtung am Anker zu zentrieren.
Schließlich werden den linken und rechten Positionsoptionen eine schmalere width
@position-try --custom-left {
position-area: left;
width: 100px;
margin-right: 10px;
}
@position-try --custom-bottom {
top: anchor(bottom);
justify-self: anchor-center;
margin-top: 10px;
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;
}
Der Infobereich erhält eine feste Positionierung, eine position-anchor-Eigenschaft, die den anchor-name des Ankers referenziert, um die beiden Elemente miteinander zu verknüpfen, und er ist mit der oberen Kante des Ankers durch ein position-area verbunden. Wir geben ihm auch eine feste width und einige 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 Ansichtsfenster gescrollt wird, wenn der Anker in die Nähe des Randes des Ansichtsfensters kommt.
.infobox {
position: fixed;
position-anchor: --my-anchor;
position-area: top;
width: 200px;
margin-bottom: 10px;
position-try-fallbacks:
--custom-left, --custom-bottom, --custom-right, --custom-bottom-right;
}
Ergebnis
Scrollen Sie die Seite, und beachten Sie die Änderung in der Platzierung des positionierten Elements, wenn der Anker den verschiedenen Rändern des Ansichtsfensters näher kommt. Dies liegt an den verschiedenen angewendeten Fallback-Positionsoptionen.
Lassen Sie uns besprechen, wie diese Positionsoptionen funktionieren:
- Zunächst beachten Sie, dass unsere Standardposition durch
position-area: topdefiniert ist. Wenn der Infobereich die Seite in keiner Richtung überläuft, sitzt der Infobereich über dem Anker, und die in derposition-try-fallbacks-Eigenschaft gesetzten Positionsversuchs-Fallback-Optionen werden ignoriert. Beachten Sie auch, dass der Infobereich eine fixe Breite und einen unteren Rand hat. Diese Werte werden sich ändern, wenn verschiedene Positionsversuchs-Fallback-Optionen angewendet werden. - Wenn der Infobereich zu überlaufen beginnt, versucht der Browser zuerst die
--custom-left-Position. Dies bewegt den Infobereich links vom Anker mitposition-area: left, passt den Rand entsprechend an und gibt dem Infobereich auch eine andere Breite. - Als Nächstes versucht der Browser die
--custom-bottom-Position. Dies bewegt den Infobereich unter den Anker mittopundjustify-selfanstelle einesposition-areaund setzt einen entsprechenden Rand. Es enthält keinenwidth-Deskriptor, sodass der Infobereich zu seiner Standardbreite von200pxzurückkehrt, die durch diewidth-Eigenschaft gesetzt ist. - Der Browser versucht anschließend die
--custom-right-Position. Dies funktioniert ähnlich wie die--custom-left-Position, wobei der gleichewidth-Deskriptorwert angewendet wird. Wir verwenden jedochleftundalign-self, um das positionierte Element zu platzieren, anstelle einesposition-area. Und wir umschließen denleft-Wert in einercalc()-Funktion, in der wir10pxhinzufügen, um den Abstand zu schaffen, anstattmarginzu verwenden. - Wenn keine der anderen Fallback-Optionen erfolgreich verhindert, dass das positionierte Element überläuft, versucht der Browser als letzte Möglichkeit die
--custom-bottom-right-Position. Diese platziert das positionierte Element rechts unten am Anker mitposition-area: bottom right.
Wenn eine Positionsoption angewendet wird, ihre Werte überschreiben die anfänglich auf dem positionierten Element gesetzten Werte. Beispielsweise ist die ursprünglich auf dem positionierten Element gesetzte width 200px, aber wenn die --custom-right-Positionsoption angewendet wird, wird ihre Breite auf 100px gesetzt.
In einigen Fällen müssen wir Werte in den benutzerdefinierten Positionsoptionen setzen, um die anfänglichen Werte auszuschalten. Die --custom-bottom und --custom-right Optionen verwenden Einfügeigenschaften 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 das nicht tun würden, würde der anfänglich gesetzte position-area: top-Wert noch wirksam sein und mit den anderen Positionierungsinformationen interferieren.
Spezifikationen
| Specification |
|---|
| CSS Anchor Positioning> # at-ruledef-position-try> |
Browser-Kompatibilität
Loading…
Siehe auch
position-areaposition-anchorposition-try-fallbacksposition-try- Die
anchor()-Funktion - Die
anchor-size()-Funktion - Modul CSS-Ankerpositionierung
- Verwendung der CSS-Ankerpositionierung-Leitfaden
- Fallback-Optionen und bedingtes Verstecken bei Überläufen-Leitfaden
CSSPositionTryRule