Tailwind CSS Cheatsheet

Borders, Shadows, Effects

Use this Tailwind CSS reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.

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