top

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

The top CSS property sets the vertical position of a positioned element. This inset property has no effect on non-positioned elements.

Try it

The effect of top depends on how the element is positioned (i.e., the value of the position property):

  • When position is set to absolute or fixed, the top property specifies the distance between the element's outer margin of the top edge and the inner border of the top edge of its containing block, or, in the case of anchor positioned elements when the anchor() function is used within the value, relative to the specified <anchor-side> edge. The top property is compatible with the top, bottom, start, end, self-start, self-end, center, and <percentage> values.
  • When position is set to relative, the top property specifies the distance the element's top edge is moved below its normal position.
  • When position is set to sticky, the top property is used to compute the sticky-constraint rectangle.
  • When position is set to static, the top property has no effect.

When both top and bottom values are specified, there are three different cases:

  • If position is set to absolute or fixed and height is unspecified (either auto or 100%), both the top and bottom values are respected.
  • If position is set to relative or height is constrained, the top property takes precedence and the bottom property is ignored.
  • If position is set to sticky, both top and bottom values are considered. This means that a sticky element can potentially move up and down within its containing block based on the values of these two properties as long as the element's position box remains contained within its containing block.

Syntax

css
/* <length> values */
top: 3px;
top: 2.4em;
top: anchor(bottom);
top: calc(anchor(--myAnchor 50%) + 10px);

/* <percentage>s of the height of the containing block */
top: 10%;

/* Keyword value */
top: auto;

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

Values

<length>

A negative, null, or positive <length> that represents:

  • for absolutely positioned elements, the distance to the top edge of the containing block.
  • for anchor-positioned elements, the anchor() function resolves to a <length> value relative to the position of the associated anchor element's top or bottom edge.
  • for relatively positioned elements, the distance that the element is moved below its normal position.
<percentage>

A <percentage> of the containing block's height.

auto

Specifies that:

  • for absolutely positioned elements, the position of the element is based on the bottom property, while height: auto is treated as a height based on the content; or if bottom is also auto, the element is positioned where it should vertically be positioned if it were a static element.
  • for relatively positioned elements, the distance of the element from its normal position is based on the bottom property; or if bottom is also auto, the element is not moved vertically at all.
inherit

Specifies that the value is the same as the computed value from its parent element (which might not be its containing block). This computed value is then handled as if it were a <length>, <percentage>, or the auto keyword.

Formal definition

Initial valueauto
Applies topositioned elements
Inheritedno
Percentagesrefer to the height of the containing block
Computed valueif specified as a length, the corresponding absolute length; if specified as a percentage, the specified value; otherwise, auto
Animation typea length, percentage or calc();

Formal syntax

top = 
auto |
<length-percentage> |
<anchor()> |
<anchor-size()>

<length-percentage> =
<length> |
<percentage>

<anchor()> =
anchor( <anchor-name>? &&
<anchor-side> , <length-percentage>? )

<anchor-size()> =
anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )

<anchor-name> =
<dashed-ident>

<anchor-side> =
inside |
outside |
top |
left |
right |
bottom |
start |
end |
self-start |
self-end |
<percentage> |
center

<anchor-size> =
width |
height |
block |
inline |
self-block |
self-inline

Examples

A positioned element set 10% from the top

css
body {
  background: beige;
}

div {
  position: absolute;
  top: 10%;
  right: 40%;
  bottom: 20%;
  left: 15%;
  background: gold;
  border: 1px solid blue;
}
html
<div>The size of this content is determined by the position of its edges.</div>

Specifications

Specification
CSS Positioned Layout Module Level 3
# insets

Browser compatibility

BCD tables only load in the browser

See also