WebKit / Blink에서 MacOS 트랙 패드 사용자에게 스크롤 막대가 숨겨지지 않도록 방지


162

10.7 이후 MacOS에서 WebKit / Blink (Safari / Chrome) 기본 동작 (Mac OS X Lion)은 트랙 패드 사용자가 사용하지 않을 때 스크롤 막대를 숨기는 것입니다. 이것은 혼란 스러울 수 있습니다 . 스크롤 막대는 종종 요소를 스크롤 할 수있는 유일한 시각적 신호입니다.

예 ( jsfiddle )

HTML
<div class="frame">
    Foo<br />
    Bar<br />
    Baz<br />
    Help I'm trapped in an HTML factory! 
</div>
CSS
.frame {
    overflow-y: auto;
    border: 1px solid black;
    height: 3em;
    width: 10em;
    line-height: 1em;
}​
WebKit (Chrome) 스크린 샷

보이는 스크롤 막대가없는 div 스크린 샷

프레스토 (오페라) Screenshot

스크롤 막대가 보이는 div 스크린 샷


WebKit의 스크롤 가능한 요소에 항상 스크롤 막대를 표시하려면 어떻게해야합니까?


overflow : scroll을 사용해 보셨습니까? 이것은 Chrome에서 작동했습니다. 스크롤바가 항상 표시되도록해야합니다.
xaddict

2
Mac OS X의 Firefox에서도 문제입니다.
Blaise

나는 웹 사이트가 시스템과 사용자 에이전트 의 UI를 망칠 때 싫어 .
amn

답변:


250

스크롤 막대의 모양은 WebKit의 -webkit-scrollbar유사 요소  [ blog ] 로 제어 할 수 있습니다 . -webkit-appearance [ docs ] 를 로 설정하여 기본 모양과 동작을 비활성화 할 수 있습니다 none.

기본 스타일을 제거하고 있으므로 스타일을 직접 지정해야합니다. 그렇지 않으면 스크롤 막대가 표시되지 않습니다. 다음 CSS는 숨은 스크롤 막대의 모양을 재현합니다.

예 ( jsfiddle )

CSS
.frame::-webkit-scrollbar {
    -webkit-appearance: none;
}

.frame::-webkit-scrollbar:vertical {
    width: 11px;
}

.frame::-webkit-scrollbar:horizontal {
    height: 11px;
}

.frame::-webkit-scrollbar-thumb {
    border-radius: 8px;
    border: 2px solid white; /* should match background, can't be transparent */
    background-color: rgba(0, 0, 0, .5);
}

.frame::-webkit-scrollbar-track { 
    background-color: #fff; 
    border-radius: 8px; 
} 
WebKit (Chrome) 스크린 샷

호버링 할 필요없이 웹킷의 스크롤 막대를 보여주는 스크린 샷


1
강제에서라도 사자 스크롤바를 들어, 트릭이 기술이 작동하지 않습니다 여기에 설명 : stackoverflow.com/a/3417992/62255를 . 우리는 여기서 치수를 명시 적으로 설정하고 있기 때문에 직접 액세스 할 수 있습니다.
jedierikb

5
다음을 사용하여 스크롤 막대의 트랙 / 배경을 사용자 정의 할 수도 있습니다..frame::-webkit-scrollbar-track { background-color: #FFF; border-radius: 8px; }
XML

참고 웹킷 스크롤 막대 스타일은 iOS 7 (및 6)에서 작동하지 않습니다.
RobW

4
언급 할 한 가지는 내 테스트와 다른 사람의 오래된 주석 에서 항상 스크롤 막대를 가질 수 없으며 사람들이 iOS에서 익숙한 운동량과 같은 스크롤을 가질 수 없다는 것입니다. 운동량 스크롤 CSS를 수행하면 사용자 정의 스크롤 막대가 사라졌습니다.
jmq

2
최근에 이것을 확인하지는 않았지만 CSS에서이 솔루션을 참조한이 메모를 찾았습니다. "이것은 OS X 스타일 스크롤 막대가 Windows의 Chrome에서 표시됩니다."
Henrik N

19

스크롤 가능한 섹션을 동적으로 추가하는 한 페이지 웹 응용 프로그램의 경우 프로그래밍 방식으로 한 픽셀을 아래로 스크롤하여 OSX의 스크롤 막대를 트리거합니다.

// Plain JS:
var el = document.getElementById('scrollable-section');
el.scrollTop = 1;
el.scrollTop = 0;

// jQuery:
$('#scrollable-section').scrollTop(1).scrollTop(0);

시각적 큐 페이드 인 / 아웃을 트리거합니다.


19

다음은 전체 웹 사이트에서 스크롤 막대를 다시 활성화하는 짧은 코드입니다. 현재 가장 인기있는 답변과 크게 다른지 확실하지 않지만 여기에 있습니다.

::-webkit-scrollbar {
    -webkit-appearance: none;
    width: 7px;
}
::-webkit-scrollbar-thumb {
    border-radius: 4px;
    background-color: rgba(0,0,0,.5);
    box-shadow: 0 0 1px rgba(255,255,255,.5);
}

이 링크에서 찾을 수 있습니다 : http://simurai.com/blog/2011/07/26/webkit-scrollbar


3

iPhone / iPad에서는 브라우저 스크롤바가 전혀 작동하지 않습니다. 직장에서 우리는 jScrollPane과 같은 사용자 정의 JavaScript 스크롤 막대를 사용하여 일관된 크로스 브라우저 UI를 제공합니다. http://jscrollpane.kelvinluck.com/

그것은 나를 위해 아주 잘 작동합니다-당신은 당신의 사이트의 디자인에 맞는 정말 아름다운 사용자 정의 스크롤 막대를 만들 수 있습니다.


2

Lion의 숨겨진 스크롤 막대를 처리하는 또 다른 좋은 방법은 아래로 스크롤하라는 메시지를 표시하는 것입니다. 텍스트 필드와 같은 작은 스크롤 영역에서는 작동하지 않지만 큰 스크롤 영역에서는 잘 작동하며 전체 사이트 스타일을 유지합니다. 이 작업을 수행하는 한 사이트는 http://versusio.com입니다 .이 예제 페이지를 확인하고 1.5 초 동안 기다리면 프롬프트가 표시됩니다.

http://versusio.com/en/samsung-galaxy-nexus-32gb-vs-apple-iphone-4s-64gb

구현은 어렵지 않지만 사용자가 이미 스크롤했을 때 프롬프트를 표시하지 않도록주의해야합니다.

jQuery + Underscore가 필요합니다.

$(window).scroll 사용자가 이미 스크롤했는지 확인하기 위해

_.delay() 프롬프트를 표시하기 전에 지연을 트리거하려면 프롬프트가 방해받지 않아야합니다.

$('#prompt_div').fadeIn('slow') 당신의 프롬프트와 물론 페이드

$('#prompt_div').fadeOut('slow') 사용자가 프롬프트를 본 후 스크롤하면 페이드 아웃

또한 Google 웹 로그 분석 이벤트를 바인딩하여 사용자의 스크롤 동작을 추적 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.