운영체제나 브라우저에서 고대비 모드를 사용 설정하는 사용자는 UI 요소 (예: 스크롤바)가 매우 잘 보이기를 기대하며, 미묘한 회색이나 테마 색상보다는 명확한 전경-배경 분리에 의존하는 경우가 많습니다.
이 가이드에서는 @media (prefers-contrast: more) CSS 미디어 기능을 사용하여 고대비 스크롤바 스타일을 적용하는 방법에 관한 선택적 안내를 제공합니다.
가독성 향상
scrollbar-color 또는 맞춤 변수를 사용하여 스크롤바를 맞춤설정할 때 고대비 모드를 명시적으로 재정의할 수 있습니다. 이는 미적 이유로 기본 애플리케이션 테마에서 대비가 낮은 스크롤바를 사용하는 경우에 특히 유용합니다.
선택사항: @media (prefers-contrast: more) 블록을 사용하여 엄지손가락과 트랙에 어둡고 뚜렷한 색상을 정의합니다.
/* Define default standard colors as variables */
.scroller {
--scrollbar-thumb: #bbb;
--scrollbar-track: #f1f1f1;
scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
scrollbar-width: thin;
scrollbar-gutter: stable;
}
/* OPTIONAL: Provide clear, high-contrast overrides */
@media (prefers-contrast: more) {
.scroller {
/* Use extremely distinct colors like solid black against white */
--scrollbar-thumb: #000000;
--scrollbar-track: #ffffff;
}
}
scrollbar-color 사용 시 주의해야 할 문제
scrollbar-color에 애니메이션이나 전환을 적용하지 마세요. WebKit 버그로 인해scrollbar-color가 변경될 때마다 스크롤바가 깜박입니다.- macOS에서는 기본적으로
scrollbar-color(표준) 및::-webkit-scrollbar(기존) 속성이 무시됩니다. macOS는 네이티브 '오버레이' 스크롤바를 사용하기 때문입니다. macOS에서 렌더링하도록 하려면 맞춤 색상을scrollbar-width(예:thin또는auto)과 페어링해야 합니다(MUST). scrollbar-width가 적용되어 있어도 macOS 오버레이 스크롤바는 기본적으로 트랙 (여백)을 투명하게 렌더링합니다. 디자인에서 MacOS에 표시되는 트랙 배경 색상이 필요한 경우 스크롤 가능한 컨테이너에scrollbar-gutter: stable;를 적용해야 합니다(MUST). 단, 사용자가 스크롤바 위로 마우스를 가져간 후에만 표시됩니다.scrollbar-gutter: stable를 사용해도 MacOS에서 트랙이 투명할 수 있습니다. 엄지손가락은 트랙 색상에 따라 표시되지 않아야 합니다.
대체 및 브라우저 지원
scrollbar-color의 대체 및 브라우저 지원
이 기능은 점진적 개선이며 항상 대체가 필요한 것은 아닙니다.
스타일 지정이 중요하고 사용자의 기준 타겟이 '기준 널리 사용 가능' 이하인 경우 비표준 ::-webkit-scrollbar 가상 요소를 대체로 포함해야 합니다(SHOULD).
기존 대체 항목을 @supports not (scrollbar-color: auto) 블록으로 래핑하여 두 가지를 모두 기본적으로 지원하는 브라우저에서 표준 속성과 기존 WebKit 선택기 간의 충돌을 방지합니다.
맞춤 속성을 사용하여 색상을 정의하는 경우 기존 WebKit 선택기에 자동으로 적용됩니다. 중복으로 만들 필요는 없습니다.
/* Legacy fallback for WebKit/Blink browsers */
@supports not (scrollbar-color: auto) {
.scroller::-webkit-scrollbar {
/* Must define base size in WebKit for custom colors to be visual */
width: 12px;
height: 12px;
}
.scroller::-webkit-scrollbar-thumb {
background: var(--scrollbar-thumb);
}
.scroller::-webkit-scrollbar-track {
background: var(--scrollbar-track);
}
}