Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

position CSS property

Baseline Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

Die position CSS-Eigenschaft legt fest, wie ein Element in einem Dokument positioniert wird. Die physikalischen Eigenschaften top, right, bottom und left sowie die flussrelativen logischen Eigenschaften inset-block-start, inset-block-end, inset-inline-start und inset-inline-end können verwendet werden, um den endgültigen Standort von positionierten Elementen 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

css
position: static;
position: relative;
position: absolute;
position: fixed;
position: sticky;

/* Global values */
position: inherit;
position: initial;
position: revert;
position: revert-layer;
position: unset;

Werte

Diese Eigenschaft wird als einer der folgenden Schlüsselwerte angegeben:

static

Das Element wird entsprechend dem normalen Fluss des Dokuments positioniert. Die Eigenschaften top, right, bottom, left und z-index haben keine Wirkung. Dies ist der Standardwert.

relative

Das Element wird entsprechend dem normalen Fluss des Dokuments positioniert und dann relativ zu sich selbst basierend auf den Werten von top, right, bottom und left versetzt. Der Versatz beeinflusst die Position anderer Elemente nicht; daher ist der dem Element im Seitenlayout gegebene Raum derselbe, als ob die Position static wäre.

Dieser Wert erstellt einen neuen Stacking Context, wenn der Wert von z-index nicht auto ist. Seine Wirkung auf table-*-group, table-row, table-column, table-cell und table-caption-Elemente ist undefiniert.

absolute

Das Element wird aus dem normalen Dokumentfluss entfernt, und es wird kein Raum für das Element im Seitenlayout geschaffen. Das Element wird relativ zu seinem nächstgelegenen positionierten Vorfahren (falls vorhanden) oder zum initialen Containing Block positioniert. Seine endgültige Position wird durch die Werte von top, right, bottom und left bestimmt.

Dieser Wert erstellt einen neuen Stacking Context, wenn der Wert von z-index nicht auto 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 Raum für das Element im Seitenlayout geschaffen. Das Element wird relativ zu seinem initialen Containing Block positioniert, was bei visuellen Medien der Viewport ist. Seine endgültige Position wird durch die Werte von top, right, bottom und left bestimmt.

Dieser Wert erstellt immer einen neuen Stacking Context. In gedruckten Dokumenten wird das Element auf jeder Seite an derselben Position platziert.

sticky

Das Element wird entsprechend dem normalen Fluss des Dokuments positioniert und dann relativ zu seinem nächstgelegenen scrollenden Vorfahren und dem Containing Block (nächstgelegener Block-Level-Vorfahre), einschließlich tabellenverwandter Elemente, basierend auf den Werten von top, right, bottom und left versetzt. Der Versatz beeinflusst die Position anderer Elemente nicht.

Dieser Wert erstellt immer einen neuen Stacking Context. Beachten Sie, dass ein klebriges Element an seinem nächstgelegenen Vorfahren "haftet", der einen "Scrollmechanismus" (erstellt, wenn overflow hidden, scroll, auto oder overlay ist) hat, 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 auf einen nicht auto Wert gesetzt werden, damit die Achse, auf der das Element klebrig gemacht werden soll, funktioniert. Wenn beide inset-Eigenschaften für eine Achse auf auto gesetzt sind, verhält sich der sticky-Wert auf dieser Achse wie relative.

Beschreibung

