React 요소의 테두리를 따라 빛이 이동하거나 숨 쉬는 듯한 glow를 입히는 경량 UI 컴포넌트. 카드·버튼·입력창·검색창 같은 기존 콘텐츠를 감싸서 제품 UI에 시각적 강조를 추가한다.
무엇인가
border-beam은 Jakub Antalik이 만든 TypeScript/React 오픈소스 패키지다. BorderBeam 컴포넌트가 자식 요소를 감싸고, CSS pseudo-element·gradient·mask를 조합해 테두리 효과를 렌더링한다. 콘텐츠 자체의 레이아웃과 입력 동작은 건드리지 않고 장식 레이어만 추가한다.
2026-07-10 GitHub 스냅샷 기준으로 버전은 1.3.0, MIT 라이선스, TypeScript 프로젝트이며 저장소에는 약 1.1k stars와 64 forks가 표시된다. 최신 README는 React >=18을 peer dependency로 요구한다.
효과 프리셋
size가 효과의 움직임과 형태를 결정한다.
md: 전체 테두리를 도는 기본 traveling beamsm: 작은 버튼·아이콘 등 컴팩트한 요소용line: 하단 중심의 traveling glowpulse-inner: 요소 안쪽에 갇힌 breathing glowpulse-outside: 불투명한 자식 요소 뒤에서 바깥으로 퍼지는 halo
색상은 colorful(무지개), mono(단색/그레이스케일), ocean(블루·퍼플), sunset(오렌지·옐로·레드)을 제공한다. theme="dark" | "light" | "auto"로 배경에 맞는 강도와 색감을 선택할 수 있다.
주요 API
import { BorderBeam } from 'border-beam';
<BorderBeam size="md" colorVariant="ocean" theme="dark" strength={0.7}>
<Card />
</BorderBeam>duration: 회전·호흡 주기(초)active: 애니메이션 on/off; fade-in/fade-out 콜백(onActivate,onDeactivate) 지원borderRadius: 생략하면 첫 번째 자식의border-radius를 자동 감지brightness,saturation,hueRange,strength: glow의 시각적 강도와 색 변화 조정staticColors: hue-shift 애니메이션 비활성화- 표준
HTMLDivElement속성,className,style,ref전달 지원
구현상 특징
- 회전·line 효과는 CSS
@property와 keyframe 애니메이션으로 빔의 위치, 폭, 높이, edge fade, spike를 조합한다. - pulse 효과는 여러 인스턴스가 각자
requestAnimationFrame을 돌리지 않도록 공유 드라이버를 사용하고, 약 30fps로 제한해 paint 빈도를 낮춘다. IntersectionObserver로 화면 밖 인스턴스의 paint-heavy 애니메이션을 일시 정지한다.prefers-reduced-motion: reduce를 존중하며, 효과 레이어에는pointer-events: none을 사용해 콘텐츠의 클릭·키보드 조작을 방해하지 않는다.pulse-outside는 자식이 불투명해야 바깥 halo가 의도대로 보이며, 주변 레이아웃에 glow가 퍼질 여유가 있어야 한다.
도입 판단
장점
npm install border-beam후 래퍼 하나로 적용할 수 있는 낮은 도입 비용- 카드·CTA·검색창 등에 제품 완성도와 시각적 주목도를 빠르게 추가
- dark/light 테마, 색상 팔레트, 강도, 모션 선호도 대응이 한 컴포넌트에 포함
- CSS 중심 렌더링과 offscreen pause로 장식 효과의 비용을 어느 정도 통제
주의점
- 테두리 glow는 정보 구조나 접근성을 개선하는 기능이 아니라 장식 효과이므로, 상태·오류·포커스 표현을 이 효과에만 의존하면 안 된다.
- CSS mask,
@property,filter, pseudo-element 조합에 의존하므로 지원 브라우저 범위를 제품 기준으로 확인해야 한다. 저장소 README는 Chrome 85+, Safari 15.4+, Firefox 128+를 요구사항으로 적고 있다. pulse-outside는overflow: hidden부모에 의해 halo가 잘릴 수 있고, 투명한 자식에서는 내부 glow가 비쳐 의도와 달라질 수 있다.- 단일 소스(README·공개 저장소) 기준 정리이므로 실제 번들 크기와 브라우저별 시각 차이는 도입 전에 직접 검증하는 편이 안전하다.
관련 노트
- moc-dev-tools — 개발 도구·디자인 시스템 관련 노트 허브
- open-source — 오픈소스 리포지토리/도구 참조 페이지
- 2026-05-07-react-video-ascii — React 기반 시각 효과 컴포넌트의 인접 사례