top / right / bottom / left

Utilities for controlling the placement of positioned elements.

2025-04-15

Written by: tdtc

ClassStyle
inset-<number>inset: calc(var(--spacing) * <number>);
-inset-<number>inset: calc(var(--spacing) * -<number>);
inset-<fraction>inset: calc(<fraction> * 100%);
-inset-<fraction>inset: calc(<fraction> * -100%);
inset-pxinset: 1px;
-inset-pxinset: -1px;
inset-fullinset: 100%;
-inset-fullinset: -100%;
inset-autoinset: auto;
inset-(<custom-property>)inset: var(<custom-property>);
inset-[<value>]inset: <value>;
inset-x-<number>inset-inline: calc(var(--spacing) * <number>);
-inset-x-<number>inset-inline: calc(var(--spacing) * -<number>);
inset-x-<fraction>inset-inline: calc(<fraction> * 100%);
-inset-x-<fraction>inset-inline: calc(<fraction> * -100%);
inset-x-pxinset-inline: 1px;
-inset-x-pxinset-inline: -1px;
inset-x-fullinset-inline: 100%;
-inset-x-fullinset-inline: -100%;
inset-x-autoinset-inline: auto;
inset-x-(<custom-property>)inset-inline: var(<custom-property>);
inset-x-[<value>]inset-inline: <value>;
inset-y-<number>inset-block: calc(var(--spacing) * <number>);
-inset-y-<number>inset-block: calc(var(--spacing) * -<number>);
inset-y-<fraction>inset-block: calc(<fraction> * 100%);
-inset-y-<fraction>inset-block: calc(<fraction> * -100%);
inset-y-pxinset-block: 1px;
-inset-y-pxinset-block: -1px;
inset-y-fullinset-block: 100%;
-inset-y-fullinset-block: -100%;
inset-y-autoinset-block: auto;
inset-y-(<custom-property>)inset-block: var(<custom-property>);
inset-y-[<value>]inset-block: <value>;
start-<number>inset-inline-start: calc(var(--spacing) * <number>);
-start-<number>inset-inline-start: calc(var(--spacing) * -<number>);
start-<fraction>inset-inline-start: calc(<fraction> * 100%);
-start-<fraction>inset-inline-start: calc(<fraction> * -100%);
start-pxinset-inline-start: 1px;
-start-pxinset-inline-start: -1px;
start-fullinset-inline-start: 100%;
-start-fullinset-inline-start: -100%;
start-autoinset-inline-start: auto;
start-(<custom-property>)inset-inline-start: var(<custom-property>);
start-[<value>]inset-inline-start: <value>;
end-<number>inset-inline-end: calc(var(--spacing) * <number>);
-end-<number>inset-inline-end: calc(var(--spacing) * -<number>);
end-<fraction>inset-inline-end: calc(<fraction> * 100%);
-end-<fraction>inset-inline-end: calc(<fraction> * -100%);
end-pxinset-inline-end: 1px;
-end-pxinset-inline-end: -1px;
end-fullinset-inline-end: 100%;
-end-fullinset-inline-end: -100%;
end-autoinset-inline-end: auto;
end-(<custom-property>)inset-inline-end: var(<custom-property>);
end-[<value>]inset-inline-end: <value>;
top-<number>top: calc(var(--spacing) * <number>);
-top-<number>top: calc(var(--spacing) * -<number>);
top-<fraction>top: calc(<fraction> * 100%);
-top-<fraction>top: calc(<fraction> * -100%);
top-pxtop: 1px;
-top-pxtop: -1px;
top-fulltop: 100%;
-top-fulltop: -100%;
top-autotop: auto;
top-(<custom-property>)top: var(<custom-property>);
top-[<value>]top: <value>;
right-<number>right: calc(var(--spacing) * <number>);
-right-<number>right: calc(var(--spacing) * -<number>);
right-<fraction>right: calc(<fraction> * 100%);
-right-<fraction>right: calc(<fraction> * -100%);
right-pxright: 1px;
-right-pxright: -1px;
right-fullright: 100%;
-right-fullright: -100%;
right-autoright: auto;
right-(<custom-property>)right: var(<custom-property>);
right-[<value>]right: <value>;
bottom-<number>bottom: calc(var(--spacing) * <number>);
-bottom-<number>bottom: calc(var(--spacing) * -<number>);
bottom-<fraction>bottom: calc(<fraction> * 100%);
-bottom-<fraction>bottom: calc(<fraction> * -100%);
bottom-pxbottom: 1px;
-bottom-pxbottom: -1px;
bottom-fullbottom: 100%;
-bottom-fullbottom: -100%;
bottom-autobottom: auto;
bottom-(<custom-property>)bottom: var(<custom-property>);
bottom-[<value>]bottom: <value>;
left-<number>left: calc(var(--spacing) * <number>);
-left-<number>left: calc(var(--spacing) * -<number>);
left-<fraction>left: calc(<fraction> * 100%);
-left-<fraction>left: calc(<fraction> * -100%);
left-pxleft: 1px;
-left-pxleft: -1px;
left-fullleft: 100%;
-left-fullleft: -100%;
left-autoleft: auto;
left-(<custom-property>)left: var(<custom-property>);
left-[<value>]left: <value>;

