Tailwind CSS Cheatsheet

Borders, Shadows, Effects

Use this Tailwind CSS reference while you build software engineering projects, review code, or refresh the syntax you reach for most.

Border Width

ClassCSS
borderborder-width: 1px
border-0border-width: 0
border-2border-width: 2px
border-4border-width: 4px
border-8border-width: 8px
border-[3px]arbitrary
border-tborder-top-width: 1px
border-t-2border-top-width: 2px
border-rborder-right-width: 1px
border-bborder-bottom-width: 1px
border-lborder-left-width: 1px
border-xleft + right 1px
border-ytop + bottom 1px
border-sborder-inline-start-width: 1px (logical)
border-eborder-inline-end-width: 1px (logical)
<div class="border border-slate-200 rounded-lg p-4">Default card border</div>
<div class="border-t-2 border-blue-500 pt-4">Top accent border</div>
<div class="border-l-4 border-amber-500 pl-4">Left accent border</div>

Border Color

<div class="border border-slate-300">Light gray border</div>
<div class="border border-blue-500">Blue border</div>
<div class="border border-red-500/50">Red border at 50% opacity</div>
<div class="border border-[#d4af37]">Arbitrary color</div>
<div class="border border-current">Inherits text color</div>

Side-specific colors:

<div class="border-t-blue-500 border-b-slate-200">...</div>

Border Style

ClassCSS
border-solidborder-style: solid
border-dashedborder-style: dashed
border-dottedborder-style: dotted
border-doubleborder-style: double
border-hiddenborder-style: hidden
border-noneborder-style: none
<div class="border-2 border-dashed border-slate-400 rounded-xl p-8 text-center">
  Dashed drop zone
</div>

Border Radius

v4 scale (v4 renamed the small end: v3 rounded-sm → v4 rounded-xs, v3 bare rounded → v4 rounded-sm):

Class (v4)CSS
rounded-noneborder-radius: 0
rounded-xsborder-radius: 0.125rem (v3: rounded-sm)
rounded-smborder-radius: 0.25rem (v3: rounded)
rounded-mdborder-radius: 0.375rem
rounded-lgborder-radius: 0.5rem
rounded-xlborder-radius: 0.75rem
rounded-2xlborder-radius: 1rem
rounded-3xlborder-radius: 1.5rem
rounded-4xlborder-radius: 2rem (v4 only)
rounded-fullborder-radius: 9999px (pill / circle)
rounded-[12px]arbitrary

Per-corner and Per-side

ClassCorners
rounded-t-lgtop-left + top-right
rounded-b-lgbottom-left + bottom-right
rounded-l-lgtop-left + bottom-left
rounded-r-lgtop-right + bottom-right
rounded-tl-lgtop-left only
rounded-tr-lgtop-right only
rounded-br-lgbottom-right only
rounded-bl-lgbottom-left only
rounded-ss-lgstart-start (logical)
rounded-se-lgstart-end (logical)
<!-- Pill button -->
<button class="rounded-full px-6 py-2 bg-blue-600 text-white">Go</button>

<!-- Avatar -->
<img class="size-12 rounded-full object-cover" src="avatar.jpg" alt="">

<!-- Card with only top-rounded corners -->
<div class="rounded-t-xl overflow-hidden">...</div>

Divide (Between Children)

Adds borders between adjacent flex/grid children without touching the outer edge.

ClassCSS
divide-xright border on all children except last
divide-x-22px version
divide-ybottom border on all children except last
divide-y-22px version
divide-y-reversefor flex-col-reverse
divide-slate-200border color
divide-solidborder style
divide-dasheddashed style
divide-dotteddotted style
divide-opacity-50(legacy — use color / modifier)
<!-- Vertical dividers in a flex nav -->
<nav class="flex divide-x divide-slate-200">
  <a class="px-4 py-2">Home</a>
  <a class="px-4 py-2">About</a>
  <a class="px-4 py-2">Blog</a>
</nav>

<!-- Horizontal dividers in a list -->
<ul class="divide-y divide-slate-100">
  <li class="py-3">Item 1</li>
  <li class="py-3">Item 2</li>
  <li class="py-3">Item 3</li>
</ul>

Outline

Applied via focus states; appears outside the border.

