</>DevTools

SHDCSS 박스 쉐도우 생성기

CSS box-shadow를 시각적 미리보기로 생성

5px
5px
15px
0px
box-shadow: 5px 5px 15px 0px #00000040;

CSS box-shadow 완벽 가이드

CSS box-shadow는 요소에 그림자를 추가해 깊이감과 입체감을 부여하는 속성입니다. Material Design, 뉴모피즘, 글래스모피즘 등 모든 현대 UI 디자인 시스템에서 핵심적으로 사용됩니다. 이 도구는 슬라이더를 조작하는 즉시 그림자가 어떻게 변하는지 실시간으로 확인하고 CSS 코드를 바로 복사할 수 있게 해줍니다.

box-shadow vs text-shadow

box-shadow — 요소 박스 그림자

요소의 박스 영역 전체에 그림자를 적용합니다. inset 키워드와 spread 값을 지원하는 것이 text-shadow와의 큰 차이입니다.

/* 기본 그림자 */
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);

/* 외부 그림자 + 내부 그림자 동시에 */
box-shadow:
  0 4px 6px rgba(0, 0, 0, 0.1),
  inset 0 1px 0 rgba(255, 255, 255, 0.1);

text-shadow — 텍스트 그림자

/* 기본: x y blur color */
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);

/* 빛나는(glow) 효과 */
text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 40px #667eea;

/* 레트로 3D 효과 */
text-shadow: 1px 1px #aaa, 2px 2px #aaa, 3px 3px #aaa;

6개 값 완벽 이해

각 값의 역할

box-shadow: inset  x     y     blur   spread  color;
            (선택) 5px   5px   15px   0px     rgba(0,0,0,0.25);

/* inset  : 내부 그림자 (없으면 외부) */
/* x      : 양수=오른쪽, 음수=왼쪽 */
/* y      : 양수=아래, 음수=위 */
/* blur   : 흐림 반지름 (0=선명, 클수록 부드러움) */
/* spread : 양수=확장, 음수=축소 */
/* color  : rgba/hex 모두 가능 (투명도 권장) */

Material Design 그림자 값

Material Design 공식 elevation 값

/* elevation 1 (카드) */
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);

/* elevation 2 (버튼) */
box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23);

/* elevation 3 (모달) */
box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);

/* elevation 4 (드로어) */
box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22);

/* elevation 5 (다이얼로그) */
box-shadow: 0 19px 38px rgba(0,0,0,0.30), 0 15px 12px rgba(0,0,0,0.22);

다중 그림자 기법 — 뉴모피즘

뉴모피즘 (Neumorphism)

/* 배경색과 일치해야 함 */
.neumorph {
  background: #e0e5ec;
  box-shadow:
    6px 6px 12px #b8bec7,   /* 어두운 그림자 (오른쪽 아래) */
    -6px -6px 12px #ffffff; /* 밝은 그림자 (왼쪽 위) */
  border-radius: 12px;
}

/* 눌린(pressed) 상태 */
.neumorph:active {
  box-shadow:
    inset 4px 4px 8px #b8bec7,
    inset -4px -4px 8px #ffffff;
}

컬러 그림자 (Color Shadow)

/* 버튼의 색상 그림자 */
.btn-primary {
  background: #667eea;
  box-shadow: 0 8px 20px rgba(102, 126, 234, 0.4);
}

.btn-danger {
  background: #f5576c;
  box-shadow: 0 8px 20px rgba(245, 87, 108, 0.4);
}

성능 및 접근성

성능 최적화

box-shadow는 GPU 가속을 받지 않아 애니메이션에서 paint를 유발합니다. 호버 효과에 box-shadow를 변경하는 대신 opacity를 사용하거나, 실제 그림자 요소를 ::after 의사 요소로 만들고 opacity를 전환하면 60fps를 유지할 수 있습니다.

/* 성능 최적화 패턴 */
.card {
  position: relative;
}
.card::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
  opacity: 0;
  transition: opacity 0.3s;
}
.card:hover::after {
  opacity: 1; /* box-shadow 대신 opacity만 변경 */
}

자주 묻는 질문 (FAQ)

그림자 없이 외곽선만 만들 수 있나요?

spread만 사용하면 됩니다. box-shadow: 0 0 0 2px #667eea는 blur 없는 2px 테두리처럼 보입니다. outline과 달리 레이아웃에 영향을 주지 않고 border-radius를 따라갑니다.

filter: drop-shadow()와 box-shadow의 차이는?

filter: drop-shadow()는 투명 PNG의 실제 모양을 따라 그림자를 만듭니다. box-shadow는 항상 직사각형 박스 기준입니다. SVG나 투명 이미지에는 drop-shadow가 더 자연스럽습니다.

Tailwind CSS에서 box-shadow 사용하기

<div class="shadow-sm">   <!-- 작은 그림자 -->
<div class="shadow">      <!-- 기본 그림자 -->
<div class="shadow-md">   <!-- 중간 그림자 -->
<div class="shadow-lg">   <!-- 큰 그림자 -->
<div class="shadow-xl">   <!-- 더 큰 그림자 -->
<div class="shadow-2xl">  <!-- 가장 큰 그림자 -->
<div class="shadow-inner"> <!-- 내부 그림자 -->
<div class="shadow-none"> <!-- 그림자 제거 -->

접근성 측면에서 주의사항은?

그림자만으로 포커스 표시를 대체하지 마세요. 고대비 모드에서는 그림자가 보이지 않을 수 있습니다. 포커스 링에는 outline을 유지하고 그림자는 시각적 보강으로만 사용하세요.

🔗관련 도구🎨 CSS 도구