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

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의 스크롤 가능한 요소에 항상 스크롤 막대를 표시하려면 어떻게해야합니까?



답변

스크롤 막대의 모양은 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) 스크린 샷

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


답변

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

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

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

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


답변

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

::-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


답변

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

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


답변

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 웹 로그 분석 이벤트를 바인딩하여 사용자의 스크롤 동작을 추적 할 수 있습니다.


답변