ClassCSS
outline-noneoutline-style: none in v4 (v3's invisible-outline trick is now outline-hidden)
outline-hiddeninvisible outline that still shows in forced-colors mode (v4)
outlineoutline-style: solid; outline-width: 1px
outline-dashedoutline-style: dashed
outline-dottedoutline-style: dotted
outline-doubleoutline-style: double
outline-0outline-width: 0
outline-1outline-width: 1px
outline-2outline-width: 2px
outline-4outline-width: 4px
outline-8outline-width: 8px
outline-blue-500outline color
outline-offset-0outline-offset-8outline-offset
outline-offset-[3px]arbitrary
<!-- Accessible focus style -->
<button class="focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2">
  Accessible Button
</button>

Ring (Focus Ring)

Box-shadow based focus ring — more flexible than outline.

ClassCSS
ring-0box-shadow: 0 0 0 0 ...
ringbox-shadow: 0 0 0 1px ... in v4 (3px in v3)
ring-1box-shadow: 0 0 0 1px ...
ring-2box-shadow: 0 0 0 2px ...
ring-3box-shadow: 0 0 0 3px ... (v4 — the old v3 bare ring)
ring-4box-shadow: 0 0 0 4px ...
ring-8box-shadow: 0 0 0 8px ...
ring-insetinset ring
ring-blue-500ring color
ring-blue-500/50ring color with opacity
ring-offset-0ring-offset-8gap between ring and element
ring-offset-whiteoffset color (must match background)
ring-[3px]arbitrary width
<!-- Standard focus ring pattern -->
<input class="border rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2">

<!-- Multi-ring effect -->
<button class="ring-2 ring-blue-500 ring-offset-2 ring-offset-white">...</button>

Box Shadow

v4 scale (v4 renamed the small end: v3 shadow-sm → v4 shadow-xs, v3 bare shadow → v4 shadow-sm):

Class (v4)CSS
shadow-nonebox-shadow: none
shadow-2xsbox-shadow: 0 1px rgb(0 0 0 / 0.05) (v4 only)
shadow-xsbox-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05) (v3: shadow-sm)
shadow-smbox-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), ... (v3: shadow)
shadow-mdmedium spread
shadow-lglarge spread
shadow-xlextra large
shadow-2xllarger still
inset-shadow-sminset shadow (v4; v3: shadow-inner)
shadow-blue-500/25colored shadow
shadow-[0_4px_20px_rgba(0,0,0,0.15)]arbitrary
<div class="shadow-sm rounded-xl border p-4">Card with subtle shadow</div>
<div class="shadow-xl rounded-2xl p-6">Modal-style elevated card</div>
<div class="shadow-lg shadow-blue-500/30 rounded-lg p-4">Colored shadow glow</div>

Drop Shadow (filter)

Applies to the element's alpha channel — works on transparent PNGs and SVGs. Same v4 rename as shadows: v3 drop-shadow-sm → v4 drop-shadow-xs, v3 bare drop-shadow → v4 drop-shadow-sm.

Class (v4)CSS
drop-shadow-xsfilter: drop-shadow(0 1px 1px rgb(0 0 0 / 0.05)) (v3: drop-shadow-sm)
drop-shadow-smstandard (v3: drop-shadow)
drop-shadow-mdmedium
drop-shadow-lglarge
drop-shadow-xlextra large
drop-shadow-2xllargest
drop-shadow-noneno shadow
drop-shadow-[0_2px_10px_rgba(0,0,0,0.5)]arbitrary
<img class="drop-shadow-lg" src="logo-transparent.png" alt="">

Filters

Blur

v4 renamed the small end: v3 blur-sm → v4 blur-xs, v3 bare blur → v4 blur-sm.

Class (v4)CSS
blur-nonefilter: blur(0)
blur-xsfilter: blur(4px) (v3: blur-sm)
blur-smfilter: blur(8px) (v3: blur)
blur-mdfilter: blur(12px)
blur-lgfilter: blur(16px)
blur-xlfilter: blur(24px)
blur-2xlfilter: blur(40px)
blur-3xlfilter: blur(64px)
blur-[2px]arbitrary

Brightness / Contrast / Grayscale / etc.

ClassCSS
brightness-0brightness-200filter: brightness(N%)
contrast-0contrast-200filter: contrast(N%)
grayscalefilter: grayscale(100%)
grayscale-0filter: grayscale(0)
invertfilter: invert(100%)
invert-0no invert
saturate-0saturate-200filter: saturate(N%)
sepiafilter: sepia(100%)
sepia-0no sepia
hue-rotate-0hue-rotate-180filter: hue-rotate(Ndeg)
hue-rotate-[270deg]arbitrary
<!-- Grayscale image that colorizes on hover -->
<img class="grayscale hover:grayscale-0 transition-all duration-300" src="photo.jpg" alt="">

<!-- Frosted glass overlay -->
<div class="absolute inset-0 bg-white/30 backdrop-blur-md"></div>

Backdrop Filter

Same filter utilities prefixed with backdrop-:

ClassCSS
backdrop-blur-xsbackdrop-blur-3xlbackdrop-filter: blur(...) (same v4 renames as blur-*)
backdrop-brightness-50backdrop-brightness-200brightness
backdrop-contrast-*contrast
backdrop-grayscalegrayscale
backdrop-hue-rotate-*hue rotate
backdrop-invertinvert
backdrop-opacity-*opacity
backdrop-saturate-*saturate
backdrop-sepiasepia
<!-- Frosted glass card -->
<div class="bg-white/20 backdrop-blur-lg border border-white/30 rounded-2xl p-6 shadow-xl">
  Glass card
