position
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Die position
-Eigenschaft CSS legt fest, wie ein Element in einem Dokument positioniert wird. Die physischen Eigenschaften top
, right
, bottom
, und left
sowie die flussbezogenen logischen Eigenschaften inset-block-start
, inset-block-end
, inset-inline-start
, und inset-inline-end
können verwendet werden, um den endgültigen Standort der positionierten Elemente zu bestimmen.
Probieren Sie es aus
position: static;
position: relative;
top: 40px;
left: 40px;
position: absolute;
inset-inline-start: 40px;
inset-block-start: 40px;
position: sticky;
top: 20px;
<section class="default-example" id="default-example">
<div id="example-element-container">
<p>
In this demo you can control the <code>position</code> property for the
yellow box.
</p>
<div class="box"></div>
<div class="box" id="example-element"></div>
<div class="box"></div>
<p class="clear">
To see the effect of <code>sticky</code> positioning, select the
<code>position: sticky</code> option and scroll this container.
</p>
<p>
The element will scroll along with its container, until it is at the top
of the container (or reaches the offset specified in <code>top</code>),
and will then stop scrolling, so it stays visible.
</p>
<p>
The rest of this text is only supplied to make sure the container
overflows, so as to enable you to scroll it and see the effect.
</p>
<hr />
<p>
Far out in the uncharted backwaters of the unfashionable end of the
western spiral arm of the Galaxy lies a small unregarded yellow sun.
Orbiting this at a distance of roughly ninety-two million miles is an
utterly insignificant little blue green planet whose ape-descended life
forms are so amazingly primitive that they still think digital watches are
a pretty neat idea.
</p>
</div>
</section>
section {
align-items: flex-start;
overflow: auto;
}
.box {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
float: left;
width: 65px;
height: 65px;
}
.box + .box {
margin-left: 10px;
}
.clear {
clear: both;
padding-top: 1em;
}
#example-element-container {
position: relative;
text-align: left;
}
#example-element {
background-color: yellow;
border: 3px solid red;
z-index: 1;
}
Syntax
position: static;
position: relative;
position: absolute;
position: fixed;
position: sticky;
/* Global values */
position: inherit;
position: initial;
position: revert;
position: revert-layer;
position: unset;
Werte
static
-
Das Element wird gemäß dem normalen Fluss des Dokuments positioniert. Die Eigenschaften
top
,right
,bottom
,left
undz-index
haben keine Wirkung. Dies ist der Standardwert. relative
-
Das Element wird gemäß dem normalen Fluss des Dokuments positioniert und dann relativ zu sich selbst anhand der Werte von
top
,right
,bottom
undleft
versetzt. Der Versatz beeinflusst die Position anderer Elemente nicht; daher ist der Platz, der dem Element im Layout der Seite zugewiesen wird, derselbe, als wäre die Positionstatic
.Dieser Wert erzeugt einen neuen Stacking-Kontext, wenn der Wert von
z-index
nichtauto
ist. Seine Wirkung auftable-*-group
,table-row
,table-column
,table-cell
undtable-caption
Elemente ist nicht definiert. absolute
-
Das Element wird aus dem normalen Dokumentfluss entfernt, und es wird kein Platz für das Element im Seitenlayout geschaffen. Das Element wird relativ zu seinem nächstgelegenen positionierten Vorfahren (falls vorhanden) oder zum initialen umfassenden Block positioniert. Seine endgültige Position wird durch die Werte von
top
,right
,bottom
undleft
bestimmt.Dieser Wert erzeugt einen neuen Stacking-Kontext, wenn der Wert von
z-index
nichtauto
ist. Die Ränder von absolut positionierten Boxen kollabieren nicht mit anderen Rändern. fixed
-
Das Element wird aus dem normalen Dokumentfluss entfernt, und es wird kein Platz für das Element im Seitenlayout geschaffen. Das Element wird relativ zu seinem initialen umfassenden Block positioniert, was bei visuellen Medien der Ansichtsbereich ist. Seine endgültige Position wird durch die Werte von
top
,right
,bottom
undleft
bestimmt.Dieser Wert erzeugt immer einen neuen Stacking-Kontext. In gedruckten Dokumenten wird das Element auf jeder Seite an derselben Stelle platziert.
sticky
-
Das Element wird gemäß dem normalen Fluss des Dokuments positioniert und dann relativ zu seinem nächstgelegenen scrollenden Vorfahren und dem umfassenden Block (nächstgelegener Blockniveau-Vorfahre), einschließlich tabellenbezogener Elemente, basierend auf den Werten von
top
,right
,bottom
undleft
versetzt. Der Versatz beeinflusst die Position anderer Elemente nicht.Dieser Wert erzeugt immer einen neuen Stacking-Kontext. Beachten Sie, dass ein klebriges Element an seinen nächstgelegenen Vorfahren „haftet“, der einen „Scrollmechanismus“ hat (erstellt, wenn
overflow
hidden
,scroll
,auto
oderoverlay
ist), auch wenn dieser Vorfahre nicht der tatsächlich nächstgelegene scrollende Vorfahre ist.Hinweis: Mindestens eine inset-Eigenschaft (
top
,inset-block-start
,right
,inset-inline-end
, etc.) muss für die Achse, auf der das Element klebrig gemacht werden soll, auf einen Wert ungleichauto
gesetzt werden. Wenn für beideinset
-Eigenschaften einer Achse der Wertauto
festgelegt ist, verhält sich dersticky
-Wert auf dieser Achse wierelative
.
Beschreibung
>Arten der Positionierung
- Ein positioniertes Element ist ein Element, dessen berechneter
position
-Wert entwederrelative
,absolute
,fixed
odersticky
ist. (Mit anderen Worten, es ist alles außerstatic
.) - Ein relativ positioniertes Element ist ein Element, dessen berechneter
position
-Wertrelative
ist. Die Eigenschaftentop
undbottom
geben den vertikalen Versatz von seiner normalen Position an; die Eigenschaftenleft
undright
geben den horizontalen Versatz an. - Ein absolut positioniertes Element ist ein Element, dessen berechneter
position
-Wertabsolute
oderfixed
ist. Die Eigenschaftentop
,right
,bottom
, undleft
geben Versätze von den Rändern des umfassenden Blocks des Elements an. (Der umfassende Block ist der Vorfahre, relativ zu dem das Element positioniert wird.) Wenn das Element Ränder hat, werden diese zum Versatz hinzugefügt. Das Element etabliert einen neuen Block-Formatierungskontext (BFC) für seinen Inhalt. - Ein klebrig positioniertes Element ist ein Element, dessen berechneter
position
-Wertsticky
ist. Es wird als relativ positioniert behandelt, bis sein umfassender Block eine spezifizierte Schwelle (wie das Festlegen vontop
auf einen Wert ungleich auto) innerhalb seiner Flusswurzel (oder des Containers, in dem es sich scrollt) überschreitet, an welchem Punkt es als "fixiert" behandelt wird, bis es die gegenüberliegende Kante seines umfassenden Blocks erreicht.
Meistens sind absolut positionierte Elemente, die height
und width
auf auto
gesetzt haben, so dimensioniert, dass sie ihren Inhalt aufnehmen. Nicht-ersetzte, absolut positionierte Elemente können jedoch so eingestellt werden, dass sie den verfügbaren vertikalen Raum ausfüllen, indem sowohl top
als auch bottom
festgelegt und height
nicht spezifiziert wird (also auto
). Sie können in ähnlicher Weise so eingestellt werden, dass sie den verfügbaren horizontalen Raum füllen, indem sowohl left
als auch right
festgelegt und width
auf auto
belassen werden.
Außer für den gerade beschriebenen Fall (von absolut positionierten Elementen, die den verfügbaren Raum füllen):
Barrierefreiheit
Stellen Sie sicher, dass Elemente, die mit einem absolute
oder fixed
Wert positioniert sind, andere Inhalte nicht verdecken, wenn die Seite zum Vergrößern der Textgröße gezoomt wird.
Leistung & Barrierefreiheit
Scrollende Elemente mit fixed
oder sticky
Inhalten können Leistungs- und Barrierefreiheitsprobleme verursachen. Wenn ein Benutzer scrollt, muss der Browser den klebrigen oder fixierten Inhalt an einer neuen Position neu darstellen. Abhängig von den Inhalten, die neu gezeichnet werden müssen, der Browserleistung und der Verarbeitungsgeschwindigkeit des Geräts kann es sein, dass der Browser es nicht schafft, Neuzeichnungen mit 60 fps auszuführen. Ein solches Szenario kann zu Rucklern führen und, was noch wichtiger ist, zu Barrierefreiheitsproblemen für Menschen mit Sensibilitäten. Eine Lösung besteht darin, will-change: transform
zu den positionierten Elementen hinzuzufügen, um das Element in seiner eigenen Ebene zu rendern, wodurch die Neuzeichnungsgeschwindigkeit verbessert und damit die Leistung und Barrierefreiheit verbessert wird.
Formale Definition
Anfangswert | static |
---|---|
Anwendbar auf | alle Elemente |
Vererbt | Nein |
Berechneter Wert | wie angegeben |
Animationstyp | diskret |
Erstellt Stapelkontext | Ja |
Formale Syntax
position =
static |
relative |
absolute |
sticky |
fixed |
<running()>
<running()> =
running( <custom-ident> )
Beispiele
>Relative Positionierung
Relativ positionierte Elemente sind um einen bestimmten Betrag von ihrer normalen Position innerhalb des Dokuments versetzt, aber ohne dass der Versatz andere Elemente beeinflusst. Im folgenden Beispiel beachten Sie, wie die anderen Elemente platziert sind, als ob "Zwei" den Raum seiner normalen Position einnehmen würde.
HTML
<div class="box" id="one">One</div>
<div class="box" id="two">Two</div>
<div class="box" id="three">Three</div>
<div class="box" id="four">Four</div>
CSS
* {
box-sizing: border-box;
}
.box {
display: inline-block;
width: 100px;
height: 100px;
background: red;
color: white;
}
#two {
position: relative;
top: 20px;
left: 20px;
background: blue;
}
Absolute Positionierung
Relativ positionierte Elemente bleiben im normalen Fluss des Dokuments. Im Gegensatz dazu wird ein Element, das absolut positioniert ist, aus dem Fluss genommen; daher werden andere Elemente positioniert, als ob es nicht existieren würde. Das absolut positionierte Element wird relativ zu seinem nächstgelegenen positionierten Vorfahren positioniert (d.h. dem nächstgelegenen Vorfahren, der nicht static
ist). Wenn ein positionierter Vorfahre nicht existiert, wird es relativ zum ICB (initial umfänglicher Block) positioniert, welcher der umfassende Block des Root-Elements des Dokuments ist.
HTML
<h1>Absolute positioning</h1>
<p>
I am a basic block level element. My adjacent block level elements sit on new
lines below me.
</p>
<p class="positioned">
By default we span 100% of the width of our parent element, and we are as tall
as our child content. Our total width and height is our content + padding +
border width/height.
</p>
<p>
We are separated by our margins. Because of margin collapsing, we are
separated by the width of one of our margins, not both.
</p>
<p>
inline elements <span>like this one</span> and <span>this one</span> sit on
the same line as one another, and adjacent text nodes, if there is space on
the same line. Overflowing inline elements
<span>wrap onto a new line if possible — like this one containing text</span>,
or just go on to a new line if not, much like this image will do:
<img src="https://mdn.github.io/shared-assets/images/examples/long.jpg" />
</p>
CSS
* {
box-sizing: border-box;
}
body {
width: 500px;
margin: 0 auto;
}
p {
background: aqua;
border: 3px solid blue;
padding: 10px;
margin: 10px;
}
span {
background: red;
border: 1px solid black;
}
.positioned {
position: absolute;
background: yellow;
inset-block-start: 30px;
inset-inline-start: 30px;
}
Ergebnis
Fixierte Positionierung
Fixierte Positionierung ist ähnlich der absoluten Positionierung, mit der Ausnahme, dass der umfassende Block des Elements der initiale umfassende Block ist, der durch den Ansichtsbereich festgelegt wird, außer wenn ein Vorfahre eine transform
, perspective
oder filter
Eigenschaft auf einen Wert ungleich none
gesetzt hat (siehe fixierte Positionierung umfassender Block), wobei dann dieser Vorfahre den Platz des umfassenden Blocks der Elemente einnimmt. Dies kann verwendet werden, um ein "schwebendes" Element zu erstellen, das unabhängig vom Scrollen an derselben Position bleibt. Im folgenden Beispiel ist Box "Eins" fixiert bei 80 Pixel vom oberen Rand der Seite und 10 Pixel von links. Auch nach dem Scrollen bleibt es an derselben Stelle relativ zum Ansichtsbereich. Außerdem wird, wenn die will-change
-Eigenschaft auf transform
gesetzt ist, ein neuer umfassender Block etabliert.
HTML
<div class="outer">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortor
eget pulvinar lobortis. Vestibulum ante ipsum primis in faucibus orci luctus
et ultrices posuere cubilia Curae; Nam ac dolor augue. Pellentesque mi mi,
laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit.
Aliquam mollis interdum libero. Sed sodales placerat egestas. Vestibulum ut
arcu aliquam purus viverra dictum vel sit amet mi. Duis nisl mauris, aliquam
sit amet luctus eget, dapibus in enim. Sed velit augue, pretium a sem
aliquam, congue porttitor tortor. Sed tempor nisl a lorem consequat, id
maximus erat aliquet. Sed sagittis porta libero sed condimentum. Aliquam
finibus lectus nec ante congue rutrum. Curabitur quam quam, accumsan id
ultrices ultrices, tempor et tellus.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortor
eget pulvinar lobortis. Vestibulum ante ipsum primis in faucibus orci luctus
et ultrices posuere cubilia Curae; Nam ac dolor augue. Pellentesque mi mi,
laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit.
Aliquam mollis interdum libero. Sed sodales placerat egestas. Vestibulum ut
arcu aliquam purus viverra dictum vel sit amet mi. Duis nisl mauris, aliquam
sit amet luctus eget, dapibus in enim. Sed velit augue, pretium a sem
aliquam, congue porttitor tortor. Sed tempor nisl a lorem consequat, id
maximus erat aliquet. Sed sagittis porta libero sed condimentum. Aliquam
finibus lectus nec ante congue rutrum. Curabitur quam quam, accumsan id
ultrices ultrices, tempor et tellus.
</p>
<div class="box" id="one">One</div>
</div>
CSS
* {
box-sizing: border-box;
}
.box {
width: 100px;
height: 100px;
background: red;
color: white;
}
#one {
position: fixed;
top: 80px;
left: 10px;
background: blue;
}
.outer {
width: 500px;
height: 300px;
overflow: scroll;
padding-left: 150px;
}
Ergebnis
Sticky Positionierung
Die folgende CSS-Regel positioniert das Element mit der ID one
relativ, bis das Ansichtsfenster so gescrollt wird, dass sich das Element 10 Pixel vom oberen Rand befindet. Über diesen Schwellenwert hinaus ist das Element 10 Pixel vom oberen Rand fixiert.
#one {
position: sticky;
top: 10px;
}
Liste mit Sticky-Überschriften
Eine häufige Verwendung für Sticky-Positionierung ist für die Überschriften in einer alphabetisch sortierten Liste. Die "B" Überschrift wird direkt unter den mit "A" beginnenden Elementen angezeigt, bis sie aus dem Bildschirm gescrollt werden. Stattdessen mit dem Rest des Inhalts vom Bildschirm zu gleiten, bleibt die "B" Überschrift oben fixiert, bis alle "B" Einträge vom Bildschirm gescrollt sind; dann wird sie von der "C" Überschrift verdeckt, und so weiter.
Sie müssen eine Schwelle mit mindestens einer der Eigenschaften top
, right
, bottom
oder left
festlegen, damit Sticky-Positionierung wie erwartet funktioniert. Andernfalls wird sie von der relativen Positionierung nicht zu unterscheiden sein.
HTML
<dl>
<div>
<dt>A</dt>
<dd>Andrew W.K.</dd>
<dd>Apparat</dd>
<dd>Arcade Fire</dd>
<dd>At The Drive-In</dd>
<dd>Aziz Ansari</dd>
</div>
<div>
<dt>C</dt>
<dd>Chromeo</dd>
<dd>Common</dd>
<dd>Converge</dd>
<dd>Crystal Castles</dd>
<dd>Cursive</dd>
</div>
<div>
<dt>E</dt>
<dd>Explosions In The Sky</dd>
</div>
<div>
<dt>T</dt>
<dd>Ted Leo & The Pharmacists</dd>
<dd>T-Pain</dd>
<dd>Thrice</dd>
<dd>TV On The Radio</dd>
<dd>Two Gallants</dd>
</div>
</dl>
CSS
* {
box-sizing: border-box;
}
dl > div {
background: white;
padding-top: 24px;
}
dt {
background: #b8c1c8;
border-bottom: 1px solid #989ea4;
border-top: 1px solid #717d85;
color: white;
font:
bold 18px/21px Helvetica,
Arial,
sans-serif;
margin: 0;
padding: 2px 0 0 12px;
position: -webkit-sticky;
position: sticky;
top: -1px;
}
dd {
font:
bold 20px/45px Helvetica,
Arial,
sans-serif;
margin: 0;
padding-left: 12px;
white-space: nowrap;
}
dd + dd {
border-top: 1px solid #cccccc;
}
Ergebnis
Sticky-Positionierung mit allen festgelegten Randabständen
Das folgende Beispiel zeigt das Verhalten eines Elements, wenn alle Randabstände festgelegt sind. Hier haben wir zwei Glühbirnen-Emojis in einem Absatz. Die Glühbirnen verwenden Sticky-Positionierung, und die Randabstände sind mit 50px vom oberen Rand, 100px vom rechten Rand, 50px vom unteren Rand und 50px vom linken Rand angegeben. Ein grauer Hintergrund am übergeordneten div-Element markiert den Einfügebereich.
HTML
Use scrollbars to put the light bulbs(💡) in the right place in the following
text:
<div>
<p>
The representation of an idea by a light bulb(<span class="bulb">💡</span>)
is a commonly used metaphor that symbolizes the moment of inspiration or the
birth of a new idea. The association between a light bulb and an idea can be
traced back to the invention of the incandescent light bulb(<span
class="bulb"
>💡</span
>) by Thomas Edison in the late 19th century. The light bulb is a powerful
symbol because it represents illumination, clarity, and the sudden
brightening of one's thoughts or understanding. When someone has an idea, it
is often described as a light bulb turning on in their mind, signifying a
moment of insight or creativity. The image of a light bulb also suggests the
idea of energy, power, and the potential for growth and development.
</p>
</div>
CSS
.bulb {
position: sticky;
inset: 50px 100px;
}
div {
/* mark area defined by the inset boundaries using gray color */
background: linear-gradient(#99999999, #99999999) 100px 50px / 192px 100px
no-repeat;
}
Ergebnis
Wenn Sie beide Glühbirnen an ihrem richtigen Platz einsetzen, werden Sie feststellen, dass sie relativ innerhalb des Einfügebereichs positioniert sind. Wenn Sie sie aus dem Einfügebereich herausbewegen, werden sie (sticky) an die Einfügegrenze in dieser Richtung fixiert.
Spezifikationen
Specification |
---|
CSS Positioned Layout Module Level 3> # position-property> |
Browser-Kompatibilität
Loading…