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 Anker-Positionierten Element, relativ zu den Rändern seines zugehörigen Ankerelements positioniert zu werden, indem das positionierte Element auf eine oder mehrere Kacheln eines impliziten 3x3-Rasters gelegt 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 Einsetzeigenschaften und die anchor() Funktion. Das auf einem Raster basierende Konzept löst den häufigen Anwendungsfall der Anordnung der Ränder des enthaltenen Blocks des positionierten Elements relativ zu den Rändern seines Standard-Ankerelements.
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 benannt und unterstützt, mit denselben Eigenschaftswerten. Beide Eigenschaftsnamen werden für kurze Zeit 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 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 ist zwei <position-area> Schlüsselbegriffe oder das Schlüsselwort none. Wenn nur ein <position-area> Schlüsselbegriff angegeben wird, wird der zweite implizit.
<position-area>-
Gibt den Bereich des Positionierungs-Rasters 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 Kachelrasters, genannt das position-area grid, wobei das Ankerelement die mittlere Kachel ist:
Die Rasterkacheln sind in Zeilen und Spalten unterteilt:
- Die drei Zeilen werden durch die physikalischen Werte
top,centerundbottomdargestellt. Sie haben auch logische Entsprechungen wieblock-start,centerundblock-end, sowie Koordinatenäquivalente —y-start,centerundy-end. - Die drei Spalten werden durch die physikalischen Werte
left,centerundrightdargestellt. Sie haben auch logische Entsprechungen wieinline-start,centerundinline-endsowie Koordinatenäquivalente —x-start,centerundx-end.
Die Dimensionen der mittleren Kachel werden durch den enthältenden Block des Ankerelements definiert, während die Dimensionen des äußeren Rands des Rasters durch den enthältenden 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. Genau genommen wird der enthältende Block des positionierten Elements auf den Rasterbereich gesetzt.
Zum Beispiel:
- Sie können einen Zeilenwert und einen Spaltenwert angeben, um das positionierte Element in einer einzigen, spezifischen Rasterzelle zu platzieren — beispielsweise wird
top left(logisches Äquivalentstart start) oderbottom center(logisches Äquivalentend center) das positionierte Element in der oberen linken oder unteren mittleren Zelle 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 wird, wobei es zunächst in der Mitte platziert wird, und der andere gibt die anderen Kacheln dieser Zeile oder Spalte an, die umspannt werden sollen. Zum Beispiel:top span-leftbewirkt, dass das positionierte Element in der Mitte der oberen Zeile platziert und über die Mitte und die linke Kachel dieser Zeile umspannt wird.block-end span-inline-endbewirkt, dass das positionierte Element in der Mitte der Block-End-Zeile platziert und über die Mitte und die Inline-End-Kacheln dieser Zeile umspannt wird.bottom span-allundy-end span-allbewirken, dass das positionierte Element in der Mitte der unteren Zeile platziert wird und über drei Zellen umspannt wird, in diesem Fall über die linke, mittlere und rechte Kachel der unteren Zeile.
Für detaillierte Informationen zu Ankerfunktionen, Verwendung und der position-area Eigenschaft siehe die CSS-Ankerpositionierung Modul-Landingpage und den Verwendung der CSS-Ankerpositionierung Leitfaden, speziell den Abschnitt über das Setzen einer position-area.
Angepasstes Standardverhalten
Wenn ein <position-area> Wert auf ein positioniertes Element gesetzt wird, wird das Standardverhalten einiger seiner Eigenschaften angepasst, um eine gute Standardausrichtung zu liefern.
normal Wert der Eigenschaft für die Eigenpositionierung
Der normal-Wert der Eigenpositionierungseigenschaften, einschließlich align-items, align-self, justify-items und justify-self, verhält sich entweder als start, end oder anchor-center. Welcher Wert einer Eigenpositionierungseigenschaft als Standardwert verwendet wird, hängt von der Positionierung des Elements ab:
- Wenn der
position-areaWert den mittleren Bereich auf einer Achse angibt, ist die Standardausrichtung auf dieser Achseanchor-center. - Andernfalls ist das Verhalten das Gegenteil des durch die
position-areaEigenschaft angegebenen Bereichs. Zum Beispiel, wenn derposition-areaWert den Startbereich seiner Achse spezifiziert, ist die Standardausrichtung auf 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 und über die Mitte und die Startkacheln dieser Reihe umspannt wird. In diesem Fall werden die Eigenpositionierungseigenschaften standardmäßig align-self: end und justify-self: anchor-center verwenden.
Einsetzeigenschaften und Werte
Wenn ein ankerpositioniertes Element mit der position-area Eigenschaft positioniert wird, spezifizieren alle festgelegten Einsetzeigenschaften, wie top oder inset-inline-end, Versatzwerte vom Positionierungsbereich. Einige andere Eigenschaftswerte, wie max-block-size: 100%, werden ebenfalls relativ zum Positionierungsbereich sein. Alle Einsetzeigenschaften, die gesetzt oder standardmäßig auf auto sind, verhalten sich so, als ob ihr Wert auf 0 gesetzt wurde.
Eine Nebenbemerkung 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, sie wird aber auch von der Größe des position-area Rasters beeinflusst.
Wenn das positionierte Element in einer einzelnen oberen Mitte-, unteren Mitte- oder Mittel-Mittelzelle platziert wird, ist seine Blockgröße dieselbe wie die Größe des Anker-Containblöckelements, wachsend nach oben, unten oder in beide Richtungen. Das positionierte Element wird mit der angegebenen Rasterzelle ausgerichtet, übernimmt jedoch dieselbe Breite wie das Ankerelement. Es lässt jedoch seinen Inhalt nicht überlaufen — seine minimale Breite wird sein min-content (wie durch die Breite seines längsten Wortes definiert) sein.
Wenn das positionierte Element in einer anderen einzelnen Rasterzelle (etwa mit position-area: top left) platziert oder so eingestellt wird, dass es zwei oder mehr Rasterzellen umspannt (zum Beispiel mit position-area: bottom span-all), wird es mit dem angegebenen Rasterbereich ausgerichtet, verhält sich jedoch so, als ob es eine width von max-content darauf gesetzt hat. Es wird entsprechend der Größe seines enthältenden Blocks bemessen, was die Größe ist, die ihm auferlegt wird, wenn es auf position: fixed gesetzt wurde. Es wird so breit wie der Textinhalt, obwohl es möglicherweise auch durch den Rand des <body> eingeschränkt wird.
Verwendung von position-area zur Positionierung von Popovers
Beim Verwenden von position-area zur Positionierung von Popovers seien Sie sich bewusst, dass die Standardstile für Popovers mit der von Ihnen angestrebten Positionierung in Konflikt stehen können. Die gewöhnlichen Schuldigen sind die Standardstile für margin und inset, daher empfiehlt es sich, 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 relativ zu seinem zugehörigen Anker verankert und positioniert.
HTML
Das HTML enthält ein <div> und ein <p>. Das <p> wird mit CSS relativ zum <div> positioniert. Wir inkludieren auch einen Stilblock, 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: top center;
}
</style>
CSS
Wir konvertieren das <div> zu einem 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 einen p Selektor gesetzt, sodass der Wert weniger Spezifität hat 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 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 ankerpositionierten Element zu ändern, um zu sehen, wie es wächst. Versuchen Sie auch, den Wert der position-area Eigenschaft auf etwas anderes wie center zu ändern.
Vergleich von position-area Werten
Dieses Demo erstellt einen Anker und verknüpft ein positioniertes Element damit. Es bietet auch ein Dropdown-Menü, mit dem Sie verschiedene position-area Werte auswählen können, um sie auf das positionierte Element anzuwenden, um ihre Wirkung zu sehen. Eine der Optionen verursacht das Erscheinen eines Textfelds, 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 sich position-area Wertwirkungen in verschiedenen Schreibmodi unterscheiden.
HTML
Im HTML spezifizieren wir zwei <div> Elemente, eines mit der Klasse anchor und eines mit der Klasse infobox. Diese sollen das Ankerelement und das von uns damit verknüpfte positionierte Element sein. Wir haben das contenteditable Attribut auf beide gesetzt, wodurch sie direkt bearbeitbar sind.
Wir haben auch zwei Formulare eingeschlossen, die die <select> und <input type="text"> Elemente für das Setzen verschiedener position-area Werte enthalten, sowie das <input type="checkbox"> Element zum Umschalten des vertikalen writing-mode. Der Code dafür sowie das JavaScript wurden der Kürze halber versteckt.
<div class="anchor" contenteditable>⚓︎</div>
<div class="infobox">
<p contenteditable>You can edit this text.</p>
</div>
CSS
In CSS deklarieren wir zuerst das anchor <div> als Ankerelement, indem wir einen Ankernamen über die anchor-name Eigenschaft darauf setzen.
Das positionierte Element wird mit dem Ankerelement verknüpft, indem wir seinen Ankernamen als Wert der position-anchor Eigenschaft des positionierten Elements setzen. 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, sodass, wenn das positionierte Element einen position-area Wert erhält, der es über dem Anker platziert, Sie die Position der Elemente zueinander 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 die Auswirkung auf die Position der Infobox zu sehen. Wählen Sie den "Benutzerdefinierten" Wert und versuchen Sie, benutzerdefinierte position-area Werte in das Texteingabefeld einzugeben, um deren Wirkung zu sehen. Fügen Sie dem Anker- und den ankerpositionierten Elementen Text hinzu, um zu sehen, wie das ankerpositionierte 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 denselben Effekt über verschiedene Schreibmodi haben 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