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 anchor-positionierten Element, relativ zu den Rändern eines zugehörigen Ankerelements positioniert zu werden, indem das positionierte Element auf eine oder mehrere Kacheln eines impliziten 3x3 Rasters platziert wird, wobei das Ankerelement die mittlere Zelle ist.
position-area
bietet eine bequeme Alternative zum Verankern und Positionieren eines Elements relativ zu seinem Anker über Versatz-Eigenschaften und die anchor()
Funktion. Das auf Rastern basierende Konzept löst den häufigen Anwendungsfall, die Ränder des umgebenden Blocks des positionierten Elements relativ zu den Rändern seines Standardankerelements zu positionieren.
Wenn ein Element kein Standardankerelement hat oder kein absolut positioniertes Element ist, hat diese Eigenschaft keine Wirkung.
Hinweis:
Diese Eigenschaft wurde ursprünglich in Chromium-Browsern als inset-area
benannt und unterstützt, mit denselben Eigenschaftswerten. Beide Eigenschaftsnamen werden für eine kurze Zeit aus Gründen der Rückwärtskompatibilität unterstützt.
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üsselworten oder dem Schlüsselwort none
. Wenn nur ein <position-area>
Schlüsselwort angegeben wird, wird das zweite impliziert.
<position-area>
-
Gibt den Bereich des Positionierungsrasters an, in dem ausgewählte positionierte Elemente platziert werden sollen.
none
-
Es wird kein Positionierungsbereich festgelegt.
Beschreibung
Die position-area
Eigenschaft bietet eine Alternative zur anchor()
Funktion zur Positionierung von Elementen relativ zu Ankern. position-area
basiert auf dem Konzept eines 3x3 Kacheln umfassenden Gitters, dem position-area Raster, wobei das Ankerelement die mittlere Kachel ist:
Die Gitterkacheln sind in Zeilen und Spalten unterteilt:
- Die drei Zeilen werden durch die physikalischen Werte
top
,center
undbottom
dargestellt. Sie haben auch logische Äquivalente wieblock-start
,center
undblock-end
sowie 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
sowie Koordinatenäquivalente —x-start
,center
undx-end
.
Die Abmessungen der mittleren Kachel werden vom umgebenden Block des Ankerelements definiert, während die Abmessungen des äußeren Rands des Gitters vom umgebenden Block des positionierten Elements definiert werden.
Der Wert <position-area>
setzt sich aus einem oder zwei Schlüsselwörtern zusammen, die den Bereich des Gitters definieren, in dem das positionierte Element platziert werden soll. Genauer gesagt wird der umgebende Block des positionierten Elements auf den Gitterbereich gesetzt.
Beispielsweise:
- Sie können einen Zeilenwert und einen Spaltenwert angeben, um das positionierte Element in einem einzigen, bestimmten Rasterquadrat zu platzieren — zum Beispiel
top left
(logisches Äquivalentstart start
) oderbottom center
(logisches Äquivalentend center
) platziert das positionierte Element im oberen rechten oder unteren mittleren Quadrat. - Sie können einen Zeilen- oder Spaltenwert plus einen
span-*
Wert angeben, um zwei oder drei Zellen zu überspannen. Der erste Wert gibt die Zeile oder Spalte an, in der das positionierte Element platziert wird, initial in der Mitte, und der andere gibt die anderen Kacheln dieser Zeile oder Spalte an, die es überspannen soll. Zum Beispiel:top span-left
bewirkt, dass das positionierte Element in der Mitte der oberen Zeile platziert wird und über die mittlere und die linke Kachel dieser Zeile gespannt wird.block-end span-inline-end
bewirkt, dass das positionierte Element in der Mitte der Zeile am Ende des Blocks platziert wird und über die mittlere und die inline-end Kachel dieser Zeile gespannt wird.bottom span-all
undy-end span-all
bewirken, dass das positionierte Element in der Mitte der unteren Zeile platziert wird und über drei Zellen gespannt wird, in diesem Fall über die linke, mittlere und rechte Kachel der unteren Zeile.
Für detaillierte Informationen über Ankerfunktionen, deren Verwendung und die position-area
Eigenschaft siehe die CSS-Anker-Positionierung Modulseite und den Verwendung von CSS-Anker-Positionierung Leitfaden, insbesondere den Abschnitt zum Festlegen eines position-area
.
Angepasstes Standardverhalten
Wenn ein <position-area>
Wert auf einem positionierten Element festgelegt ist, wird das Standardverhalten einiger seiner Eigenschaften angepasst, um eine gute Standardausrichtung zu bieten.
Selbstanpassungs-Eigenschaft normal
Wert
Der normal
Wert der Selbstanpassungseigenschaften, einschließlich align-items
, align-self
, justify-items
und justify-self
, verhält sich entweder wie start
, end
oder anchor-center
. Welcher Wert eine Selbstanpassungseigenschaft standardmäßig verwendet, hängt von der Positionierung des Elements ab:
- Wenn der
position-area
Wert den Mittelbereich auf einer Achse angibt, ist die Standardausrichtung auf dieser Achseanchor-center
. - Ansonsten ist das Verhalten das Gegenteil von dem Bereich, der durch die
position-area
Eigenschaft angegeben wird. Beispielsweise, wenn derposition-area
Wert den Startbereich seiner Achse angibt, ist die Standardausrichtung auf dieser Achseend
.
Zum Beispiel, wenn der writing-mode
auf horizontal-tb
gesetzt ist, verursacht position-area: top span-x-start
, dass das positionierte Element in der Mitte der oberen Zeile platziert wird und über die mittlere und die Startkachel dieser Zeile gespannt wird. In diesem Fall werden die Selbstanpassungseigenschaften standardmäßig auf align-self: end
und justify-self: anchor-center
gesetzt.
Versatz-Eigenschaften und Werte
Wenn ein anchor-positioniertes Element unter Verwendung der position-area
Eigenschaft positioniert wird, geben alle Versatz-Eigenschaften, die gesetzt sind, wie top
oder inset-inline-end
, Offsets vom Positionierungsbereich an. Einige andere Eigenschaftswerte, wie max-block-size: 100%
, werden ebenfalls relativ zum Positionierungsbereich bezogen. Jegliche Versatz-Eigenschaften, die auf auto
gesetzt oder standardmäßig eingestellt sind, verhalten sich so, als ob ihr Wert auf 0
gesetzt wäre.
Eine Anmerkung zur Breite des positionierten Elements
Wenn das positionierte Element keine spezifische Größe aufweist, wird seine Größe standardmäßig auf seinen intrinsischen Größe gesetzt, aber es wird auch von der Größe des position-area Gitters beeinflusst.
Wenn das positionierte Element in einer einzelnen oberen Mitte, unteren Mitte oder mittleren Mitte Zelle platziert ist, wird seine Blockgröße dieselbe wie die Blockgröße des Ankerblocks sein, sich nach oben, unten oder in beide Richtungen vergrößernd. Das positionierte Element wird mit dem angegebenen Rasterquadrat ausgerichtet sein, aber dieselbe Breite wie das Ankerelement annehmen. Es wird jedoch nicht zulassen, dass dessen Inhalt überläuft — seine Mindestbreite wird sein min-content
(wie durch die Breite des längsten Wortes definiert).
Wenn das positionierte Element in einem anderen einzelnen Rasterquadrat platziert ist (zum Beispiel 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 mit dem angegebenen Rasterbereich ausgerichtet, aber so behandelt, als ob es eine width
von max-content
hätte. Es wird entsprechend der Größe des umgebenden Blocks bemessen, die ihm auferlegt ist, wenn es auf position: fixed
eingestellt ist. Es wird sich so weit wie der Textinhalt erstrecken, obwohl es auch durch den Rand 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 wird ein positioniertes Element verankert und relativ zu seinem zugehörigen Anker unter Verwendung der position-area
Eigenschaft positioniert.
HTML
Das HTML enthält ein <div>
und ein <p>
. Das <p>
wird relativ zum <div>
mit CSS positioniert. Wir fügen auch einen Stilblock hinzu, der sichtbar gemacht wird. Alle Elemente sind direkt bearbeitbar über das contenteditable
Attribut.
<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>
zu einem Ankerelement mit der anchor-name
Eigenschaft. Wir verbinden 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 ist auf einem p
Selektor gesetzt, sodass dieser Wert weniger Spezifität hat als jeder Wert, der dem <style>
Block's .positionedElement
Klassenselektor hinzugefügt wird. Als Ergebnis können Sie den anfänglichen 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 des Textes im anchor-positionierten Element zu ändern, um zu sehen, wie es wächst. Versuchen Sie auch, den Wert der position-area
Eigenschaft auf etwas anderes zu ändern, wie center
.
position-area
Wertvergleich
Dieses Demo erstellt einen Anker und verankert ein positioniertes Element daran. Es bietet auch ein Dropdown-Menü, das es Ihnen ermöglicht, verschiedene position-area
Werte auszuwählen, um auf das positionierte Element angewendet zu werden, um deren Effekt zu sehen. Eine der Optionen verursacht, dass ein Textfeld erscheint, das es Ihnen ermöglicht, einen benutzerdefinierten Wert einzugeben. Schließlich wird ein Kontrollkästchen bereitgestellt, um writing-mode: vertical-lr
ein- und auszuschalten, damit Sie beobachten können, wie position-area
Wertwirkungen sich über verschiedene Schreibrichtungen unterscheiden.
HTML
Im HTML geben wir zwei <div>
Elemente an, eines mit einer Klasse von anchor
und eines mit einer Klasse von infobox
. Diese sollen das Ankerelement und das positionierte Element sein, die wir miteinander verbinden werden. Wir haben das contenteditable
Attribut auf beide gesetzt, wodurch sie direkt bearbeitbar sind.
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 hierfür zusammen mit dem JavaScript wurde aus Gründen der Kürze versteckt.
<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 Ankerelement, indem wir einen Ankernamen darauf mit der anchor-name
Eigenschaft setzen.
Das positionierte Element wird mit dem Ankerelement verbunden, 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ü ausgewä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 das Ankerelement platziert, die Position der Elemente relativ zueinander noch sichtbar ist.
.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 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 Effekt zu sehen. Fügen Sie Text zu dem Anker und den anchor-positionierten Elementen hinzu, um zu sehen, wie das anchor-positionierte Element basierend auf dem position-area
Wert wächst. Schließlich aktivieren Sie das Kontrollkästchen und experimentieren mit verschiedenen position-area
Werten, um zu sehen, welche denselben Effekt über verschiedene Schreibrichtungen haben und welche unterschiedliche Ergebnisse liefern.
Spezifikationen
Specification |
---|
CSS Anchor Positioning # position-area |
Browser-Kompatibilität
Siehe auch
anchor-name
position-anchor
position-try-fallbacks
- Die
anchor()
Funktion - Der
<position-area>
Wert - Verwendung von CSS-Anker-Positionierung Leitfaden
- Fallback-Optionen und bedingtes Verbergen bei Überlauf Leitfaden
- CSS-Anker-Positionierung Modul