</div>

Transition and Animation

Transition Property

ClassCSS
transition-nonetransition-property: none
transition-allall properties
transitioncolors, opacity, shadow, transform, filter
transition-colorscolor, background, border, fill, stroke
transition-opacityopacity
transition-shadowbox-shadow
transition-transformtransform

Duration

ClassCSS
duration-00ms
duration-7575ms
duration-100100ms
duration-150150ms
duration-200200ms
duration-300300ms
duration-500500ms
duration-700700ms
duration-10001000ms
duration-[400ms]arbitrary

Timing Function (Easing)

ClassCSS
ease-linearcubic-bezier(0, 0, 1, 1)
ease-incubic-bezier(0.4, 0, 1, 1)
ease-outcubic-bezier(0, 0, 0.2, 1)
ease-in-outcubic-bezier(0.4, 0, 0.2, 1)
ease-[cubic-bezier(0.68,-0.55,0.27,1.55)]arbitrary

Delay

ClassCSS
delay-0delay-1000transition-delay: Nms
delay-[200ms]arbitrary
<!-- Smooth hover transition -->
<button class="bg-blue-600 hover:bg-blue-700 text-white transition-colors duration-200 px-4 py-2 rounded-lg">
  Hover me
</button>

<!-- Image scale on hover -->
<div class="overflow-hidden rounded-xl">
  <img class="w-full h-48 object-cover hover:scale-105 transition-transform duration-300" src="photo.jpg" alt="">
</div>

Animation

ClassCSS
animate-noneanimation: none
animate-spin360deg rotation loop
animate-pingscale + fade out loop (notification dot)
animate-pulseopacity pulse loop (skeleton loader)
animate-bounceup/down bounce loop
animate-[wiggle_1s_ease-in-out_infinite]arbitrary
<!-- Loading spinner -->
<svg class="animate-spin size-6 text-blue-600" fill="none" viewBox="0 0 24 24">
  <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"/>
  <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0..."/>
</svg>

<!-- Notification badge ping -->
<span class="relative inline-flex">
  <span class="animate-ping absolute inline-flex size-full rounded-full bg-red-400 opacity-75"></span>
  <span class="relative size-3 rounded-full bg-red-500"></span>
</span>

<!-- Skeleton loader -->
<div class="animate-pulse">
  <div class="h-4 bg-slate-200 rounded w-3/4 mb-2"></div>
  <div class="h-4 bg-slate-200 rounded w-1/2"></div>
</div>

Transform

Scale

ClassCSS
scale-0scale: 0
scale-50scale: .5
scale-75scale: .75
scale-90scale: .9
scale-95scale: .95
scale-100scale: 1
scale-105scale: 1.05
scale-110scale: 1.1
scale-125scale: 1.25
scale-150scale: 1.5
scale-x-90X-axis only
scale-y-90Y-axis only
scale-[1.03]arbitrary
-scale-x-100flip horizontally

Rotate

ClassCSS
rotate-0rotate: 0deg
rotate-1rotate: 1deg
rotate-2rotate: 2deg
rotate-3rotate: 3deg
rotate-6rotate: 6deg
rotate-12rotate: 12deg
rotate-45rotate: 45deg
rotate-90rotate: 90deg
rotate-180rotate: 180deg
-rotate-45negative
rotate-[17deg]arbitrary

Translate

ClassCSS
translate-x-4translate: 1rem 0
translate-y-4translate: 0 1rem
translate-x-1/250% of element width
-translate-x-1/2-50% (used for centering)
translate-x-full100% of width
-translate-x-full-100% (slide out left)
translate-x-[20px]arbitrary
<!-- Centering trick with absolute + translate -->
<div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
  Perfectly centered
</div>

<!-- Slide in from right (with transition) -->
<div class="translate-x-full transition-transform duration-300 data-[open=true]:translate-x-0">
  Drawer
</div>

Skew

ClassCSS
skew-x-0skew-x-12skew(Ndeg, 0)
skew-y-0skew-y-12skew(0, Ndeg)
-skew-x-6negative
skew-x-[15deg]arbitrary

Transform Origin

ClassCSS
origin-centertransform-origin: center
origin-toptransform-origin: top
origin-top-righttransform-origin: top right
origin-righttransform-origin: right
origin-bottom-righttransform-origin: bottom right
origin-bottomtransform-origin: bottom
origin-bottom-lefttransform-origin: bottom left
origin-lefttransform-origin: left
origin-top-lefttransform-origin: top left
origin-[33%_75%]arbitrary

Transform Style

ClassCSS
transform-flattransform-style: flat
transform-3dtransform-style: preserve-3d

Perspective

ClassCSS
perspective-noneperspective: none
perspective-dramaticperspective: 100px
perspective-nearperspective: 300px
perspective-normalperspective: 500px
perspective-midrangeperspective: 800px
perspective-farperspective: 1200px
perspective-[500px]arbitrary