CSS Box Shadow란?
box-shadow는 CSS 속성으로 HTML 요소 주변에 그림자 효과를 만듭니다. 단순한 드롭 섀도우부터 neumorphism 스타일의 복잡한 그림자까지, 이미지 처리 없이 순수 CSS만으로 깊이감과 입체감을 연출할 수 있습니다. 모던 웹 디자인에서 카드·버튼·박스의 시각 계층을 표현하는 핵심 도구이며, 성능(이미지 로드 불필요)과 유지보수(색상·크기 즉시 변경)에서 매우 효율적입니다.
이렇게 쓰세요
- offset-x / offset-y 슬라이더로 그림자의 위치를 정합니다. 음수면 왼쪽/위, 양수면 오른쪽/아래입니다.
- blur로 그림자 가장자리의 흐림 정도를, spread로 그림자 크기를 조절합니다. 색상 피커와 투명도로 그림자 모양을 마무리합니다.
- 필요하면 inset 체크박스로 안쪽 그림자 효과를 추가한 뒤, CSS 코드 복사 버튼으로 코드를 클립보드에 복사합니다.
자주 쓰는 그림자 패턴
- 카드 그림자: offset-x 0, offset-y 2~4px, blur 8~12px, 투명도 0.1~0.2. 웹사이트 카드·모달에서 가장 흔한 패턴입니다.
- 뜬듯한 효과: offset-y를 크게(8~16px), blur를 높게(16~32px), 투명도를 낮게(0.1~0.15). 마치 떠 있는 것처럼 보입니다.
- 내부 함몰: inset 체크, offset 0, blur 중간(8~12px), 투명도 0.2. 상자 안쪽이 파인 효과를 냅니다.
- Neumorphism: 밝은 inset 그림자(흰색)와 어두운 외부 그림자(검은색)를 조합. 부드럽고 입체적인 현대식 UI 스타일입니다.
알아두면 좋은 점
- 음수 offset-x/y를 사용하면 그림자가 반대 방향(왼쪽·위)으로 나타납니다. 버튼을 누른 상태처럼 표현할 때 유용합니다.
- spread가 음수면 그림자가 원래 상자보다 작아집니다. 음수를 조합하면 세밀한 border 대용 효과도 만들 수 있습니다.
- 쉼표로 여러 box-shadow를 연결하면 복합 그림자를 만들 수 있습니다. 예: box-shadow: 0 4px 6px ..., inset 0 0 4px ...;
- box-shadow는 transition과 함께 애니메이션할 수 있습니다. 버튼 hover 효과에 자주 쓰입니다.
- 매우 큰 blur나 spread를 과도하게 쓰면 성능 저하가 있을 수 있습니다. 대부분의 경우 blur ≤ 50, spread ≤ 20이면 충분합니다.
자주 묻는 질문
box-shadow의 4개 인자는 무엇인가요?
box-shadow의 4개 주요 인자는 다음과 같습니다. (1) offset-x: 그림자의 수평 거리(음수면 왼쪽). (2) offset-y: 그림자의 수직 거리(음수면 위쪽). (3) blur: 그림자의 흐림 정도(0이면 선명함, 클수록 부드러움). (4) spread: 그림자의 크기(음수면 축소, 양수면 확대). 그 뒤에 색상(hex·rgb·rgba)과 선택적으로 inset 키워드가 옵니다.
inset 효과는 무엇인가요?
inset 키워드를 추가하면 그림자가 상자 바깥쪽이 아니라 안쪽에 생깁니다. 상자가 함몰되거나 깊이가 있어 보이는 효과를 낼 수 있습니다. 예를 들어 inset 0 0 10px rgba(0,0,0,0.2)는 상자 내부에 검은 그림자를 만들어 홈이 파인 느낌을 줍니다.
여러 그림자를 합치는 방법은?
쉼표(,)로 여러 box-shadow 값을 구분하면 됩니다. 예: box-shadow: 0 4px 8px rgba(0,0,0,0.2), 2px 2px 0 rgba(255,0,0,0.1), inset 0 0 5px rgba(0,0,0,0.05); 이렇게 최대 수십 개까지 중첩할 수 있으며, 순서대로 렌더링됩니다. 뒤의 그림자가 앞의 그림자 위에 표시됩니다.
RGBA 투명도 vs 16진수 8자리(#RRGGBBAA)는 어떻게 다르나요?
rgba(r, g, b, a)는 빨강·초록·파랑을 0~255 또는 0~1로, 투명도 a를 0~1로 표현합니다. #RRGGBBAA(16진수 8자리)는 같은 색상·투명도를 16진법으로 표현합니다. 예: rgba(0,0,0,0.2) ≈ #00000033(16진 33 ≈ 0.2). CSS에서 둘 다 지원되지만, rgba()는 모든 브라우저에서 오래전부터 지원되고 #RRGGBBAA는 비교적 최신 브라우저(IE 미지원)에서 지원됩니다.