position-area
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die position-area CSS Eigenschaft ermöglicht es, ein Anker-positioniertes Element relativ zu den Kanten seines zugehörigen Ankerelements zu positionieren, indem das positionierte Element auf einem oder mehreren Feldern eines impliziten 3x3-Rasters platziert wird, wobei das Ankerelement die mittlere Zelle darstellt.
position-area bietet eine bequeme Alternative zum Verbinden und Positionieren eines Elements relativ zu seinem Anker über Einsetz-Eigenschaften und die anchor() Funktion. Das rasterbasierte Konzept löst den häufigen Anwendungsfall, die Kanten des Blockcontainers des positionierten Elements relativ zu den Kanten seines Standardankerelements zu positionieren.
Wenn ein Element kein Standardankerelement hat oder kein absolut positioniertes Element ist, bleibt diese Eigenschaft ohne Wirkung.
Hinweis:
Diese Eigenschaft wurde ursprünglich in den Chromium-Browsern als inset-area bezeichnet und unterstützt, mit denselben Eigenschaftswerten. Beide Eigenschaftsnamen werden für eine kurze Zeit unterstützt, um die Kompatibilität rückwärts zu gewährleisten.
Syntax
/* Default value */
position-area: none;
/* Two <position-area> keywords defining a single specific tile */
position-area: top left;
position-area: start end;
position-area: block-start center;
position-area: inline-start block-end;
position-area: x-start y-end;
position-area: center self-y-end;
/* Two <position-area> keywords spanning two tiles */
position-area: top span-left;
position-area: center span-start;
position-area: inline-start span-block-end;
position-area: y-start span-x-end;
/* Two <position-area> keywords spanning three tiles */
position-area: top span-all;
position-area: block-end span-all;
position-area: self-x-start span-all;
/* One <position-area> keyword with an implicit second <position-area> keyword */
position-area: top; /* equiv: top span-all */
position-area: inline-start; /* equiv: inline-start span-all */
position-area: center; /* equiv: center center */
position-area: span-all; /* equiv: center center */
position-area: end; /* equiv: end end */
/* Global values */
position-area: inherit;
position-area: initial;
position-area: revert;
position-area: revert-layer;
position-area: unset;
Werte
Der Eigenschaftswert besteht aus zwei <position-area> Schlüsselbegriffen oder dem Schlüsselwort none. Wenn nur ein <position-area> Schlüsselbegriff angegeben wird, ist der zweite Schlüsselbegriff impliziert.
<position-area>-
Gibt den Bereich des Positionierungsrasters an, auf dem ausgewählte positionierte Elemente platziert werden sollen.
none-
Kein Positionierungsbereich wird festgelegt.
Beschreibung
Die position-area Eigenschaft bietet eine Alternative zur anchor() Funktion für die Positionierung von Elementen relativ zu Ankern. position-area basiert auf dem Konzept eines 3x3 Rasters von Feldern, das Positionierungsraster genannt wird, wobei das Ankerelement die mittlere Kachel ist:
Die Rasterfelder sind in Zeilen und Spalten unterteilt:
- Die drei Zeilen werden durch die physikalischen Werte
top,centerundbottomrepräsentiert. Sie haben auch logische Entsprechungen wieblock-start,centerundblock-endsowie Koordinatenäquivalente —y-start,centerundy-end. - Die drei Spalten werden durch die physikalischen Werte
left,centerundrightrepräsentiert. Sie haben auch logische Entsprechungen wieinline-start,centerundinline-endsowie Koordinatenäquivalente —x-start,centerundx-end.
Die Abmessungen der mittleren Kachel werden durch den umgebenden Block des Ankerelements definiert, während die Abmessungen der äußeren Kanten des Rasters durch den umgebenden Block des positionierten Elements definiert werden.
Der <position-area> Wert besteht aus einem oder zwei Schlüsselwörtern, die den Bereich des Rasters definieren, in dem das positionierte Element platziert werden soll. Genauer gesagt ist der umgebende Block des positionierten Elements auf den Rasterbereich gesetzt.
Zum Beispiel:
- Sie können einen Zeilenwert und einen Spaltenwert angeben, um das positionierte Element in einem einzelnen, speziellen Rasterquadrat zu platzieren — zum Beispiel
top left(logische Entsprechungstart start) oderbottom center(logische Entsprechungend center) wird das positionierte Element im oberen rechten oder unteren mittleren Quadrat platzieren. - Sie können einen Zeilen- oder Spaltenwert plus einen
span-*Wert angeben, um sich über zwei oder drei Zellen zu erstrecken. Der erste Wert gibt die Zeile oder Spalte an, in der das positionierte Element platziert wird, wobei es zunächst in der Mitte platziert wird, und der andere Wert gibt die anderen Kacheln dieser Zeile oder Spalte an, über die sich das Element erstrecken soll. Zum Beispiel:top span-leftlässt das positionierte Element in der Mitte der oberen Zeile platzieren und erstreckt sich über die mittleren und linken Kacheln dieser Zeile.block-end span-inline-endlässt das positionierte Element in der Mitte der Block-Endzeile platzieren und erstreckt sich über die mittleren und inline-Endkacheln dieser Zeile.bottom span-allundy-end span-alllassen das positionierte Element in der Mitte der unteren Zeile platzieren und sich über drei Zellen erstrecken, in diesem Fall die linken, mittleren und rechten Kacheln der unteren Zeile.
Für detaillierte Informationen zu Ankerfunktionen, Verwendung und der position-area Eigenschaft, siehe die CSS Ankerpositionierungs Modulstartseite und den Using CSS anchor positioning Leitfaden, speziell den Abschnitt über Festlegen einer position-area.
Angepasstes Standardverhalten
Wenn auf einem positionierten Element ein <position-area> Wert festgelegt ist, werden einige seiner Eigenschaften in ihrem Standardverhalten angepasst, um eine gute Standardausrichtung zu bieten.
Selbst-Ausrichtungs-Eigenschaft normal Wert
Der normal Wert der Selbst-Ausrichtungseigenschaften, einschließlich align-items, align-self, justify-items, und justify-self, verhält sich entweder wie start, end oder anchor-center. Welchen Wert eine Selbst-Ausrichtungseigenschaft standardmäßig annimmt, hängt von der Positionierung des Elements ab:
- Wenn der
position-areaWert den mittleren Bereich in einer Achse angibt, ist die Standardausrichtung in dieser Achseanchor-center. - Andernfalls verhält sich die Ausrichtung entgegengesetzt zu dem Bereich, der durch die
position-areaEigenschaft angegeben wird. Zum Beispiel: Wenn derposition-areaWert den Startbereich seiner Achse angibt, ist die Standardausrichtung in dieser Achseend.
Zum Beispiel: Wenn der Schreibmodus auf horizontal-tb gesetzt ist, bewirkt position-area: top span-x-start, dass das positionierte Element in der Mitte der oberen Zeile platziert wird und sich über die mittleren und anfänglichen Kacheln dieser Zeile erstreckt. In diesem Fall wird die Selbst-Ausrichtungseigenschaften standardmäßig auf align-self: end und justify-self: anchor-center gesetzt.
Einsetz-Eigenschaften und Werte
Wenn ein Anker-positioniertes Element unter Verwendung der position-area Eigenschaft platziert wird, geben alle festgelegten Einsetz-Eigenschaften wie top oder inset-inline-end Offsets von der Positionierungsfläche an. Einige andere Eigenschaftswerte, wie max-block-size: 100%, beziehen sich auch auf die Positionierungsfläche. Alle Einsetz-Eigenschaften, die auf auto gesetzt sind oder standardmäßig auto sind, verhalten sich so, als ob ihr Wert auf 0 gesetzt ist.
Ein Exkurs zur Breite des positionierten Elements
Wenn das positionierte Element keine spezifische Größe hat, wird seine Größe standardmäßig auf seine intrinsische Größe gesetzt, wird aber auch von der Größe des Positionierungsraster beeinflusst.
Wenn das positionierte Element in einem einzelnen oberen mittleren, unteren mittleren oder mittleren mittleren Feld platziert wird, entspricht seine Blockgröße der Größe des umgebenden Blocks des Ankers und wächst nach oben, unten oder in beiden Richtungen. Das positionierte Element wird mit dem angegebenen Rasterfeld ausgerichtet, aber die gleiche Breite wie das Ankerelement annehmen. Es lässt jedoch keinen Inhalt überlaufen — seine minimale width wird auf min-content gesetzt (wie definiert durch die Breite seines längsten Wortes).
Wenn das positionierte Element in einem anderen einzigen Rasterfeld platziert wird (zum Beispiel mit position-area: top left) oder so eingestellt ist, dass es sich über zwei oder mehr Rasterfelder erstreckt (z.B. mit position-area: bottom span-all), wird es mit dem angegebenen Rasterbereich ausgerichtet, sich aber so verhalten, als ob es eine width von max-content hätte. Es wird gemäß seiner umgebenden Blockgröße dimensioniert, die die Größe ist, die ihm auferlegt wurde, als es auf position: fixed eingestellt wurde. Es wird sich so weit wie der Textinhalt ausdehnen, obwohl es auch durch den Rand des <body> eingeschränkt werden kann.
Verwendung von position-area zur Positionierung von Popovers
Wenn Sie position-area verwenden, um Popovers zu positionieren, beachten Sie, dass die Standardstile für Popovers mit der Position, die Sie erreichen möchten, in Konflikt stehen können. Die üblichen Verdächtigen sind die Standardstile für margin und inset, daher ist es ratsam, diese zurückzusetzen:
.my-popover {
margin: 0;
inset: auto;
}
Die CSS Arbeitsgruppe untersucht Möglichkeiten, diesen Workaround zu vermeiden.
Formale Definition
| Anfangswert | none |
|---|---|
| Anwendbar auf | Positioned elements with a default anchor element |
| Vererbt | Nein |
| Berechneter Wert | wie angegeben |
| Animationstyp | diskret |
Formale Syntax
position-area =
none |
<position-area>
<position-area> =
[ left | center | right | span-left | span-right | x-start | x-end | span-x-start | span-x-end | self-x-start | self-x-end | span-self-x-start | span-self-x-end | span-all ] || [ top | center | bottom | span-top | span-bottom | y-start | y-end | span-y-start | span-y-end | self-y-start | self-y-end | span-self-y-start | span-self-y-end | span-all ] |
[ block-start | center | block-end | span-block-start | span-block-end | span-all ] || [ inline-start | center | inline-end | span-inline-start | span-inline-end | span-all ] |
[ self-block-start | center | self-block-end | span-self-block-start | span-self-block-end | span-all ] || [ self-inline-start | center | self-inline-end | span-self-inline-start | span-self-inline-end | span-all ] |
[ start | center | end | span-start | span-end | span-all ]{1,2} |
[ self-start | center | self-end | span-self-start | span-self-end | span-all ]{1,2}
Beispiele
>Einfaches Beispiel
In diesem Beispiel wird ein positioniertes Element mit der position-area Eigenschaft an seinem zugehörigen Anker befestigt und positioniert.
HTML
Das HTML enthält ein <div> und ein <p>. Das <p> wird mit CSS relativ zum <div> positioniert. Wir fügen auch einen Stilblock hinzu, der sichtbar gemacht wird. Alle Elemente sind über das contenteditable Attribut direkt bearbeitbar eingestellt.
<div class="anchor" contenteditable="true">⚓︎</div>
<p class="positionedElement" contenteditable="true">This can be edited.</p>
<style contenteditable="true">.positionedElement {
position-area: top center;
}
</style>
CSS
Wir konvertieren das <div> in ein Ankerelement mit der anchor-name Eigenschaft. Dann verknüpfen wir das absolut positionierte <p> mit ihm, indem wir seinen position-anchor Wert auf denselben Ankernamen setzen.
Wir setzen den anfänglichen position-area Wert auf top center. Dieser Wert wird auf einem p Selektor gesetzt, daher hat der Wert weniger Spezifität als jeder Wert, der dem <style> Block's .positionedElement Klassenselektor hinzugefügt wird. Folglich können Sie den anfänglichen position-area Wert überschreiben, indem Sie einen position-area Wert innerhalb des Stilblocks festlegen.
.anchor {
anchor-name: --infobox;
background: palegoldenrod;
font-size: 3em;
width: fit-content;
border: 1px solid goldenrod;
margin: 100px auto;
}
p {
position: absolute;
position-anchor: --infobox;
position-area: top center;
margin: 0;
background-color: darkkhaki;
border: 1px solid darkolivegreen;
}
style {
display: block;
white-space: pre;
font-family: monospace;
background-color: #ededed;
-webkit-user-modify: read-write-plaintext-only;
line-height: 1.5;
padding: 10px;
}
Ergebnisse
Versuchen Sie, die Menge an Text im Anker-positionierten Element zu ändern, um zu sehen, wie es wächst. Versuchen Sie auch, den Wert der position-area Eigenschaft in etwas anderes zu ändern, wie center.
Vergleich der position-area Werte
Diese Demo erstellt einen Anker und verbindet ein positioniertes Element mit ihm. Es bietet auch ein Dropdown-Menü, das Ihnen ermöglicht, verschiedene position-area Werte zu wählen, um sie auf das positionierte Element anzuwenden und ihre Wirkung zu sehen. Eine der Optionen führt dazu, dass ein Textfeld erscheint, in dem Sie einen benutzerdefinierten Wert eingeben können. Schließlich wird ein Kontrollkästchen bereitgestellt, um writing-mode: vertical-lr ein- und auszuschalten, damit Sie beobachten können, wie sich die Auswirkungen der position-area Werte in verschiedenen Schreibmodi unterscheiden.
HTML
Im HTML spezifizieren wir zwei <div> Elemente, eines mit einer Klasse von anchor und eines mit einer Klasse von infobox. Diese sind als das Ankerelement bzw. das positionierte Element gedacht, das wir mit ihm verknüpfen werden. Wir haben das contenteditable Attribut auf beiden eingeschlossen, was sie direkt bearbeitbar macht.
Wir haben auch zwei Formulare hinzugefügt, die die <select> und <input type="text"> Elemente zum Festlegen verschiedener position-area Werte und das <input type="checkbox"> Element zum Umschalten des vertikalen writing-mode enthalten. Der Code dafür sowie das JavaScript wurden der Übersichtlichkeit halber verborgen.
<div class="anchor" contenteditable>⚓︎</div>
<div class="infobox">
<p contenteditable>You can edit this text.</p>
</div>
CSS
Im CSS deklarieren wir zuerst das anchor <div> als ein Ankerelement, indem wir einen Ankernamen darauf setzen durch die anchor-name Eigenschaft.
Das positionierte Element ist mit dem Ankerelement verbunden, indem es seinen Ankernamen als Wert der position-anchor Eigenschaft des positionierten Elements setzt. Wir geben ihm auch eine anfängliche Position mit position-area: top left; dies wird überschrieben, wenn neue Werte aus dem <select> Menü ausgewählt werden. Schließlich setzen wir seine opacity auf 0.8, so dass, wenn dem positionierten Element ein position-area Wert zugewiesen wird, der es über dem Anker platziert, Sie die Position der Elemente relativ zueinander noch sehen können.
.anchor {
anchor-name: --my-anchor;
}
.infobox {
position-anchor: --my-anchor;
position: fixed;
opacity: 0.8;
position-area: top left;
}
Ergebnis
Das Ergebnis ist wie folgt:
Versuchen Sie, neue position-area Werte aus dem <select> Menü auszuwählen, um deren Wirkung auf die Position der Infobox zu sehen. Wählen Sie den "Custom" Wert und versuchen Sie, einige benutzerdefinierte position-area Werte in das Texteingabefeld einzugeben, um deren Wirkung zu sehen. Fügen Sie Text zum Anker und den Anker-positionierten Elementen hinzu, um zu sehen, wie das Anker-positionierte Element basierend auf dem position-area Wert wächst. Schließlich aktivieren Sie das Kontrollkästchen und experimentieren Sie mit verschiedenen position-area Werten, um zu sehen, welche im gleichen Ergebnis in unterschiedlichen Schreibmodi resultieren und welche unterschiedliche Ergebnisse liefern.
Spezifikationen
| Specification |
|---|
| CSS Anchor Positioning> # position-area> |
Browser-Kompatibilität
Loading…
Siehe auch
anchor-nameposition-anchorposition-try-fallbacks- Die
anchor()Funktion - Der
<position-area>Wert - Verwendung der CSS Ankerpositionierung Leitfaden
- Fallback-Optionen und bedingtes Verbergen bei Überlauf Leitfaden
- CSS Ankerpositionierung Modul