Basic example

Use top-, right-, bottom-, left-, and inset- utilities like top-0 and bottom-4 to set the horizontal or vertical position of a positioned element:

<!-- Pin to top left corner -->
<div class="relative size-32 ...">
  <div class="absolute top-0 left-0 size-16 ...">01</div>
</div>
<!-- Span top edge -->
<div class="relative size-32 ...">
  <div class="absolute inset-x-0 top-0 h-16 ...">02</div>
</div>
<!-- Pin to top right corner -->
<div class="relative size-32 ...">
  <div class="absolute top-0 right-0 size-16 ...">03</div>
</div>
<!-- Span left edge -->
<div class="relative size-32 ...">
  <div class="absolute inset-y-0 left-0 w-16 ...">04</div>
</div>
<!-- Fill entire parent -->
<div class="relative size-32 ...">
  <div class="absolute inset-0 ...">05</div>
</div>
<!-- Span right edge -->
<div class="relative size-32 ...">
  <div class="absolute inset-y-0 right-0 w-16 ...">06</div>
</div>
<!-- Pin to bottom left corner -->
<div class="relative size-32 ...">
  <div class="absolute bottom-0 left-0 size-16 ...">07</div>
</div>
<!-- Span bottom edge -->
<div class="relative size-32 ...">
  <div class="absolute inset-x-0 bottom-0 h-16 ...">08</div>
</div>
<!-- Pin to bottom right corner -->
<div class="relative size-32 ...">
  <div class="absolute right-0 bottom-0 size-16 ...">09</div>
</div>

Using negative values

To use a negative top/right/bottom/left value, prefix the class name with a dash to convert it to a negative value:

<div class="relative size-32 ...">
  <div class="absolute -top-4 -left-4 size-14 ..."></div>
</div>

Using logical properties

Use start- or end- utilities like start-0 and end-4 to set the inset-inline-start and inset-inline-end logical properties, which map to either the left or right side based on the text direction:

<div dir="ltr">
  <div class="relative size-32 ...">
    <div class="absolute start-0 top-0 size-14 ..."></div>
  </div>
  <div>
    <div dir="rtl">
      <div class="relative size-32 ...">
        <div class="absolute start-0 top-0 size-14 ..."></div>
      </div>
      <div></div>
    </div>
  </div>
</div>

For more control, you can also use the LTR and RTL modifiers to conditionally apply specific styles depending on the current text direction.

Using a custom value

Use utilities like inset-[] and top-[] to set the position based on a completely custom value:

<div class="inset-[3px] ...">
  <!-- ... -->
</div>

Ref