CSS 스크롤바 생성기

다음

커스텀 스크롤바는 한때 벤더 프리픽스가 붙은 의사 요소들의 악몽이었습니다. 오늘날 scrollbar-colorscrollbar-width는 모든 최신 브라우저에서 일반적인 경우, 좁은 너비 또는 보통 너비, 그리고 두 색상(thumb + track) 테마, 를 처리합니다. 픽셀 단위 제어(track 패딩, thumb 반경, hover 상태)에는 구형 ::-webkit-scrollbar 의사 요소가 여전히 Chrome과 Safari에서 동작합니다. 이 생성기는 둘 다 출력하며, 올바르게 캐스케이드됩니다.

스크롤바 스타일링 방법

  1. 1

    너비 선택

    Auto(기본 플랫폼 너비), thin(더 좁게), 또는 webkit 규칙을 통한 특정 픽셀 값.

  2. 2

    thumb와 track 색상 설정

    최신 `scrollbar-color`는 두 색상을 받습니다. webkit 규칙은 별도의 색상, 반경, hover 상태를 제공합니다.

  3. 3

    hover 효과 추가 (선택)

    hover 시 thumb가 밝아집니다. `::-webkit-scrollbar-thumb:hover`로 동작합니다.

  4. 4

    범위 결정

    `html` / `body`(전체 페이지)에 적용하거나, 특정 스크롤 컨테이너에만 적용합니다.

  5. 5

    CSS 복사

    최신 + webkit 규칙 결합: 모든 최신 브라우저에서 우아한 폴백과 함께 동작합니다.

최신 표준 속성 (2023년 이후)

/* Applies to the element that scrolls */
html {
  scrollbar-width: thin;           /* auto | thin | none */
  scrollbar-color: #4f46e5 #e5e7eb; /* thumb track */
}

브라우저 지원 (2024):

  • scrollbar-width: Chrome 121+, Safari 18.2+, Firefox 64+.
  • scrollbar-color: Chrome 121+, Safari 18.2+, Firefox 64+.
  • scrollbar-gutter: stable: Chrome 94+, Safari 14+, Firefox 97+. 필요 없을 때도 스크롤바 공간을 예약해 레이아웃 시프트를 방지합니다.

Webkit 의사 요소 (Chrome, Safari, 구형 Edge)

::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}
::-webkit-scrollbar-track {
  background: #e5e7eb;
  border-radius: 10px;
}
::-webkit-scrollbar-thumb {
  background: #4f46e5;
  border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
  background: #3730a3;
}

더 세밀한 제어. width는 세로 스크롤바 너비를, height는 가로 스크롤바 높이를 설정합니다. 양방향으로 스크롤되는 컨테이너에는 둘 다 추가하세요.

두 접근법 캐스케이드하기

최신 규칙을 먼저 지정하고, 둘 다 렌더링하는 브라우저를 위한 향상으로 webkit을 추가하세요:

.scroll-area {
  scrollbar-width: thin;
  scrollbar-color: #4f46e5 #e5e7eb;
}
.scroll-area::-webkit-scrollbar       { width: 8px; }
.scroll-area::-webkit-scrollbar-track { background: #e5e7eb; }
.scroll-area::-webkit-scrollbar-thumb {
  background: #4f46e5;
  border-radius: 4px;
  border: 2px solid #e5e7eb;
}

Firefox는 최신 scrollbar-* 규칙만 따릅니다. Chrome과 Safari는 webkit 규칙을 따르며, 이 규칙이 최신 규칙을 덮어쓰기 때문에 동작이 일관됩니다.

scrollbar-gutter는 콘텐츠 시프트를 방지합니다

예약된 거터가 없으면 스크롤바가 나타날 때 콘텐츠가 리플로우됩니다(동적 리스트에서 흔함). 해결:

html { scrollbar-gutter: stable; }
/* or */
html { scrollbar-gutter: stable both-edges; }

콘텐츠가 스크롤되든 아니든 스크롤바 슬롯이 예약됩니다. both-edges는 콘텐츠를 시각적으로 가운데 유지하기 위해 반대편에 일치하는 거터를 추가합니다.

스크롤바 완전히 숨기기

.no-scrollbar {
  scrollbar-width: none;           /* Firefox */
}
.no-scrollbar::-webkit-scrollbar { display: none; }  /* Chrome, Safari */

주의: 스크롤바를 숨기면 사용자가 콘텐츠를 스크롤할 수 있다는 사실을 알 수 없게 됩니다. 명확한 표시(화살표, 페이지 도트)와 함께 쓰거나, 스크롤 동작이 맥락상 명백한 경우(가로 캐러셀, 채팅 기록)에만 사용하세요.

모바일 고려 사항

iOS와 Android에서는 스크롤바가 스크롤 중에만 잠깐 나타납니다. 커스텀 스크롤바 CSS는 여전히 적용되지만, 사용자는 1초 이상 보지 못할 수 있습니다. 그에 맞게 설계하세요, 거의 나타나지 않는 시각적 화려함에 과도하게 투자하지 마세요.

접근성

  • 대비: track 대비 thumb는 비텍스트 대비 3:1을 충족해야 합니다(WCAG 1.4.11).
  • 너비: 얇은 스크롤바는 마우스로 잡기 어렵습니다. 특히 운동 장애가 있는 사용자에게 그렇습니다. 보통 너비가 더 안전한 기본값입니다.
  • 다른 스크롤 어포던스를 제공하지 않고 스크롤 영역의 스크롤바를 절대 제거하지 마세요. 스크롤바에 의존하는 사용자는 갇히게 됩니다.

자주 묻는 질문

네, 최신 scrollbar-widthscrollbar-color 속성으로 가능합니다. Firefox는 webkit 의사 요소를 지원하지 않으므로, 브라우저 간 일관된 외관을 위해 최신 속성을 먼저 사용하고 webkit 규칙을 향상으로 추가하세요.

기본 스크롤바는 콘텐츠 위에 오버레이되고 필요하기 전까지 공간을 예약하지 않기 때문입니다. 스크롤 요소에 scrollbar-gutter: stable을 설정해 거터를 항상 예약하면, 스크롤바가 나타나거나 사라질 때 리플로우를 방지합니다.

대개 그렇습니다. 스크롤바가 어색해 보이고 콘텐츠와 경쟁하기 때문입니다. 사용자가 콘텐츠가 스크롤된다는 것을 알 수 있도록 보이는 페이지네이션 도트나 화살표 컨트롤을 추가하세요. 스크롤 스냅을 쓴다면 prefers-reduced-motion을 존중하세요.

그럴 수 있습니다. 매우 얇거나 대비가 낮은 스크롤바는 운동 장애 및 저시력 사용자가 사용하기 어렵습니다. 편하게 잡을 수 있도록 스크롤바를 최소 8-10px 너비로 유지하고, thumb와 track 간 3:1 대비를 유지하세요.

관련 도구