Arten der Positionierung

  • Ein positioniertes Element ist ein Element, dessen berechneter position Wert entweder relative, absolute, fixed oder sticky ist. (Mit anderen Worten, es ist alles außer static.)
  • Ein relativ positioniertes Element ist ein Element, dessen berechneter position Wert relative ist. Die Eigenschaften top und bottom geben den vertikalen Versatz von seiner normalen Position an; die Eigenschaften left und right geben den horizontalen Versatz an.
  • Ein absolut positioniertes Element ist ein Element, dessen berechneter position Wert absolute oder fixed ist. Die Eigenschaften top, right, bottom und left geben Versätze von den Rändern des Containing Block des Elements an. (Der Containing Block ist der Vorfahre, relativ zu dem das Element positioniert ist.) Wenn das Element Ränder hat, werden diese zum Versatz hinzugefügt. Das Element etabliert einen neuen Block Formatting Context (BFC) für seine Inhalte.
  • Ein klebrig positioniertes Element ist ein Element, dessen berechneter position Wert sticky ist. Es wird als relativ positioniert behandelt, bis sein Containing Block eine festgelegte Schwelle (wie das Setzen von top auf einen anderen Wert als auto) innerhalb seines Flussroots (oder dem Container, in dem es scrollt) überschreitet, an welchem Punkt es als "geklebt" behandelt wird, bis es den gegenüberliegenden Rand seines Containing Block erreicht.

Meistens werden absolut positionierte Elemente, deren height und width auf auto gesetzt sind, 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 angegeben und height nicht festgelegt wird (das heißt, auto). Ebenso können sie so eingestellt werden, dass sie den verfügbaren horizontalen Raum ausfüllen, indem sowohl left als auch right angegeben und width als auto belassen wird.

Mit Ausnahme des gerade beschriebenen Falls (von absolut positionierten Elementen, die den verfügbaren Raum ausfüllen):

  • Wenn sowohl top als auch bottom angegeben sind (technisch, nicht auto), gewinnt top.
  • Wenn sowohl left als auch right angegeben sind, gewinnt left, wenn direction ltr ist (Englisch, horizontales Japanisch usw.) und right gewinnt, wenn direction rtl ist (Persisch, Arabisch, Hebräisch usw.).

Barrierefreiheit

Stellen Sie sicher, dass mit einem absolute oder fixed Wert positionierte Elemente keinen anderen Inhalt verdecken, wenn die Seite herangezoomt wird, um die Textgröße zu erhöhen.

Leistung & Barrierefreiheit

Scrollende Elemente mit fixed oder sticky Inhalt können Leistungs- und Barrierefreiheitsprobleme verursachen. Während ein Benutzer scrollt, muss der Browser den klebrigen oder feststehenden Inhalt neu positionieren. Je nach dem Inhalt, der neu positioniert werden muss, der Leistung des Browsers und der Verarbeitungsgeschwindigkeit des Geräts, kann der Browser möglicherweise nicht in der Lage sein, die Neupositionierung mit 60 fps durchzuführen. Ein solches Szenario kann zu Ruckeln führen und, was noch wichtiger ist, Barrierefreiheitsprobleme für Personen mit Empfindlichkeiten darstellen. Eine Lösung besteht darin, will-change: transform zu den positionierten Elementen hinzuzufügen, um das Element in seiner eigenen Schicht darzustellen, was die Neupositionierungsgeschwindigkeit verbessert und damit die Leistung und Barrierefreiheit erhöht.

Formale Definition

Anfangswertstatic
Anwendbar aufalle Elemente
VererbtNein
Berechneter Wertwie angegeben
Animationstypdiskret
Erstellt StapelkontextJa

Formale Syntax

position = 
static |
relative |
absolute |
sticky |
fixed |
<running()>

<running()> =
running( <custom-ident> )

Beispiele

Relative Positionierung

Relativ positionierte Elemente sind im Dokument um einen bestimmten Betrag von ihrer normalen Position versetzt, wobei der Versatz andere Elemente nicht beeinflusst. Im folgenden Beispiel sehen Sie, wie die anderen Elemente so platziert sind, als ob "Two" den Raum seiner normalen Position einnehmen würde.

HTML

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

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

