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 ankergestütztes Element relativ zu den Rändern seines zugehörigen Ankerelements zu positionieren, indem das positionierte Element auf eine oder mehrere Kacheln eines impliziten 3x3-Rasters gesetzt wird, wobei das Ankerelement die mittlere Zelle ist.
position-area
bietet eine bequeme Alternative zum Verbinden und Positionieren eines Elements relativ zu seinem Anker über Einsetzeigenschaften und die anchor()
Funktion. Das rasterbasierte Konzept löst den häufigen Anwendungsfall, die Ränder des enthaltenen 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 sind zwei <position-area>
Schlüsselbegriffe oder das Schlüsselwort none
. Wenn nur ein <position-area>
Schlüsselbegriff angegeben wird, wird der zweite impliziert.
<position-area>
-
Gibt den Bereich des Positionsrasterbereichs an, auf dem ausgewählte positionierte Elemente platziert werden sollen.
none
-
Es wird kein Positionsbereich gesetzt.
Beschreibung
Die Eigenschaft position-area
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 Kacheln, genannt Positionsrasterbereich, wobei das Ankerelement die mittlere Kachel ist:
Die Rasterkacheln sind in Zeilen und Spalten unterteilt:
- Die drei Zeilen werden durch die physischen Werte
top
,center
undbottom
repräsentiert. Sie haben auch logische Äquivalente wieblock-start
,center
undblock-end
, und koordinatenbasierte Äquivalente —y-start
,center
undy-end
. - Die drei Spalten werden durch die physischen Werte
left
,center
undright
repräsentiert. Sie haben auch logische Äquivalente wieinline-start
,center
undinline-end
, und koordinatenbasierte Äquivalente —x-start
,center
undx-end
.
Die Dimensionen der mittleren Kachel werden durch den enthaltenden Block des Ankerelements definiert, während die Dimensionen des äußeren Rasterrandes durch den enthaltenen 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 wird der enthaltene 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 einzigen, spezifischen Rasterquadrat zu platzieren — zum Beispiel
top left
(logisches Äquivalentstart start
) oderbottom center
(logisches Äquivalentend center
) wird das positionierte Element im oberen linken oder unteren mittleren Quadrat platzieren. - Sie können einen Zeilen- oder Spaltenwert plus einen
span-*
Wert angeben, um zwei oder drei Zellen zu umfassen. Der erste Wert gibt die Zeile oder Spalte an, in der das positionierte Element platziert werden soll, platziert es initial in der Mitte, und der andere spezifiziert die anderen Kacheln dieser Zeile oder Spalte, die überspannt werden sollen. Zum Beispiel:top span-left
bewirkt, dass das positionierte Element in der Mitte der oberen Zeile platziert wird und sich über die mittleren und linken Kacheln dieser Zeile erstreckt.block-end span-inline-end
bewirkt, dass das positionierte Element in der Mitte der Blockendzeile platziert wird und sich über die mittleren und Inline-Ende-Kacheln dieser Zeile erstreckt.bottom span-all
undy-end span-all
bewirken, dass das positionierte Element in der Mitte der unteren Zeile platziert wird und sich über drei Zellen erstreckt, in diesem Fall die linken, mittleren und rechten Kacheln der unteren Zeile.
Für detaillierte Informationen zu Ankerfunktionen, ihrer Verwendung und der position-area
Eigenschaft, siehe die CSS Ankerpositionierung Modul-Landingpage und den Verwendung von CSS Ankerpositionierung Leitfaden, speziell den Abschnitt über die Einstellung einer position-area
.
Angepasste Standardverhalten
Wenn ein <position-area>
Wert auf einem positionierten Element gesetzt ist, werden einige seiner Eigenschaften ihr Standardverhalten angepasst, um eine gute Standardausrichtung zu bieten.
Self-Alignment Eigenschaft normal
Wert
Der normal
Wert der Self-Alignment Eigenschaften, einschließlich align-items
, align-self
, justify-items
, und justify-self
, verhält sich entweder als start
, end
, oder anchor-center
. Welchen Wert eine Self-Alignment Eigenschaft als Standard hat, hängt von der Position des Elements ab:
- Wenn der
position-area
Wert die Mittelregion in einer Achse angibt, ist die Standardausrichtung in dieser Achseanchor-center
. - Ansonsten ist das Verhalten das Gegenteil der von der
position-area
Eigenschaft angegebenen Region. Zum Beispiel, wenn derposition-area
Wert die Anfangsregion 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 Zeile platziert wird und sich über die mittleren und Anfangs-Kacheln dieser Zeile erstreckt. In diesem Fall werden die Self-Alignment Eigenschaften standardmäßig auf align-self: end
und justify-self: anchor-center
gesetzt.
Einsetzeigenschaften und Werte
Wenn ein Anker-element mit der position-area
Eigenschaft positioniert wird, geben alle gesetzten Einsetzeigenschaften, wie top
oder inset-inline-end
, Versätze vom Positionsbereich an. Einige andere Eigenschaftswerte, wie max-block-size: 100%
, werden ebenfalls relativ zum Positionsbereich sein. Alle Einsetzeigenschaften, die gesetzt oder auf auto
standardisiert sind, verhalten sich so, als wäre ihr Wert auf 0
gesetzt.
Ein Exkurs zur Breite des positionierten Elements
Wenn das positionierte Element keine spezifische Größe hat, wird seine Größe standardmäßig seine intrinsische Größe sein, aber es wird auch von der Größe des Positionsrasterbereichs beeinflusst.
Wenn das positionierte Element in einem einzelnen oberen mittleren, unteren mittleren oder mittleren mittleren Feld platziert ist, wird seine Blockgröße der enthaltenen Blockgröße des Ankers entsprechen und nach oben, unten oder in beide Richtungen wachsen. Das positionierte Element wird sich mit dem angegebenen Rasterquadrat ausrichten, aber dieselbe Breite wie das Ankerelement übernehmen. Es wird jedoch nicht erlauben, seinen Inhalt überlaufen zu lassen — seine minimale width
wird ihre min-content
sein (wie durch die Breite ihres 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 umspannt (zum Beispiel mit position-area: bottom span-all
), wird es sich mit dem angegebenen Rasterbereich ausrichten, aber sich so verhalten, als ob es eine width
von max-content
darauf gesetzt hat. Es wird gemäß seiner enthaltenen Blockgröße bemessen, was die Größe ist, die ihm auferlegt wurde, als es auf position: fixed
gesetzt wurde. Es wird sich so breit dehnen wie der Textinhalt, obwohl es auch durch den Rand des <body>
beschrä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
Grundlegendes Beispiel
In diesem Beispiel wird ein positioniertes Element über die position-area
Eigenschaft relativ zu seinem zugehörigen Anker verankert und positioniert.
HTML
Das HTML beinhaltet ein <div>
und ein <p>
. Das <p>
wird mit CSS relativ zum <div>
positioniert. Wir fügen auch einen Style-Block hinzu, der sichtbar gemacht wird. Alle Elemente sind über das contenteditable
Attribut direkt editierbar.
<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 mit der anchor-name
Eigenschaft um. Wir assoziieren dann 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 einen p
Selektor gesetzt, sodass der Wert weniger Spezifität hat als jeder Wert, der dem .positionedElement
Klassenselektor im <style>
Block hinzugefügt wird. Daher können Sie den anfänglichen position-area
Wert überschreiben, indem Sie einen position-area
Wert innerhalb des Style-Blocks 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 im anker-positionierten Element zu ändern, um zu sehen, wie es wächst. Ändern Sie auch den ungültigen "CHANGEME"-Wert der position-area
Eigenschaft in einen gültigen Wert.
position-area
Wertvergleich
Diese Demo erstellt einen Anker und verbindet ein positioniertes Element damit. Es enthält auch ein Dropdown-Menü, das es Ihnen ermöglicht, verschiedene position-area
Werte auszuwählen, um sie auf das positionierte Element anzuwenden, um deren Effekt zu sehen. Eine der Optionen öffnet ein Textfeld, das es Ihnen ermöglicht, einen benutzerdefinierten Wert einzugeben. 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 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 sollen das Ankerelement und das damit verbundene positionierte Element sein. Wir haben das contenteditable
Attribut bei beiden hinzugefügt, was sie direkt bearbeitbar macht.
Wir haben auch zwei Formulare inkludiert, 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 und das JavaScript wurde der Kürze 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 über die 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 Sie, wenn das positionierte Element einen position-area
Wert erhält, der es über den Anker legt, die relativen Positionen der Elemente 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ü auszuwählen, um den Effekt zu sehen, den sie auf die Position der Infobox haben. Wählen Sie den "Custom"-Wert aus und versuchen Sie, einige benutzerdefinierte position-area
Werte in das Texteingabefeld einzugeben, um deren Effekt zu sehen. Fügen Sie Text zum Anker und den anker-positionierten Elementen hinzu, um zu sehen, wie das anker-positionierte Element auf Grundlage des position-area
Werts wächst. Aktivieren Sie schließlich das Kontrollkästchen und experimentieren Sie mit verschiedenen position-area
Werten, um zu sehen, welche im gleichen Ergebnis in verschiedenen Schreibmodi resultieren und welche unterschiedliche Ergebnisse liefern.
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: Ausweichoptionen und bedingtes Verbergen Leitfaden
- CSS Ankerpositionierung Modul