position-area
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die position-area
CSS Eigenschaft ermöglicht es, ein Ankerelement relativ zu den Rändern seines assoziierten Ankerelementes zu positionieren, indem das positionierte Element auf eine oder mehrere Kacheln eines impliziten 3x3 Gitters gesetzt wird, wobei das Ankerelement die mittlere Zelle bildet.
position-area
bietet eine bequeme Alternative zur Verankerung und Positionierung eines Elements relativ zu seinem Anker über inset-Eigenschaften und die anchor()
Funktion. Das gitterbasierte Konzept löst den üblichen Anwendungsfall der Positionierung der Ränder des umschließenden Blocks des positionierten Elements relativ zu den Rändern seines standardmäßigen Ankerelementes.
Wenn ein Element kein standardmäßiges 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
genannt und unterstützt, mit denselben Eigenschaftswerten. Beide Eigenschaftsnamen werden für kurze Zeit unterstützt, um die Rückwä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 Positionierungsbereichsgitters an, auf dem ausgewählte positionierte Elemente platziert werden sollen.
none
-
Es wird kein Positionierungsbereich gesetzt.
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 Gitters, das als Positionierungsbereichsgitter bezeichnet wird, wobei das Ankerelement die mittlere Kachel bildet:
Die Gitterkacheln sind in Zeilen und Spalten unterteilt:
- Die drei Zeilen werden durch die physikalischen Werte
top
,center
undbottom
dargestellt. Diese 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. Diese haben auch logische Äquivalente wieinline-start
,center
undinline-end
, und Koordinatenäquivalente —x-start
,center
undx-end
.
Die Abmessungen der mittleren Kachel werden durch den umfassenden Block des Ankerelements definiert, während die Abmessungen des äußeren Rands des Gitters durch den umfassenden Block des positionierten Elements definiert werden.
Der <position-area>
Wert setzt sich aus ein oder zwei Schlüsselwörtern zusammen, die den Bereich des Gitters definieren, in dem das positionierte Element platziert werden soll. Genauer gesagt, wird der umfassende Block des positionierten Elements auf den Gitterbereich gesetzt.
Zum Beispiel:
- Sie können einen Zeilenwert und einen Spaltenwert angeben, um das positionierte Element in einem einzelnen, spezifischen Gitterquadrat zu platzieren — zum Beispiel
top left
(logisches Äquivalentstart start
) oderbottom center
(logisches Äquivalentend center
) wird das positionierte Element im oberen linken oder im unteren mittleren Quadrat platzieren. - 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 werden soll, und setzt es zunächst in die Mitte, und der andere gibt die anderen Kacheln dieser Zeile oder Spalte an, die überspannt werden sollen. Zum Beispiel:top span-left
führt dazu, dass das positionierte Element in der Mitte der oberen Zeile platziert wird und die mittleren und linken Kacheln dieser Zeile überspannt.block-end span-inline-end
führt dazu, dass das positionierte Element in der Mitte der Block-End-Zeile platziert wird und die mittleren und Inline-End-Kacheln dieser Zeile überspannt.bottom span-all
undy-end span-all
führen dazu, dass das positionierte Element in der Mitte der unteren Zeile platziert wird und über drei Zellen überspannt, in diesem Fall die linken, mittleren und rechten Kacheln der unteren Zeile.
Für detaillierte Informationen zu Ankereigenschaften, Verwendung und der position-area
Eigenschaft, siehe die CSS-Ankerpositionierung Modul Startseite und den Verwendung von CSS-Ankerpositionierung Leitfaden, insbesondere den Abschnitt über Festlegen einer position-area
.
Anpassung des Standardverhaltens
Wenn ein <position-area>
Wert auf ein positioniertes Element gesetzt wird, wird das Standardverhalten einiger seiner Eigenschaften 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 als start
, end
oder anchor-center
. Welcher Wert eine Selbst-Ausrichtungseigenschaft standardmäßig annimmt, hängt von der Positionierung des Elements ab:
- Wenn der
position-area
Wert den mittleren Bereich auf einer Achse angibt, ist die Standardausrichtung auf dieser Achseanchor-center
. - Andernfalls ist das Verhalten das Gegenteil des vom
position-area
Wert spezifizierten Bereichs auf seiner Achse. Zum Beispiel, 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 die mittleren und Start-Kacheln dieser Zeile überspannt. In diesem Fall werden die Selbst-Ausrichtungseigenschaften standardmäßig auf align-self: end
und justify-self: anchor-center
gesetzt.
Inset-Eigenschaften und Werte
Wenn ein Anker-Positioniertes Element unter Verwendung der position-area
Eigenschaft positioniert wird, geben alle gesetzten Inset-Eigenschaften, wie top
oder inset-inline-end
, Verschiebungen vom Positionierungsbereich an. Einige andere Eigenschaftswerte, wie max-block-size: 100%
, beziehen sich ebenfalls auf den Positionierungsbereich. Alle Inset-Eigenschaften, die gesetzt oder standardmäßig auf auto
gesetzt sind, verhalten sich, als wäre ihr Wert auf 0
gesetzt.
Eine Anmerkung zur Breite von positionierten Elementen
Wenn das positionierte Element keine spezifische Größe aufweist, wird seine Größe standardmäßig auf seine intrinsische Größe gesetzt, aber sie wird auch von der Größe des Positionierungsbereichsgitters beeinflusst.
Wenn das positionierte Element in einer einzigen oberen Mitte, unteren Mitte oder mittleren Mitte-Zelle platziert wird, entspricht seine Blockgröße der Größe des Anker-umfassenden Blocks und wächst nach oben, unten oder in beide Richtungen. Das positionierte Element wird sich mit dem angegebenen Gitterquadrat ausrichten, aber dieselbe Breite wie das Ankerelement annehmen. Es wird jedoch nicht zulassen, dass sein Inhalt überläuft — seine minimale width
wird sein min-content
(wie durch die Breite seines längsten Wortes definiert) sein.
Wenn das positionierte Element in einem anderen einzelnen Gitterquadrat platziert wird (sagen wir mit position-area: top left
) oder so eingestellt ist, dass es zwei oder mehr Gitterquadrate überspannt (zum Beispiel mit position-area: bottom span-all
), wird es sich mit dem spezifizierten Gitterbereich ausrichten, aber sich verhalten, als hätte es eine width
von max-content
gesetzt. Es wird entsprechend der Größe seines umfassenden Blocks bemessen, die Größe, die ihm auferlegt wurde, als es auf position: fixed
gesetzt wurde. Es wird sich verbreitern, soweit es der Textinhalt erlaubt, obwohl es auch durch den Rand des <body>
begrenzt 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 an sein zugehöriges Ankerelement gebunden und relativ positioniert, indem die position-area
Eigenschaft verwendet wird.
HTML
Das HTML beinhaltet 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 über das contenteditable
Attribut direkt bearbeitbar.
<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 wandeln das <div>
in ein Ankerelement um, indem wir die anchor-name
Eigenschaft darauf anwenden. Dann assoziieren wir das absolut positionierte <p>
damit, 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. Dadurch 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 Textmenge in dem Anker-Positionierten Element zu ändern, um zu sehen, wie es wächst. Versuchen Sie auch den ungültigen "CHANGEME" Wert der position-area
Eigenschaft in einen gültigen Wert zu ändern.
position-area
Wertvergleich
Dieses Demo erstellt einen Anker und bindet ein positioniertes Element daran. Es bietet auch ein Dropdown-Menü, das Ihnen ermöglicht, verschiedene position-area
Werte auszuwählen, um ihre Wirkung 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, so dass Sie beobachten können, wie sich die position-area
Werte über verschiedene Schreibrichtungen hinweg unterscheiden.
HTML
Im HTML spezifizieren wir zwei <div>
Elemente, eines mit einer Klasse anchor
und eines mit einer Klasse infobox
. Diese sind dafür gedacht, das Ankerelement und das positionierte Element darzustellen, das wir damit assoziieren werden. Wir haben das contenteditable
Attribut auf beiden aufgenommen, was sie direkt bearbeitbar macht.
Wir haben auch zwei Formulare aufgenommen, die <select>
und <input type="text">
Elemente zum Setzen verschiedener position-area
Werte, und das <input type="checkbox">
Element zum Umschalten der vertikalen writing-mode
ein- und ausschalten. Der Code dafür sowie der JavaScript Code wurden der Kürze halber 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 über die anchor-name
Eigenschaft setzen.
Das positionierte Element wird mit dem Ankerelement assoziiert, 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
, so dass, wenn das positionierte Element einen position-area
Wert bekommt, der es über dem Anker platziert, Sie die Position der Elemente relativ zueinander immer noch 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ü zu wählen, um ihre Wirkung auf die Position der Infobox zu sehen. Wählen Sie den "Custom"-Wert und versuchen Sie, einige benutzerdefinierte position-area
Werte in das Textfeld einzugeben, um ihre Wirkung 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. Überprüfen Sie schließlich das Kontrollkästchen und experimentieren Sie dann mit verschiedenen position-area
Werten, um zu sehen, welche in verschiedenen Schreibrichtungen dasselbe Ergebnis liefern und welche unterschiedliche Ergebnisse erzielen.
Spezifikationen
Specification |
---|
CSS Anchor Positioning # position-area |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
anchor-name
position-anchor
position-try-fallbacks
- Die
anchor()
Funktion - Der
<position-area>
Wert - Verwendung von CSS-Ankerpositionierung Leitfaden
- Umgang mit Überlauf: Versuchen Sie, Fallbacks und bedingtes Verstecken Anleitung
- CSS-Ankerpositionierung Modul