@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 Positionierungsversuche zu definieren, die zur Festlegung von Positionierung und Ausrichtung für Anker-Positionierte Elemente verwendet werden kann. Eine oder mehrere Sätze von Fallback-Optionen für Positionierungsversuche können auf das verankerte Element über die position-try-fallbacks-Eigenschaft oder die position-try-Kurzschreibweise angewendet werden. Wenn das positionierte Element in eine Position verschoben wird, bei der es beginnt, seinen enthaltenden Block oder das Ansichtsfenster zu überlaufen, wählt der Browser die erste Fallback-Option für Positionierungsversuche, die er findet, um das positionierte Element vollständig zurück auf den Bildschirm zu bringen.
Jede Positionsoption wird mit einem <dashed-ident> benannt und enthält eine Deskriptorliste, die Deklarationen spezifiziert, die Informationen wie Einfügeposition, Rand, Größe und Selbst-Ausrichtung definieren. Das <dashed-ident> wird verwendet, um die benutzerdefinierte Positionsoption in der position-try-fallbacks-Eigenschaft und der position-try-Kurzschreibweise zu referenzieren.
Für detaillierte Informationen zu Anker-Features und der Verwendung von Fallback-Optionen für Positionierungsversuche lesen Sie bitte die CSS Anker-Positionierung Modulstartseite und den Leitfaden für Fallback-Optionen und bedingtes Ausblenden bei Überlauf.
Syntax
@position-try --try-option-name {
descriptor-list
}
Hinweis:
Die --try-option-name ist ein <dashed-ident>, das einen identifizierenden Namen für die benutzerdefinierte Positionsoption spezifiziert, die 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-
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-nameEigenschaftswert des Ankerelements entspricht. position-area-
Gibt einen
position-area-Eigenschaftswert an, der die Position des Anker-Positionierten Elements relativ zum Anker definiert. - Einfügen Eigenschaft Deskriptoren
-
Legen
anchor()-Funktionswerte fest, die die Position der Kanten des Anker-Positionierten Elements relativ zur Kante des Ankerelements definieren. Einfügen-Eigenschaftsdeskriptoren können festgelegt werden, die die folgenden Eigenschaften darstellen: - Rand Eigenschaft Deskriptoren
-
Geben den Rand an, der auf das Anker-Positionierte Element gesetzt ist. Rand-Eigenschaftsdeskriptoren können festgelegt werden, die die folgenden Eigenschaften darstellen:
- Größendefinition Eigenschaftsdeskriptoren
-
Geben
anchor-size()-Funktionswerte an, die die Größe des Anker-Positionierten Elements relativ zur Größe des Ankerelements definieren. Größendefinitions-Eigenschaftsdeskriptoren können festgelegt werden, die die folgenden Eigenschaften darstellen: - Selbst-Ausrichtung Eigenschaftsdeskriptoren
-
Geben den
anchor-center-Wert an, um das Anker-Positionierte Element relativ zur Mitte des Ankerelements in Block- oder Inline-Richtung auszurichten.align-selfundjustify-selfEigenschaftsdeskriptoren können denanchor-center-Wert annehmen.
Hinweis:
Wenn eine benutzerdefinierte Positionsoption auf ein Element angewendet wird, haben die in der @position-try-At-Regel definierten Eigenschaftswerte Vorrang vor den Werten, die über Standard-CSS-Eigenschaften auf dem Element festgelegt sind.
Formale Syntax
@position-try =
@position-try <dashed-ident> { <declaration-list> }
Beispiele
Verwendung einer benutzerdefinierten Positionsoption
In diesem Beispiel definieren wir ein Ankerelement und ein Anker-Positioniertes Element und erstellen dann vier benannte benutzerdefinierte Fallback-Optionen für Positionierungsversuche. Diese Optionen werden auf das positionierte Element angewendet, um sicherzustellen, dass seine Inhalte immer sichtbar sind, egal wo sich das Ankerelement im Ansichtsfenster befindet.
HTML
Wir fügen zwei <div>-Elemente hinzu, die zum Anker und zum Anker-Positionierten Element werden:
<div class="anchor">⚓︎</div>
<div class="infobox">
<p>This is an information box.</p>
</div>
CSS
Zuerst gestalten wir das <body>-Element sehr groß, sodass wir den Anker und das positionierte Element im Ansichtsfenster sowohl horizontal als auch vertikal bewegen können:
body {
width: 1500px;
height: 500px;
}
Dem Anker wird ein anchor-name gegeben und ein position-Wert von absolute darauf gesetzt. Wir positionieren es dann irgendwo in der Nähe der Mitte der anfänglichen <body>-Darstellung unter Verwendung von 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 in einer bestimmten Position um das Ankerelement und gibt ihm einen entsprechenden Rand von 10px zwischen dem positionierten Element und seinem Anker. Die Positionierung wird auf verschiedene Arten gehandhabt, um die verfügbaren unterschiedlichen Techniken zu demonstrieren:
- Die erste und letzte Positionsoptionen verwenden eine
position-area. - Die zweite Positionsoption verwendet
topmit einemanchor()-Wert undjustify-self: anchor-center, um das positionierte Element inline auf dem Anker zu zentrieren. - Die dritte Positionsoption verwendet
leftmit einemanchor()-Wert, eingebettet in einecalc()-Funktion, die10pxAbstand hinzufügt (anstatt den Abstand mitmarginwie die anderen Optionen zu erzeugen). Sie verwendet dannalign-self: anchor-center, um das positionierte Element in Block-Richtung auf dem Anker zu zentrieren.
Schließlich werden die linken und rechten Positionsoptionen mit einer schmäleren width versehen.
@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;
}
Die Infobox erhält eine feste Positionierung, eine position-anchor-Eigenschaft, die den Anker des anchor-name referenziert, um die beiden miteinander zu verknüpfen, und ist an der oberen Kante des Ankers mit einer position-area verankert. Wir geben ihr auch eine feste width und etwas unteren 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 in der Nähe des Randes des Ansichtsfensters befindet.
.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 der Platzierung des positionierten Elements, während sich der Anker den verschiedenen Rändern des Ansichtsfensters nähert. Dies liegt daran, dass unterschiedliche Fallback-Positionierungsoptionen angewendet werden.
Lassen Sie uns darüber sprechen, wie diese Positionsoptionen funktionieren:
- Zuerst beachten Sie, dass unsere Standardposition durch
position-area: topdefiniert ist. Wenn die Infobox nicht in irgendeine Richtung über die Seite herausragt, sitzt die Infobox über dem Anker, und die in derposition-try-fallbacks-Eigenschaft festgelegten Fallback-Positionierungsoptionen werden ignoriert. Beachten Sie auch, dass die Infobox eine feste Breite und einen unteren Rand hat. Diese Werte ändern sich, wenn verschiedene Fallback-Optionen für Positionierungsversuche angewendet werden. - Wenn die Infobox zu überlaufen beginnt, versucht der Browser zuerst die
--custom-leftPosition. Diese bewegt die Infobox links vom Anker mitposition-area: left, passt den Rand entsprechend an und gibt der Infobox auch eine andere Breite. - Als nächstes versucht der Browser die
--custom-bottomPosition. Diese bewegt die Infobox unten am Anker unter Verwendung vontopundjustify-selfanstelle vonposition-areaund setzt einen entsprechenden Rand. Es gibt keinenwidth-Deskriptor, sodass die Infobox zu ihrer Standardbreite von200pxzurückkehrt, die durch diewidth-Eigenschaft festgelegt wird. - Der Browser versucht als nächstes die
--custom-rightPosition. Dies funktioniert ähnlich wie die--custom-leftPosition, mit demselbenwidth-Deskriptorwert. Wir verwenden jedochleftundalign-self, um das positionierte Element zu platzieren, anstatt einerposition-area. Und wir umschließen denleft-Wert in einercalc()-Funktion, in der wir10pxhinzufügen, um den Abstand zu erzeugen, anstattmarginzu verwenden. - Wenn keine der anderen Fallback-Optionen erfolgreich das Überlaufen des positionierten Elements verhindert, versucht der Browser die
--custom-bottom-rightPosition als letzten Ausweg. Diese platziert das positionierte Element unten rechts am Anker unter Verwendung vonposition-area: bottom right.
Wenn eine Positionsoption angewendet wird, überschreiben ihre Werte die anfänglich auf dem positionierten Element festgelegten Werte. Beispielsweise ist die width, die auf dem positionierten Element zunächst festgelegt wurde, 200px, aber wenn die --custom-right-Positionsoption angewendet wird, wird ihre Breite auf 100px gesetzt.
In einigen Fällen müssen wir Werte innerhalb der benutzerdefinierten Positionsoptionen festlegen, um die anfänglichen Werte zu deaktivieren. Die --custom-bottom und --custom-right Optionen verwenden Einfüge-Eigenschaften und *-self: anchor-center Werte, um das positionierte Element zu platzieren, daher entfernen wir den zuvor festgelegten position-area Wert in jedem Fall durch Setzen von position-area: none. Wenn wir dies nicht tun würden, würde der anfänglich gesetzte Wert position-area: top weiterhin wirksam sein und die andere Positionierungsinformationen beeinträchtigen.
Spezifikationen
| Specification |
|---|
| CSS Anchor Positioning # at-ruledef-position-try |
Browser-Kompatibilität
Siehe auch
position-areaposition-anchorposition-try-fallbacksposition-try- Die
anchor()-Funktion - Die
anchor-size()-Funktion - CSS Anker-Positionierung Modul
- Verwendung der CSS Anker-Positionierung Leitfaden
- Fallback-Optionen und bedingtes Ausblenden bei Überlauf Leitfaden
CSSPositionTryRule