Elemente, die relativ positioniert sind, verbleiben im normalen Fluss des Dokuments. Im Gegensatz dazu wird ein absolut positioniertes Element aus dem Fluss genommen; daher werden andere Elemente so positioniert, als ob es nicht existieren würde. Das absolut positionierte Element wird relativ zu seinem nächstgelegenen positionierten Vorfahren (d.h. der nächstgelegene Vorfahre, der nicht static ist) positioniert. Wenn ein positionierter Vorfahr nicht existiert, wird es relativ zum ICB (Initial Containing Block) positioniert, welcher der enthaltende Block des Stamm-Elements des Dokuments ist.

HTML

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

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

Feste Positionierung

Die feste Positionierung ähnelt der absoluten Positionierung, mit der Ausnahme, dass der Containing Block des Elements der initiale enthaltende Block ist, der vom Viewport etabliert wird, es sei denn, ein Vorfahr hat eine transform, perspective oder filter-Eigenschaft auf einen anderen Wert als none gesetzt (siehe fixierte Positionierungsenthältenden Block), was dann bewirkt, dass dieser Vorfahre den Platz des Containing Blocks des Elements einnimmt. Dies kann verwendet werden, um ein "schwebendes" Element zu erstellen, das unabhängig vom Scrollen an derselben Position bleibt. Im folgenden Beispiel bleibt das Feld "One" in 80 Pixel Entfernung von der Oberseite der Seite und in 10 Pixel Entfernung von der linken Seite fixiert. Selbst nach dem Scrollen bleibt es an derselben Position relativ zum Viewport. Wenn zudem die will-change-Eigenschaft auf transform gesetzt wird, wird ein neuer enthaltender Block erstellt.

HTML

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

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

Klebrige Positionierung

Die folgende CSS-Regel positioniert das Element mit der ID one relativ, bis der Viewport so gescrollt wird, dass das Element 10 Pixel von der Oberseite entfernt ist. Jenseits dieser Schwelle wird das Element auf 10 Pixel von der Oberseite fixiert.

css
#one {
  position: sticky;
  top: 10px;
}

Liste mit klebrigen Überschriften

Eine häufige Nutzung der klebrigen Positionierung ist für die Überschriften in einer alphabetisch sortierten Liste. Die Überschrift "B" wird direkt unter den Elementen erscheinen, die mit "A" beginnen, bis diese aus dem Bildschirm gescrollt sind. Anstatt mit dem restlichen Inhalt vom Bildschirm zu gleiten, bleibt die "B"-Überschrift dann oben am Viewport fixiert, bis alle "B"-Elemente aus dem Bildschirm gescrollt sind, woraufhin sie von der "C"-Überschrift überdeckt wird und so weiter.

Sie müssen eine Schwelle mit mindestens einem der top, right, bottom oder left für die klebrige Positionierung angeben, damit sie wie erwartet funktioniert. Andernfalls unterscheidet sie sich nicht von der relativen Positionierung.

HTML
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 &amp; The Pharmacists</dd>
    <dd>T-Pain</dd>
    <dd>Thrice</dd>
    <dd>TV On The Radio</dd>
    <dd>Two Gallants</dd>
  </div>
</dl>
CSS
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

Klebrige Position mit allen gesetzten Inset-Grenzen

Das folgende Beispiel demonstriert das Verhalten eines Elements, wenn alle Inset-Grenzen gesetzt sind. Hier haben wir zwei Glühbirnen-Emojis in einem Absatz. Die Glühbirnen verwenden die klebrige Positionierung, und die Inset-Grenzen sind mit 50px von oben und unten sowie 100px von links und rechts angegeben. Ein grauer Hintergrund auf dem übergeordneten div-Element kennzeichnet den Inset-Bereich.

HTML
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
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 ihren richtigen Platz setzen, werden Sie feststellen, dass sie relativ innerhalb des Inset-Bereichs positioniert sind. Wenn Sie sie aus dem Inset-Bereich bewegen, werden sie an der Inset-Grenze in dieser Richtung fixiert (klebrig).

Spezifikationen

Spezifikation
CSS Positioned Layout Module Level 3
# position-property

Browser-Kompatibilität

Siehe auch