Tailwind CSS Top / Right / Bottom / Left
The top
, right
, bottom
, and left
properties determine the position of elements within a layout. These properties only work when the elements that are positioned (absolute
, relative
, fixed
, or sticky
).
Tailwind CSS provides utility classes for top
, right
, bottom
, and left
values, helping you build custom layouts with less effort and more precision.
Class | Properties | Example |
---|---|---|
inset-0 | inset: 0px; | <div className="inset-0"></div> |
inset-x-0 | left: 0px;
right: 0px; | <div className="inset-x-0"></div> |
inset-y-0 | top: 0px;
bottom: 0px; | <div className="inset-y-0"></div> |
start-0 | inset-inline-start: 0px; | <div className="start-0"></div> |
end-0 | inset-inline-end: 0px; | <div className="end-0"></div> |
top-0 | top: 0px; | <div className="top-0"></div> |
right-0 | right: 0px; | <div className="right-0"></div> |
bottom-0 | bottom: 0px; | <div className="bottom-0"></div> |
left-0 | left: 0px; | <div className="left-0"></div> |
inset-px | inset: 1px; | <div className="inset-px"></div> |
inset-x-px | left: 1px;
right: 1px; | <div className="inset-x-px"></div> |
inset-y-px | top: 1px;
bottom: 1px; | <div className="inset-y-px"></div> |
start-px | inset-inline-start: 1px; | <div className="start-px"></div> |
end-px | inset-inline-end: 1px; | <div className="end-px"></div> |
top-px | top: 1px; | <div className="top-px"></div> |
right-px | right: 1px; | <div className="right-px"></div> |
bottom-px | bottom: 1px; | <div className="bottom-px"></div> |
left-px | left: 1px; | <div className="left-px"></div> |
inset-0.5 | inset: 0.125rem; | <div className="inset-0.5"></div> |
inset-x-0.5 | left: 0.125rem;
right: 0.125rem; | <div className="inset-x-0.5"></div> |
inset-y-0.5 | top: 0.125rem;
bottom: 0.125rem; | <div className="inset-y-0.5"></div> |
start-0.5 | inset-inline-start: 0.125rem; | <div className="start-0.5"></div> |
end-0.5 | inset-inline-end: 0.125rem; | <div className="end-0.5"></div> |
top-0.5 | top: 0.125rem; | <div className="top-0.5"></div> |
right-0.5 | right: 0.125rem; | <div className="right-0.5"></div> |
bottom-0.5 | bottom: 0.125rem; | <div className="bottom-0.5"></div> |
left-0.5 | left: 0.125rem; | <div className="left-0.5"></div> |
inset-1 | inset: 0.25rem; | <div className="inset-1"></div> |
inset-x-1 | left: 0.25rem;
right: 0.25rem; | <div className="inset-x-1"></div> |
inset-y-1 | top: 0.25rem;
bottom: 0.25rem; | <div className="inset-y-1"></div> |
start-1 | inset-inline-start: 0.25rem; | <div className="start-1"></div> |
end-1 | inset-inline-end: 0.25rem; | <div className="end-1"></div> |
top-1 | top: 0.25rem; | <div className="top-1"></div> |
right-1 | right: 0.25rem; | <div className="right-1"></div> |
bottom-1 | bottom: 0.25rem; | <div className="bottom-1"></div> |
left-1 | left: 0.25rem; | <div className="left-1"></div> |
inset-1.5 | inset: 0.375rem; | <div className="inset-1.5"></div> |
inset-x-1.5 | left: 0.375rem;
right: 0.375rem; | <div className="inset-x-1.5"></div> |
inset-y-1.5 | top: 0.375rem;
bottom: 0.375rem; | <div className="inset-y-1.5"></div> |
start-1.5 | inset-inline-start: 0.375rem; | <div className="start-1.5"></div> |
end-1.5 | inset-inline-end: 0.375rem; | <div className="end-1.5"></div> |
top-1.5 | top: 0.375rem; | <div className="top-1.5"></div> |
right-1.5 | right: 0.375rem; | <div className="right-1.5"></div> |
bottom-1.5 | bottom: 0.375rem; | <div className="bottom-1.5"></div> |
left-1.5 | left: 0.375rem; | <div className="left-1.5"></div> |
inset-2 | inset: 0.5rem; | <div className="inset-2"></div> |
inset-x-2 | left: 0.5rem;
right: 0.5rem; | <div className="inset-x-2"></div> |
inset-y-2 | top: 0.5rem;
bottom: 0.5rem; | <div className="inset-y-2"></div> |
start-2 | inset-inline-start: 0.5rem; | <div className="start-2"></div> |
end-2 | inset-inline-end: 0.5rem; | <div className="end-2"></div> |
top-2 | top: 0.5rem; | <div className="top-2"></div> |
right-2 | right: 0.5rem; | <div className="right-2"></div> |
bottom-2 | bottom: 0.5rem; | <div className="bottom-2"></div> |
left-2 | left: 0.5rem; | <div className="left-2"></div> |
inset-2.5 | inset: 0.625rem; | <div className="inset-2.5"></div> |
inset-x-2.5 | left: 0.625rem;
right: 0.625rem; | <div className="inset-x-2.5"></div> |
inset-y-2.5 | top: 0.625rem;
bottom: 0.625rem; | <div className="inset-y-2.5"></div> |
start-2.5 | inset-inline-start: 0.625rem; | <div className="start-2.5"></div> |
end-2.5 | inset-inline-end: 0.625rem; | <div className="end-2.5"></div> |
top-2.5 | top: 0.625rem; | <div className="top-2.5"></div> |
right-2.5 | right: 0.625rem; | <div className="right-2.5"></div> |
bottom-2.5 | bottom: 0.625rem; | <div className="bottom-2.5"></div> |
left-2.5 | left: 0.625rem; | <div className="left-2.5"></div> |
inset-3 | inset: 0.75rem; | <div className="inset-3"></div> |
inset-x-3 | left: 0.75rem;
right: 0.75rem; | <div className="inset-x-3"></div> |
inset-y-3 | top: 0.75rem;
bottom: 0.75rem; | <div className="inset-y-3"></div> |
start-3 | inset-inline-start: 0.75rem; | <div className="start-3"></div> |
end-3 | inset-inline-end: 0.75rem; | <div className="end-3"></div> |
top-3 | top: 0.75rem; | <div className="top-3"></div> |
right-3 | right: 0.75rem; | <div className="right-3"></div> |
bottom-3 | bottom: 0.75rem; | <div className="bottom-3"></div> |
left-3 | left: 0.75rem; | <div className="left-3"></div> |
inset-3.5 | inset: 0.875rem; | <div className="inset-3.5"></div> |
inset-x-3.5 | left: 0.875rem;
right: 0.875rem; | <div className="inset-x-3.5"></div> |
inset-y-3.5 | top: 0.875rem;
bottom: 0.875rem; | <div className="inset-y-3.5"></div> |
start-3.5 | inset-inline-start: 0.875rem; | <div className="start-3.5"></div> |
end-3.5 | inset-inline-end: 0.875rem; | <div className="end-3.5"></div> |
top-3.5 | top: 0.875rem; | <div className="top-3.5"></div> |
right-3.5 | right: 0.875rem; | <div className="right-3.5"></div> |
bottom-3.5 | bottom: 0.875rem; | <div className="bottom-3.5"></div> |
left-3.5 | left: 0.875rem; | <div className="left-3.5"></div> |
inset-4 | inset: 1rem; | <div className="inset-4"></div> |
inset-x-4 | left: 1rem;
right: 1rem; | <div className="inset-x-4"></div> |
inset-y-4 | top: 1rem;
bottom: 1rem; | <div className="inset-y-4"></div> |
start-4 | inset-inline-start: 1rem; | <div className="start-4"></div> |
end-4 | inset-inline-end: 1rem; | <div className="end-4"></div> |
top-4 | top: 1rem; | <div className="top-4"></div> |
right-4 | right: 1rem; | <div className="right-4"></div> |
bottom-4 | bottom: 1rem; | <div className="bottom-4"></div> |
left-4 | left: 1rem; | <div className="left-4"></div> |
inset-5 | inset: 1.25rem; | <div className="inset-5"></div> |
inset-x-5 | left: 1.25rem;
right: 1.25rem; | <div className="inset-x-5"></div> |
inset-y-5 | top: 1.25rem;
bottom: 1.25rem; | <div className="inset-y-5"></div> |
start-5 | inset-inline-start: 1.25rem; | <div className="start-5"></div> |
end-5 | inset-inline-end: 1.25rem; | <div className="end-5"></div> |
top-5 | top: 1.25rem; | <div className="top-5"></div> |
right-5 | right: 1.25rem; | <div className="right-5"></div> |
bottom-5 | bottom: 1.25rem; | <div className="bottom-5"></div> |
left-5 | left: 1.25rem; | <div className="left-5"></div> |
inset-6 | inset: 1.5rem; | <div className="inset-6"></div> |
inset-x-6 | left: 1.5rem;
right: 1.5rem; | <div className="inset-x-6"></div> |
inset-y-6 | top: 1.5rem;
bottom: 1.5rem; | <div className="inset-y-6"></div> |
start-6 | inset-inline-start: 1.5rem; | <div className="start-6"></div> |
end-6 | inset-inline-end: 1.5rem; | <div className="end-6"></div> |
top-6 | top: 1.5rem; | <div className="top-6"></div> |
right-6 | right: 1.5rem; | <div className="right-6"></div> |
bottom-6 | bottom: 1.5rem; | <div className="bottom-6"></div> |
left-6 | left: 1.5rem; | <div className="left-6"></div> |
inset-7 | inset: 1.75rem; | <div className="inset-7"></div> |
inset-x-7 | left: 1.75rem;
right: 1.75rem; | <div className="inset-x-7"></div> |
inset-y-7 | top: 1.75rem;
bottom: 1.75rem; | <div className="inset-y-7"></div> |
start-7 | inset-inline-start: 1.75rem; | <div className="start-7"></div> |
end-7 | inset-inline-end: 1.75rem; | <div className="end-7"></div> |
top-7 | top: 1.75rem; | <div className="top-7"></div> |
right-7 | right: 1.75rem; | <div className="right-7"></div> |
bottom-7 | bottom: 1.75rem; | <div className="bottom-7"></div> |
left-7 | left: 1.75rem; | <div className="left-7"></div> |
inset-8 | inset: 2rem; | <div className="inset-8"></div> |
inset-x-8 | left: 2rem;
right: 2rem; | <div className="inset-x-8"></div> |
inset-y-8 | top: 2rem;
bottom: 2rem; | <div className="inset-y-8"></div> |
start-8 | inset-inline-start: 2rem; | <div className="start-8"></div> |
end-8 | inset-inline-end: 2rem; | <div className="end-8"></div> |
top-8 | top: 2rem; | <div className="top-8"></div> |
right-8 | right: 2rem; | <div className="right-8"></div> |
bottom-8 | bottom: 2rem; | <div className="bottom-8"></div> |
left-8 | left: 2rem; | <div className="left-8"></div> |
inset-9 | inset: 2.25rem; | <div className="inset-9"></div> |
inset-x-9 | left: 2.25rem;
right: 2.25rem; | <div className="inset-x-9"></div> |
inset-y-9 | top: 2.25rem;
bottom: 2.25rem; | <div className="inset-y-9"></div> |
start-9 | inset-inline-start: 2.25rem; | <div className="start-9"></div> |
end-9 | inset-inline-end: 2.25rem; | <div className="end-9"></div> |
top-9 | top: 2.25rem; | <div className="top-9"></div> |
right-9 | right: 2.25rem; | <div className="right-9"></div> |
bottom-9 | bottom: 2.25rem; | <div className="bottom-9"></div> |
left-9 | left: 2.25rem; | <div className="left-9"></div> |
inset-10 | inset: 2.5rem; | <div className="inset-10"></div> |
inset-x-10 | left: 2.5rem;
right: 2.5rem; | <div className="inset-x-10"></div> |
inset-y-10 | top: 2.5rem;
bottom: 2.5rem; | <div className="inset-y-10"></div> |
start-10 | inset-inline-start: 2.5rem; | <div className="start-10"></div> |
end-10 | inset-inline-end: 2.5rem; | <div className="end-10"></div> |
top-10 | top: 2.5rem; | <div className="top-10"></div> |
right-10 | right: 2.5rem; | <div className="right-10"></div> |
bottom-10 | bottom: 2.5rem; | <div className="bottom-10"></div> |
left-10 | left: 2.5rem; | <div className="left-10"></div> |
inset-11 | inset: 2.75rem; | <div className="inset-11"></div> |
inset-x-11 | left: 2.75rem;
right: 2.75rem; | <div className="inset-x-11"></div> |
inset-y-11 | top: 2.75rem;
bottom: 2.75rem; | <div className="inset-y-11"></div> |
start-11 | inset-inline-start: 2.75rem; | <div className="start-11"></div> |
end-11 | inset-inline-end: 2.75rem; | <div className="end-11"></div> |
top-11 | top: 2.75rem; | <div className="top-11"></div> |
right-11 | right: 2.75rem; | <div className="right-11"></div> |
bottom-11 | bottom: 2.75rem; | <div className="bottom-11"></div> |
left-11 | left: 2.75rem; | <div className="left-11"></div> |
inset-12 | inset: 3rem; | <div className="inset-12"></div> |
inset-x-12 | left: 3rem;
right: 3rem; | <div className="inset-x-12"></div> |
inset-y-12 | top: 3rem;
bottom: 3rem; | <div className="inset-y-12"></div> |
start-12 | inset-inline-start: 3rem; | <div className="start-12"></div> |
end-12 | inset-inline-end: 3rem; | <div className="end-12"></div> |
top-12 | top: 3rem; | <div className="top-12"></div> |
right-12 | right: 3rem; | <div className="right-12"></div> |
bottom-12 | bottom: 3rem; | <div className="bottom-12"></div> |
left-12 | left: 3rem; | <div className="left-12"></div> |
inset-14 | inset: 3.5rem; | <div className="inset-14"></div> |
inset-x-14 | left: 3.5rem;
right: 3.5rem; | <div className="inset-x-14"></div> |
inset-y-14 | top: 3.5rem;
bottom: 3.5rem; | <div className="inset-y-14"></div> |
start-14 | inset-inline-start: 3.5rem; | <div className="start-14"></div> |
end-14 | inset-inline-end: 3.5rem; | <div className="end-14"></div> |
top-14 | top: 3.5rem; | <div className="top-14"></div> |
right-14 | right: 3.5rem; | <div className="right-14"></div> |
bottom-14 | bottom: 3.5rem; | <div className="bottom-14"></div> |
left-14 | left: 3.5rem; | <div className="left-14"></div> |
inset-16 | inset: 4rem; | <div className="inset-16"></div> |
inset-x-16 | left: 4rem;
right: 4rem; | <div className="inset-x-16"></div> |
inset-y-16 | top: 4rem;
bottom: 4rem; | <div className="inset-y-16"></div> |
start-16 | inset-inline-start: 4rem; | <div className="start-16"></div> |
end-16 | inset-inline-end: 4rem; | <div className="end-16"></div> |
top-16 | top: 4rem; | <div className="top-16"></div> |
right-16 | right: 4rem; | <div className="right-16"></div> |
bottom-16 | bottom: 4rem; | <div className="bottom-16"></div> |
left-16 | left: 4rem; | <div className="left-16"></div> |
inset-20 | inset: 5rem; | <div className="inset-20"></div> |
inset-x-20 | left: 5rem;
right: 5rem; | <div className="inset-x-20"></div> |
inset-y-20 | top: 5rem;
bottom: 5rem; | <div className="inset-y-20"></div> |
start-20 | inset-inline-start: 5rem; | <div className="start-20"></div> |
end-20 | inset-inline-end: 5rem; | <div className="end-20"></div> |
top-20 | top: 5rem; | <div className="top-20"></div> |
right-20 | right: 5rem; | <div className="right-20"></div> |
bottom-20 | bottom: 5rem; | <div className="bottom-20"></div> |
left-20 | left: 5rem; | <div className="left-20"></div> |
inset-24 | inset: 6rem; | <div className="inset-24"></div> |
inset-x-24 | left: 6rem;
right: 6rem; | <div className="inset-x-24"></div> |
inset-y-24 | top: 6rem;
bottom: 6rem; | <div className="inset-y-24"></div> |
start-24 | inset-inline-start: 6rem; | <div className="start-24"></div> |
end-24 | inset-inline-end: 6rem; | <div className="end-24"></div> |
top-24 | top: 6rem; | <div className="top-24"></div> |
right-24 | right: 6rem; | <div className="right-24"></div> |
bottom-24 | bottom: 6rem; | <div className="bottom-24"></div> |
left-24 | left: 6rem; | <div className="left-24"></div> |
inset-28 | inset: 7rem; | <div className="inset-28"></div> |
inset-x-28 | left: 7rem;
right: 7rem; | <div className="inset-x-28"></div> |
inset-y-28 | top: 7rem;
bottom: 7rem; | <div className="inset-y-28"></div> |
start-28 | inset-inline-start: 7rem; | <div className="start-28"></div> |
end-28 | inset-inline-end: 7rem; | <div className="end-28"></div> |
top-28 | top: 7rem; | <div className="top-28"></div> |
right-28 | right: 7rem; | <div className="right-28"></div> |
bottom-28 | bottom: 7rem; | <div className="bottom-28"></div> |
left-28 | left: 7rem; | <div className="left-28"></div> |
inset-32 | inset: 8rem; | <div className="inset-32"></div> |
inset-x-32 | left: 8rem;
right: 8rem; | <div className="inset-x-32"></div> |
inset-y-32 | top: 8rem;
bottom: 8rem; | <div className="inset-y-32"></div> |
start-32 | inset-inline-start: 8rem; | <div className="start-32"></div> |
end-32 | inset-inline-end: 8rem; | <div className="end-32"></div> |
top-32 | top: 8rem; | <div className="top-32"></div> |
right-32 | right: 8rem; | <div className="right-32"></div> |
bottom-32 | bottom: 8rem; | <div className="bottom-32"></div> |
left-32 | left: 8rem; | <div className="left-32"></div> |
inset-36 | inset: 9rem; | <div className="inset-36"></div> |
inset-x-36 | left: 9rem;
right: 9rem; | <div className="inset-x-36"></div> |
inset-y-36 | top: 9rem;
bottom: 9rem; | <div className="inset-y-36"></div> |
start-36 | inset-inline-start: 9rem; | <div className="start-36"></div> |
end-36 | inset-inline-end: 9rem; | <div className="end-36"></div> |
top-36 | top: 9rem; | <div className="top-36"></div> |
right-36 | right: 9rem; | <div className="right-36"></div> |
bottom-36 | bottom: 9rem; | <div className="bottom-36"></div> |
left-36 | left: 9rem; | <div className="left-36"></div> |
inset-40 | inset: 10rem; | <div className="inset-40"></div> |
inset-x-40 | left: 10rem;
right: 10rem; | <div className="inset-x-40"></div> |
inset-y-40 | top: 10rem;
bottom: 10rem; | <div className="inset-y-40"></div> |
start-40 | inset-inline-start: 10rem; | <div className="start-40"></div> |
end-40 | inset-inline-end: 10rem; | <div className="end-40"></div> |
top-40 | top: 10rem; | <div className="top-40"></div> |
right-40 | right: 10rem; | <div className="right-40"></div> |
bottom-40 | bottom: 10rem; | <div className="bottom-40"></div> |
left-40 | left: 10rem; | <div className="left-40"></div> |
inset-44 | inset: 11rem; | <div className="inset-44"></div> |
inset-x-44 | left: 11rem;
right: 11rem; | <div className="inset-x-44"></div> |
inset-y-44 | top: 11rem;
bottom: 11rem; | <div className="inset-y-44"></div> |
start-44 | inset-inline-start: 11rem; | <div className="start-44"></div> |
end-44 | inset-inline-end: 11rem; | <div className="end-44"></div> |
top-44 | top: 11rem; | <div className="top-44"></div> |
right-44 | right: 11rem; | <div className="right-44"></div> |
bottom-44 | bottom: 11rem; | <div className="bottom-44"></div> |
left-44 | left: 11rem; | <div className="left-44"></div> |
inset-48 | inset: 12rem; | <div className="inset-48"></div> |
inset-x-48 | left: 12rem;
right: 12rem; | <div className="inset-x-48"></div> |
inset-y-48 | top: 12rem;
bottom: 12rem; | <div className="inset-y-48"></div> |
start-48 | inset-inline-start: 12rem; | <div className="start-48"></div> |
end-48 | inset-inline-end: 12rem; | <div className="end-48"></div> |
top-48 | top: 12rem; | <div className="top-48"></div> |
right-48 | right: 12rem; | <div className="right-48"></div> |
bottom-48 | bottom: 12rem; | <div className="bottom-48"></div> |
left-48 | left: 12rem; | <div className="left-48"></div> |
inset-52 | inset: 13rem; | <div className="inset-52"></div> |
inset-x-52 | left: 13rem;
right: 13rem; | <div className="inset-x-52"></div> |
inset-y-52 | top: 13rem;
bottom: 13rem; | <div className="inset-y-52"></div> |
start-52 | inset-inline-start: 13rem; | <div className="start-52"></div> |
end-52 | inset-inline-end: 13rem; | <div className="end-52"></div> |
top-52 | top: 13rem; | <div className="top-52"></div> |
right-52 | right: 13rem; | <div className="right-52"></div> |
bottom-52 | bottom: 13rem; | <div className="bottom-52"></div> |
left-52 | left: 13rem; | <div className="left-52"></div> |
inset-56 | inset: 14rem; | <div className="inset-56"></div> |
inset-x-56 | left: 14rem;
right: 14rem; | <div className="inset-x-56"></div> |
inset-y-56 | top: 14rem;
bottom: 14rem; | <div className="inset-y-56"></div> |
start-56 | inset-inline-start: 14rem; | <div className="start-56"></div> |
end-56 | inset-inline-end: 14rem; | <div className="end-56"></div> |
top-56 | top: 14rem; | <div className="top-56"></div> |
right-56 | right: 14rem; | <div className="right-56"></div> |
bottom-56 | bottom: 14rem; | <div className="bottom-56"></div> |
left-56 | left: 14rem; | <div className="left-56"></div> |
inset-60 | inset: 15rem; | <div className="inset-60"></div> |
inset-x-60 | left: 15rem;
right: 15rem; | <div className="inset-x-60"></div> |
inset-y-60 | top: 15rem;
bottom: 15rem; | <div className="inset-y-60"></div> |
start-60 | inset-inline-start: 15rem; | <div className="start-60"></div> |
end-60 | inset-inline-end: 15rem; | <div className="end-60"></div> |
top-60 | top: 15rem; | <div className="top-60"></div> |
right-60 | right: 15rem; | <div className="right-60"></div> |
bottom-60 | bottom: 15rem; | <div className="bottom-60"></div> |
left-60 | left: 15rem; | <div className="left-60"></div> |
inset-64 | inset: 16rem; | <div className="inset-64"></div> |
inset-x-64 | left: 16rem;
right: 16rem; | <div className="inset-x-64"></div> |
inset-y-64 | top: 16rem;
bottom: 16rem; | <div className="inset-y-64"></div> |
start-64 | inset-inline-start: 16rem; | <div className="start-64"></div> |
end-64 | inset-inline-end: 16rem; | <div className="end-64"></div> |
top-64 | top: 16rem; | <div className="top-64"></div> |
right-64 | right: 16rem; | <div className="right-64"></div> |
bottom-64 | bottom: 16rem; | <div className="bottom-64"></div> |
left-64 | left: 16rem; | <div className="left-64"></div> |
inset-72 | inset: 18rem; | <div className="inset-72"></div> |
inset-x-72 | left: 18rem;
right: 18rem; | <div className="inset-x-72"></div> |
inset-y-72 | top: 18rem;
bottom: 18rem; | <div className="inset-y-72"></div> |
start-72 | inset-inline-start: 18rem; | <div className="start-72"></div> |
end-72 | inset-inline-end: 18rem; | <div className="end-72"></div> |
top-72 | top: 18rem; | <div className="top-72"></div> |
right-72 | right: 18rem; | <div className="right-72"></div> |
bottom-72 | bottom: 18rem; | <div className="bottom-72"></div> |
left-72 | left: 18rem; | <div className="left-72"></div> |
inset-80 | inset: 20rem; | <div className="inset-80"></div> |
inset-x-80 | left: 20rem;
right: 20rem; | <div className="inset-x-80"></div> |
inset-y-80 | top: 20rem;
bottom: 20rem; | <div className="inset-y-80"></div> |
start-80 | inset-inline-start: 20rem; | <div className="start-80"></div> |
end-80 | inset-inline-end: 20rem; | <div className="end-80"></div> |
top-80 | top: 20rem; | <div className="top-80"></div> |
right-80 | right: 20rem; | <div className="right-80"></div> |
bottom-80 | bottom: 20rem; | <div className="bottom-80"></div> |
left-80 | left: 20rem; | <div className="left-80"></div> |
inset-96 | inset: 24rem; | <div className="inset-96"></div> |
inset-x-96 | left: 24rem;
right: 24rem; | <div className="inset-x-96"></div> |
inset-y-96 | top: 24rem;
bottom: 24rem; | <div className="inset-y-96"></div> |
start-96 | inset-inline-start: 24rem; | <div className="start-96"></div> |
end-96 | inset-inline-end: 24rem; | <div className="end-96"></div> |
top-96 | top: 24rem; | <div className="top-96"></div> |
right-96 | right: 24rem; | <div className="right-96"></div> |
bottom-96 | bottom: 24rem; | <div className="bottom-96"></div> |
left-96 | left: 24rem; | <div className="left-96"></div> |
inset-auto | inset: auto; | <div className="inset-auto"></div> |
inset-1/2 | inset: 50%; | <div className="inset-1/2"></div> |
inset-1/3 | inset: 33.333333%; | <div className="inset-1/3"></div> |
inset-2/3 | inset: 66.666667%; | <div className="inset-2/3"></div> |
inset-1/4 | inset: 25%; | <div className="inset-1/4"></div> |
inset-2/4 | inset: 50%; | <div className="inset-2/4"></div> |
inset-3/4 | inset: 75%; | <div className="inset-3/4"></div> |
inset-full | inset: 100%; | <div className="inset-full"></div> |
inset-x-auto | left: auto;
right: auto; | <div className="inset-x-auto"></div> |
inset-x-1/2 | left: 50%;
right: 50%; | <div className="inset-x-1/2"></div> |
inset-x-1/3 | left: 33.333333%;
right: 33.333333%; | <div className="inset-x-1/3"></div> |
inset-x-2/3 | left: 66.666667%;
right: 66.666667%; | <div className="inset-x-2/3"></div> |
inset-x-1/4 | left: 25%;
right: 25%; | <div className="inset-x-1/4"></div> |
inset-x-2/4 | left: 50%;
right: 50%; | <div className="inset-x-2/4"></div> |
inset-x-3/4 | left: 75%;
right: 75%; | <div className="inset-x-3/4"></div> |
inset-x-full | left: 100%;
right: 100%; | <div className="inset-x-full"></div> |
inset-y-auto | top: auto;
bottom: auto; | <div className="inset-y-auto"></div> |
inset-y-1/2 | top: 50%;
bottom: 50%; | <div className="inset-y-1/2"></div> |
inset-y-1/3 | top: 33.333333%;
bottom: 33.333333%; | <div className="inset-y-1/3"></div> |
inset-y-2/3 | top: 66.666667%;
bottom: 66.666667%; | <div className="inset-y-2/3"></div> |
inset-y-1/4 | top: 25%;
bottom: 25%; | <div className="inset-y-1/4"></div> |
inset-y-2/4 | top: 50%;
bottom: 50%; | <div className="inset-y-2/4"></div> |
inset-y-3/4 | top: 75%;
bottom: 75%; | <div className="inset-y-3/4"></div> |
inset-y-full | top: 100%;
bottom: 100%; | <div className="inset-y-full"></div> |
start-auto | inset-inline-start: auto; | <div className="start-auto"></div> |
start-1/2 | inset-inline-start: 50%; | <div className="start-1/2"></div> |
start-1/3 | inset-inline-start: 33.333333%; | <div className="start-1/3"></div> |
start-2/3 | inset-inline-start: 66.666667%; | <div className="start-2/3"></div> |
start-1/4 | inset-inline-start: 25%; | <div className="start-1/4"></div> |
start-2/4 | inset-inline-start: 50%; | <div className="start-2/4"></div> |
start-3/4 | inset-inline-start: 75%; | <div className="start-3/4"></div> |
start-full | inset-inline-start: 100%; | <div className="start-full"></div> |
end-auto | inset-inline-end: auto; | <div className="end-auto"></div> |
end-1/2 | inset-inline-end: 50%; | <div className="end-1/2"></div> |
end-1/3 | inset-inline-end: 33.333333%; | <div className="end-1/3"></div> |
end-2/3 | inset-inline-end: 66.666667%; | <div className="end-2/3"></div> |
end-1/4 | inset-inline-end: 25%; | <div className="end-1/4"></div> |
end-2/4 | inset-inline-end: 50%; | <div className="end-2/4"></div> |
end-3/4 | inset-inline-end: 75%; | <div className="end-3/4"></div> |
end-full | inset-inline-end: 100%; | <div className="end-full"></div> |
top-auto | top: auto; | <div className="top-auto"></div> |
top-1/2 | top: 50%; | <div className="top-1/2"></div> |
top-1/3 | top: 33.333333%; | <div className="top-1/3"></div> |
top-2/3 | top: 66.666667%; | <div className="top-2/3"></div> |
top-1/4 | top: 25%; | <div className="top-1/4"></div> |
top-2/4 | top: 50%; | <div className="top-2/4"></div> |
top-3/4 | top: 75%; | <div className="top-3/4"></div> |
top-full | top: 100%; | <div className="top-full"></div> |
right-auto | right: auto; | <div className="right-auto"></div> |
right-1/2 | right: 50%; | <div className="right-1/2"></div> |
right-1/3 | right: 33.333333%; | <div className="right-1/3"></div> |
right-2/3 | right: 66.666667%; | <div className="right-2/3"></div> |
right-1/4 | right: 25%; | <div className="right-1/4"></div> |
right-2/4 | right: 50%; | <div className="right-2/4"></div> |
right-3/4 | right: 75%; | <div className="right-3/4"></div> |
right-full | right: 100%; | <div className="right-full"></div> |
bottom-auto | bottom: auto; | <div className="bottom-auto"></div> |
bottom-1/2 | bottom: 50%; | <div className="bottom-1/2"></div> |
bottom-1/3 | bottom: 33.333333%; | <div className="bottom-1/3"></div> |
bottom-2/3 | bottom: 66.666667%; | <div className="bottom-2/3"></div> |
bottom-1/4 | bottom: 25%; | <div className="bottom-1/4"></div> |
bottom-2/4 | bottom: 50%; | <div className="bottom-2/4"></div> |
bottom-3/4 | bottom: 75%; | <div className="bottom-3/4"></div> |
bottom-full | bottom: 100%; | <div className="bottom-full"></div> |
left-auto | left: auto; | <div className="left-auto"></div> |
left-1/2 | left: 50%; | <div className="left-1/2"></div> |
left-1/3 | left: 33.333333%; | <div className="left-1/3"></div> |
left-2/3 | left: 66.666667%; | <div className="left-2/3"></div> |
left-1/4 | left: 25%; | <div className="left-1/4"></div> |
left-2/4 | left: 50%; | <div className="left-2/4"></div> |
left-3/4 | left: 75%; | <div className="left-3/4"></div> |
left-full | left: 100%; | <div className="left-full"></div> |
Overview of Top/Right/Bottom/Left
Positioning elements efficiently
Tailwind lets you assign vertical and horizontal offsets to positioned elements with intuitive classes like top*
, right-*
, bottom-*
, etc.
export default function PositionedImage() { return ( <div className="relative h-screen w-screen bg-gray-100"> {/* Parent Container */} <img src="https://images.unsplash.com/photo-1508873699372-7aeab60b44ab" alt="Landscape" className="absolute top-10 left-20 h-40 w-60 object-cover" /> {/* Tailwind: top: 2.5rem; left: 5rem; height: 10rem; width: 15rem */} </div> ); }
In this case:
- The image is 10 units down from the top and 20 units from the left of the parent container.
absolute
positioning ensures the placement is relative to the nearest positioned ancestor.
Negative offsets
Sometimes, you may need to offset elements outside the boundaries of their parents. Tailwind allows the use of negative spacings for such cases.
export default function NegativeOffsetCard() { return ( <div className="relative h-screen w-screen bg-gray-200"> {/* Parent Container */} <div className="absolute -top-8 -left-12 h-28 w-60 bg-blue-500 text-white flex items-center justify-center"> Negative Offset </div> {/* Tailwind: top: -32px; left: -48px */} </div> ); }
Logical properties for flexibility
Tailwind also supports logical positioning utilities start-*
and end-*
to set the inset-inline-start
or inset-inline-end
properties, which adapt to text directions like left-to-right (LTR) or right-to-left (RTL):
export default function LogicalPositioning() { return ( <div className="relative h-screen w-screen bg-gray-50"> <div dir="rtl" className="relative start-2 end-12 h-20 w-60 pt-4 top-10 bg-indigo-600 text-white pe-8"> This text is written from right to left. </div> {/* Tailwind: adjusts positioning for RTL automatically */} </div> ); }
States and Responsiveness
Hover and Focus States
Tailwind's pseudo-class modifiers like hover:
or focus:
let you create interactive offsets for positioned elements.
export default function StateBasedButton() { return ( <div className="relative h-screen w-screen flex items-center justify-center bg-gray-50"> {/* Button shifts upward on hover */} <button className="relative bg-teal-500 text-white px-4 py-2 rounded hover:top-[-10px] transition-all duration-200"> Hover Me </button> {/* Tailwind on hover: top: -10px */} </div> ); }
In this example:
- The button slightly moves upward when hovered, enhancing interactivity.
Breakpoint Modifiers
Tailwind integrates breakpoint modifiers for responsive, device-specific placement that doesn’t require writing custom media queries. Adjust offsets dynamically at various screen sizes.
export default function ResponsivePlacement() { return ( <div className="relative h-screen w-screen bg-gray-100"> <div className="absolute top-5 left-10 md:top-20 md:left-40 lg:top-40 lg:left-80 h-20 w-40 bg-purple-500 text-white flex items-center justify-center"> Responsive Block </div> {/* Tailwind: Small screens: top: 5rem, left: 10rem Medium screens: top: 20rem, left: 40rem Large screens: top: 40rem, left: 80rem */} </div> ); }
Custom Top/Right/Bottom/Left
Extending the theme
You can customize the default spacing scale in your Tailwind configuration to add project-specific offsets.
Once added, you can use them in your layouts:
import tailwindConfig from "./tailwind.config.js"; tailwind.config = tailwindConfig; export default function CustomThemeOffset() { return ( <div className="relative h-screen w-screen bg-gray-300"> <div className="absolute top-1/7 left-58 h-24 w-48 bg-green-700 text-white flex items-center justify-center"> Custom Offset </div> </div> ); }
Using Arbitrary Values
When you need to apply unplanned or precise values, arbitrary values can bridge the gap. These values are enclosed in square brackets[]
:
export default function ArbitraryPlacement() { return ( <div className="relative h-screen w-screen bg-gray-100"> <div className="absolute top-[3.4375rem] left-[2.81rem] h-20 w-40 bg-orange-500 text-white flex items-center justify-center"> Arbitrary Offset </div> {/* Tailwind: top: 55px; left: 45px */} </div> ); }
Real World Examples
Chat Message Bubbles
Chat interface with positioned message bubbles and timestamps.
export default function ChatInterface() { const messages = [ { id: 1, text: "Hey, how are you?", sender: "user", time: "09:30" }, { id: 2, text: "I'm good, thanks! How about you?", sender: "other", time: "09:31" }, { id: 3, text: "Working on a new project. It's quite exciting!", sender: "user", time: "09:32" }, { id: 4, text: "That sounds interesting! Tell me more about it.", sender: "other", time: "09:33" }, { id: 5, text: "It's a web application using Tailwind CSS.", sender: "user", time: "09:34" }, { id: 6, text: "Nice choice! I love working with Tailwind.", sender: "other", time: "09:35" } ]; return ( <div className="max-w-2xl mx-auto p-4 space-y-4"> {messages.map((message) => ( <div key={message.id} className={`relative max-w-[80%] ${ message.sender === "user" ? "ml-auto" : "mr-auto" }`} > <div className={`p-3 rounded-lg ${ message.sender === "user" ? "bg-blue-500 text-white rounded-br-none" : "bg-gray-200 rounded-bl-none" }`} > {message.text} </div> <span className={`absolute bottom-0 ${ message.sender === "user" ? "right-0" : "left-0" } text-xs text-gray-500 -mb-5`} > {message.time} </span> </div> ))} </div> ); }
Modal with Corner Close Button
A modal component with a positioned close button in the top-right corner.
export default function Modal() { const modalContent = { title: "Subscribe to Newsletter", description: "Get the latest updates directly in your inbox!", features: [ { id: 1, title: "Weekly Updates", description: "Stay informed with our weekly newsletter" }, { id: 2, title: "Exclusive Content", description: "Access to subscriber-only articles" }, { id: 3, title: "Early Access", description: "Be the first to know about new features" }, { id: 4, title: "Special Offers", description: "Receive exclusive discounts and deals" }, { id: 5, title: "Community Access", description: "Join our private community" }, { id: 6, title: "Priority Support", description: "Get faster responses to your queries" } ] }; return ( <div className="bg-black bg-opacity-50 flex items-center justify-center"> <div className="relative bg-white rounded-xl w-full max-w-md p-6"> <button className="absolute top-7 right-4 text-gray-400 hover:text-gray-600"> <svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" > <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" /> </svg> </button> <h2 className="text-2xl font-bold mb-4">{modalContent.title}</h2> <p className="text-gray-600 mb-6">{modalContent.description}</p> <div className="space-y-4"> {modalContent.features.map((feature) => ( <div key={feature.id} className="flex items-start gap-3"> <svg className="w-5 h-5 text-green-500 mt-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" > <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" /> </svg> <div> <h3 className="font-medium">{feature.title}</h3> <p className="text-sm text-gray-500">{feature.description}</p> </div> </div> ))} </div> <button className="mt-6 w-full bg-blue-500 text-white py-2 rounded-lg hover:bg-blue-600"> Subscribe Now </button> </div> </div> ); }
Cookie Consent Banner
A cookie consent banner that appears at the bottom of the page with accept/reject options.
export default function CookieConsent() { const cookieTypes = [ { id: 1, name: "Essential", description: "Required for basic site functionality", required: true }, { id: 2, name: "Analytics", description: "Help us improve our website", required: false }, { id: 3, name: "Marketing", description: "Personalized advertisements", required: false }, { id: 4, name: "Social Media", description: "Enable social sharing features", required: false }, ]; return ( <div className="fixed bottom-0 left-0 right-0 bg-gray-900 text-white p-6"> <div className="max-w-4xl mx-auto"> <h3 className="text-xl font-bold mb-4">Cookie Preferences</h3> <p className="mb-4"> We use cookies to enhance your browsing experience and analyze our traffic. </p> <div className="grid grid-cols-2 gap-4 mb-6"> {cookieTypes.map((cookie) => ( <div key={cookie.id} className="flex items-center"> <input type="checkbox" defaultChecked={cookie.required} disabled={cookie.required} className="mr-2" /> <div> <p className="font-medium">{cookie.name}</p> <p className="text-sm text-gray-300">{cookie.description}</p> </div> </div> ))} </div> <div className="flex justify-end space-x-4"> <button className="px-6 py-2 bg-gray-600 rounded">Reject All</button> <button className="px-6 py-2 bg-blue-600 rounded">Accept All</button> </div> </div> </div> ); }
Floating Social Share Buttons
A fixed social media sharing panel positioned on the right side of the screen that follows scroll.
export default function SocialSharePanel() { const socialLinks = [ { name: "Facebook", icon: "https://images.unsplash.com/photo-1634942537034-2531766767d1", alt: "Facebook sharing icon", color: "bg-blue-600" }, { name: "Twitter", icon: "https://images.unsplash.com/photo-1611605698335-8b1569810432", alt: "Twitter sharing icon", color: "bg-sky-400" }, { name: "LinkedIn", icon: "https://images.unsplash.com/photo-1611944212129-29977ae1398c", alt: "LinkedIn sharing icon", color: "bg-blue-800" }, { name: "Pinterest", icon: "https://images.unsplash.com/photo-1611162617474-5b21e879e113", alt: "Pinterest sharing icon", color: "bg-red-600" }, { name: "WhatsApp", icon: "https://images.unsplash.com/photo-1633355444132-695d5876cd00", alt: "WhatsApp sharing icon", color: "bg-green-500" }, { name: "Email", icon: "https://images.unsplash.com/photo-1557200134-90327ee9fafa", alt: "Email sharing icon", color: "bg-gray-600" } ]; return ( <div className="fixed right-4 top-1/2 -translate-y-1/2 flex flex-col gap-3"> {socialLinks.map((social) => ( <button key={social.name} className={`${social.color} p-3 rounded-full hover:scale-110 transition-transform`} > <img src={social.icon} alt={social.alt} className="w-6 h-6" /> </button> ))} </div> ); }
Bottom Navigation Bar
A mobile-first bottom navigation bar with icons and labels.
export default function BottomNavigation() { const navItems = [ { name: "Home", icon: "https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe", alt: "Home icon" }, { name: "Search", icon: "https://images.unsplash.com/photo-1612178537253-bccd437b730e", alt: "Search icon" }, { name: "Cart", icon: "https://images.unsplash.com/photo-1557899563-1940fc95709c", alt: "Cart icon" }, ]; return ( <nav className="fixed bottom-0 left-0 right-0 bg-white border-t border-gray-200 px-4 py-2"> <div className="flex justify-between items-center max-w-lg mx-auto"> {navItems.map((item) => ( <button key={item.name} className="flex flex-col items-center p-2 hover:bg-gray-50 rounded-lg" > <img src={item.icon} alt={item.alt} className="w-6 h-6 mb-1" /> <span className="text-xs text-gray-600">{item.name}</span> </button> ))} </div> </nav> ); }
Customization Examples
Notification Badge with Custom Positioning
This example demonstrates how to create a notification badge with custom positioning for a profile avatar using theme customization.
// App.js import tailwindConfig from "./tailwind.config.js"; tailwind.config = tailwindConfig; export default function NotificationBadge() { return ( <div className="relative inline-block mx-20 mt-10"> <img src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e" alt="Profile" className="w-12 h-12 rounded-full" /> <div className="absolute top-notification right-badge-right"> <span className="flex h-4 w-4 items-center justify-center rounded-full bg-red-500 text-[10px] text-white"> 3 </span> </div> </div> ) }
Floating Action Menu with Custom Spacing
This example shows how to create a floating action menu with customized spacing for each button.
// App.js import tailwindConfig from "./tailwind.config.js"; tailwind.config = tailwindConfig; export default function FloatingActionMenu() { return ( <div className="fixed bottom-8 right-8"> <button className="absolute bottom-0 right-0 w-14 h-14 bg-blue-600 rounded-full shadow-lg flex items-center justify-center"> <img src="https://images.unsplash.com/photo-1589156191108-c762ff4b96ab" alt="Menu" className="w-6 h-6" /> </button> <button className="absolute bottom-action-1 right-0 w-12 h-12 bg-green-500 rounded-full shadow-lg flex items-center justify-center"> <img src="https://images.unsplash.com/photo-1589156191108-c762ff4b96ab" alt="Add" className="w-5 h-5" /> </button> <button className="absolute bottom-action-2 right-0 w-12 h-12 bg-yellow-500 rounded-full shadow-lg flex items-center justify-center"> <img src="https://images.unsplash.com/photo-1589156191108-c762ff4b96ab" alt="Edit" className="w-5 h-5" /> </button> <button className="absolute bottom-action-3 right-0 w-12 h-12 bg-red-500 rounded-full shadow-lg flex items-center justify-center"> <img src="https://images.unsplash.com/photo-1589156191108-c762ff4b96ab" alt="Delete" className="w-5 h-5" /> </button> </div> ) }
Sliding Tooltip with Custom Positioning
This example demonstrates how to create a sliding tooltip with custom positioning using theme customization.
// App.js import tailwindConfig from "./tailwind.config.js"; tailwind.config = tailwindConfig; export default function SlidingTooltip() { return ( <div className="relative group inline-block"> <button className="px-4 py-2 bg-purple-600 text-white rounded-lg"> Hover Me </button> <div className="absolute left-tooltip-start opacity-0 group-hover:opacity-100 group-hover:left-tooltip-end transition-all duration-300 bg-gray-900 text-white px-3 py-2 rounded w-48"> <span className="block text-sm"> This is a custom positioned tooltip that slides in from the left </span> </div> </div> ) }
Best Practices
Maintain Design Consistency
When applying the top
, right
, bottom
, and left
utilities in Tailwind CSS, strive to maintain consistency across your layouts. Always consider your design system’s spacing scale to ensure uniform alignment and spacing. For instance, by using Tailwind's predefined spacing values (top-4
, left-6
, etc.), you can create a cohesive look across all components in your project. Avoid arbitrary spacing unless absolutely necessary to minimize unpredictability in your design.
Additionally, establish clear design tokens in your tailwind.config.js
file to standardize values. For instance, if your project requires a lot of corner elements (like badges or notifications), creating reusable spacing presets allows you to maintain the same offsets across all components, reducing redundancy.
By incorporating consistent spacing values and aligning to your design system, you not only create visually appealing layouts but also simplify team collaboration on shared UI components.
Leverage Utility Combinations
Tailwind unlocks powerful layouts when top
, right
, bottom
, and left
are paired with complementary utilities. Combining positioning, flex, grid, and spacing utilities ensures seamless integration across components. For example, use absolute positioning alongside z-index (z-x
) to stack overlapping elements with precise control.
Additionally, blend pseudo-classes like hover:
and conditional utilities for interactive effects. For instance, combining hover:top-X
and transitions (transition-all
) can create smooth hover animations that enhance your user interface. Thoughtfully combining utilities reduces the need for custom CSS and increases scalability.
Accessibility Considerations
Enhance Readability and Navigability
Strategic use of top
, right
, bottom
, and left
can significantly improve the readability and navigability of content. For instance, you can position vital content like alerts or tooltips closer to the user’s focus area, making interfaces more intuitive for assistive technologies (AT).
Make sure that important components positioned off-screen (e.g., modals or hidden dropdowns) remain accessible through the DOM order. Use hidden utilities like sr-only
for screen readers and provide alternative cues for vision-impaired users.
Focus on High Contrast
Offset components, such as badges or interactive buttons, often benefit from intentional use of top
and right
with proper contrast management. Ensure your positioned components achieve sufficient color contrast ratios as outlined by Web Content Accessibility Guidelines (WCAG).
export default function HighContrastBadge() { return ( <div className="relative inline-block"> <img src="https://images.unsplash.com/photo-1677086813101-496781a0f327" alt="User Avatar" className="w-12 h-12 rounded-full" /> <div role="status" className="absolute right-0 top-0 translate-x-1/2 bg-red-500 text-white rounded-full px-2 py-1 text-xs font-semibold" > 99+ </div> </div> ); }
Apply these utilities alongside Tailwind's text-opacity-90
or high-color utility classes (text-gray-900
vs. text-gray-300
) for greater visibility, effectively catering to users with low vision.
Debugging Common Issues
Handle Nested Element Challenges
Positioning within nested or multi-layered components can produce unexpected behavior due to parent inheritance or overflow clipping. Always ensure the containing elements allow visible overflow (overflow-visible
) and provide sufficient padding/margin to account for offsets.
When encountering clipped content, enabling overflow visibility or adjusting the container size can usually resolve these issues without requiring extensive restructuring.
Handle Nested Element Challenges
Deeply nested layouts can cause confusion when using Top / Right / Bottom / Left due to the stacking context.
Ensure parent elements have the correct relative
or absolute
positioning to avoid inheritance conflicts with children elements. By defining relative
on the parent, the absolute
child positions are properly scoped, avoiding unintended global placements.