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 einem verankerten Positionselement, relativ zu den Kanten seines zugeordneten Ankerelements positioniert zu werden, indem das positionierte Element auf einer oder mehreren Fliesen eines impliziten 3x3-Rasters platziert wird, bei dem das Ankerelement die mittlere Zelle ist.
position-area
bietet eine bequeme Alternative zum Verknüpfen und Positionieren eines Elements relativ zu seinem Anker über Einfügeeigenschaften und die anchor()
Funktion. Das grid-basierte Konzept löst den häufigen Anwendungsfall, die Kanten des enthaltenden Blocks des positionierten Elements relativ zu den Kanten seines Standard-Ankerelements zu positionieren.
Wenn ein Element kein Standard-Ankerelement hat oder kein absolut positioniertes Element ist, hat diese Eigenschaft keine Wirkung.
Hinweis:
Diese Eigenschaft wurde ursprünglich in Chromium-Browsern als inset-area
mit denselben Eigenschaftswerten benannt und unterstützt. Beide Eigenschaftsnamen werden eine Zeit lang unterstützt, um die Abwärtskompatibilität 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 y-self-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: x-self-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, wird der zweite Schlüsselbegriff impliziert.
<position-area>
-
Gibt den Bereich des Positionierungsrasters an, in dem die ausgewählten positionierten Elemente platziert werden sollen.
none
-
Es wird kein Positionierungsbereich festgelegt.
Beschreibung
Die position-area
Eigenschaft bietet eine Alternative zur anchor()
Funktion, um Elemente relativ zu Ankern zu positionieren. position-area
basiert auf dem Konzept eines 3x3 Fliesenrasters, das als Positionierungsraster bezeichnet wird, wobei das Ankerelement die mittlere Fliese ist:
Die Rasterfliesen sind in Reihen und Spalten unterteilt:
- Die drei Reihen werden durch die physikalischen Werte
top
,center
undbottom
dargestellt. Sie haben auch logische Äquivalente wieblock-start
,center
undblock-end
, und Koordinaten-Äquivalente —y-start
,center
undy-end
. - Die drei Spalten werden durch die physikalischen Werte
left
,center
undright
dargestellt. Sie haben auch logische Äquivalente wieinline-start
,center
undinline-end
, und Koordinaten-Äquivalente —x-start
,center
undx-end
.
Die Abmessungen der mittleren Fliese werden durch den enthaltenden Block des Ankerelements definiert, während die Abmessungen der äußeren Kante des Rasters durch den enthaltenden Block des positionierten Elements definiert werden.
Der <position-area>
Wert besteht aus einem oder zwei Schlüsselwörtern, die die Region des Rasters definieren, in der das positionierte Element platziert werden soll. Genauer gesagt, wird der enthaltende Block des positionierten Elements auf den Rasterbereich gesetzt.
Zum Beispiel:
- Sie können einen Reihen- und einen Spaltenwert angeben, um das positionierte Element in einem einzigen, bestimmten Rasterquadrat zu platzieren — zum Beispiel wird
top left
(logisches Äquivalentstart start
) oderbottom center
(logisches Äquivalentend center
) das positionierte Element in das obere linke oder untere mittlere Quadrat platzieren. - Sie können einen Reihen- oder Spaltenwert plus einen
span-*
Wert angeben, um über zwei oder drei Zellen zu spannen. Der erste Wert gibt die Reihe oder Spalte an, in der das positionierte Element platziert werden soll, und platziert es zunächst in der Mitte, während der andere die anderen Zellen dieser Reihe oder Spalte angibt, über die es spannt. Zum Beispiel:top span-left
bewirkt, dass das positionierte Element in der Mitte der oberen Reihe platziert wird und über die mittleren und linken Zellen dieser Reihe spannt.block-end span-inline-end
bewirkt, dass das positionierte Element in der Mitte der Block-Ende-Reihe platziert wird und über die mittleren und Inline-Ende-Zellen dieser Reihe spannt.bottom span-all
undy-end span-all
bewirken, dass das positionierte Element in der Mitte der unteren Reihe platziert wird und über drei Zellen, in diesem Fall die linken, mittleren und rechten Zellen der unteren Reihe, spannt.
Für detaillierte Informationen zu Ankerfunktionen, Verwendung und der position-area
Eigenschaft, siehe das CSS Ankerpositionierungs Modul Hauptseite und den Leitfaden zur Verwendung von CSS Ankerpositionierung, speziell den Abschnitt über das Setzen einer position-area
.
Angepasstes Standardverhalten
Wenn ein <position-area>
Wert auf ein positioniertes Element gesetzt wird, werden einige seiner Eigenschaften ihr Standardverhalten angepasst, um eine gute Standardausrichtung zu bieten.
Normalwert der Selbst-Ausrichtungseigenschaft
Der normal
Wert der Selbst-Ausrichtungseigenschaften, einschließlich align-items
, align-self
, justify-items
, und justify-self
, verhält sich entweder als start
, end
, oder anchor-center
. Welcher Wert eine Selbst-Ausrichtungseigenschaft standardmäßig hat, hängt von der Positionierung des Elements ab:
- Wenn der
position-area
Wert den mittleren Bereich in einer Achse angibt, ist die Standardausrichtung in dieser Achseanchor-center
. - Andernfalls ist das Verhalten das Gegenteil des Bereichs, der durch die
position-area
Eigenschaft angegeben wird. Zum Beispiel, wenn derposition-area
Wert den Startbereich seiner Achse angibt, ist die Standardausrichtung in dieser Achseend
.
Zum Beispiel, wenn der writing-mode
auf horizontal-tb
gesetzt ist, bewirkt position-area: top span-x-start
, dass das positionierte Element in der Mitte der oberen Reihe platziert wird und über die mittleren und Start-Zellen dieser Reihe spannt. In diesem Fall werden die Selbst-Ausrichtungseigenschaften standardmäßig auf align-self: end
und justify-self: anchor-center
gesetzt.
Einfügeeigenschaften und Werte
Wenn ein Anker-positioniertes Element mit der position-area
Eigenschaft positioniert wird, geben alle gesetzten Einfügeeigenschaften, wie top
oder inset-inline-end
, Offsets vom position-area an. Einige andere Eigenschaftswerte, wie max-block-size: 100%
, werden ebenfalls relativ zum position-area sein. Alle Einfügeeigenschaften, die gesetzt sind oder standardmäßig auf auto
stehen, werden sich verhalten, als ob ihr Wert auf 0
gesetzt wurde.
Ein Exkurs über die Breite von positionierten Elementen
Wenn das positionierte Element keine spezifische Größe eingestellt hat, wird seine Größe auf seine intrinsische Größe standardmäßig gesetzt, aber auch von der Größe des position-area Rasters beeinflusst.
Wenn das positionierte Element in einer einzigen oberen Mitte, unteren Mitte oder mittigen mittleren Zelle platziert wird, wird seine Blockgröße gleich der enthaltenden Blockgröße des Ankerelements sein und sich nach oben, unten oder in beide Richtungen ausdehnen. Das positionierte Element wird sich mit dem angegebenen Rasterquadrat ausrichten, übernimmt aber dieselbe Breite wie das Ankerelement. Es wird jedoch nicht zulassen, dass sein Inhalt überläuft — seine minimale width
wird sein min-content
(definiert durch die Breite seines längsten Wortes) sein.
Wenn das positionierte Element in irgendeinem anderen einzelnen Rasterquadrat platziert wird (z.B. mit position-area: top left
) oder so eingestellt ist, dass es zwei oder mehr Rasterquadrate überspannt (zum Beispiel mit position-area: bottom span-all
), wird es sich mit dem angegebenen Rasterbereich ausrichten, sich aber so verhalten, als ob es eine width
von max-content
auf sich gesetzt hätte. Es wird gemäß seiner enthaltenden Blockgröße dimensioniert, die die Größe ist, die auf es auferlegt wurde, als es auf position: fixed
gesetzt wurde. Es wird sich so weit wie der Textinhalt strecken, obwohl es auch durch die Kante des <body>
eingeschränkt werden kann.
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 | x-self-start | x-self-end | span-x-self-start | span-x-self-end | span-all ] || [ top | center | bottom | span-top | span-bottom | y-start | y-end | span-y-start | span-y-end | y-self-start | y-self-end | span-y-self-start | span-y-self-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 ist ein positioniertes Element mit seinem zugeordneten Anker über die position-area
Eigenschaft verknüpft und positioniert.
HTML
Das HTML enthält ein <div>
und ein <p>
. Das <p>
wird mit CSS relativ zu dem <div>
positioniert. Wir fügen auch einen Stilblock ein, der sichtbar gemacht wird. Alle Elemente werden über das contenteditable
Attribut direkt editierbar gemacht.
<div class="anchor" contenteditable="true">⚓︎</div>
<p class="positionedElement" contenteditable="true">This can be edited.</p>
<style contenteditable="true">.positionedElement {
position-area: CHANGEME;
}
</style>
CSS
Wir verwandeln das <div>
in ein Ankerelement mit der anchor-name
Eigenschaft. Dann verknüpfen wir das absolut positionierte <p>
damit, indem wir seinen position-anchor
Wert auf denselben Ankernamen setzen.
Wir setzen den initialen position-area
Wert auf top center
. Dieser Wert wird auf einen p
Selektor gesetzt, daher hat der Wert weniger Spezifität als jeder Wert, der zum <style>
Blockes .positionedElement
Klassenselektor hinzugefügt wird. Dadurch können Sie den initialen position-area
Wert überschreiben, indem Sie einen position-area
Wert innerhalb des Stilblocks setzen.
.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 ungültigen "CHANGEME" Wert der position-area
Eigenschaft auf einen gültigen Wert zu ändern.
position-area
Wertvergleich
Dieses Demo erstellt einen Anker und verbindet ein positioniertes Element damit. Es bietet auch ein Dropdown-Menü, das es Ihnen ermöglicht, verschiedene position-area
Werte auszuwählen, die auf das positionierte Element angewendet werden, um deren Wirkung zu sehen. Eine der Optionen bewirkt, 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, sodass Sie beobachten können, wie sich die position-area
Werteffekte je nach Schreibmodus unterscheiden.
HTML
Im HTML spezifizieren wir zwei <div>
Elemente, eines mit der Klasse anchor
und eines mit der Klasse infobox
. Diese sind als das Ankerelement und das positionierte Element gedacht, die wir damit verknüpfen werden. Wir haben auch das contenteditable
Attribut auf beiden eingefügt, was sie direkt editierbar macht.
Wir haben auch zwei Formulare eingefügt, die die <select>
und <input type="text">
Elemente zum Setzen verschiedener position-area
Werte enthalten, und das <input type="checkbox">
Element zum Umschalten des vertikalen writing-mode
ein- und auszuschalten. Der Code für diese, zusammen mit dem JavaScript, wurde aus Gründen der Kürze verborgen.
<div class="anchor" contenteditable>⚓︎</div>
<div class="infobox">
<p contenteditable>You can edit this text.</p>
</div>
CSS
Im CSS erklären wir zuerst das anchor
<div>
als ein Ankerelement, indem wir einen Ankernamen darauf über die anchor-name
Eigenschaft setzen.
Das positionierte Element wird dem Ankerelement zugeordnet, indem sein Ankername als Wert der position-anchor
Eigenschaft des positionierten Elements gesetzt wird. Wir geben ihm auch eine anfängliche Position mit position-area: top left
; dies wird überschrieben, wenn neue Werte aus dem <select>
Menü gewählt werden. Schließlich setzen wir seine opacity
auf 0.8
, damit, wenn das positionierte Element einen position-area
Wert erhält, der es über dem Anker platziert, Sie immer noch die Position der Elemente relativ zueinander sehen können.
.anchor {
anchor-name: --myAnchor;
}
.infobox {
position-anchor: --myAnchor;
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 die Auswirkungen 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 Auswirkungen zu sehen. Fügen Sie Text zu den Anker- und Anker-positionierten Elementen hinzu, um zu sehen, wie das Anker-positionierte Element basierend auf dem position-area
Wert wächst. Aktivieren Sie schließlich das Kontrollkästchen und experimentieren Sie dann mit verschiedenen position-area
Werten, um zu sehen, welche in verschiedenen Schreibmodi dasselbe Ergebnis liefern und welche unterschiedliche Ergebnisse liefern.
Spezifikationen
Specification |
---|
CSS Anchor Positioning # position-area |