Ngăn chặn thanh cuộn bị ẩn cho người dùng trackpad MacOS trong WebKit / Blink


162

Hành vi mặc định của WebKit / Blink (Safari / Chrome) trên MacOS kể từ 10.7 (Mac OS X Lion) là để ẩn các thanh cuộn khỏi người dùng trackpad khi họ không sử dụng. Điều này có thể gây nhầm lẫn ; thanh cuộn thường là dấu hiệu trực quan duy nhất mà một phần tử có thể cuộn được.

Ví dụ ( 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;
}​
Ảnh chụp màn hình WebKit (Chrome)

ảnh chụp màn hình của div không có thanh cuộn hiển thị

Ảnh chụp màn hình Presto (Opera)

ảnh chụp màn hình của div với thanh cuộn hiển thị


Làm cách nào tôi có thể buộc một thanh cuộn luôn được hiển thị trên một phần tử có thể cuộn trong WebKit?


Bạn đã thử tràn: cuộn chưa? Điều này được sử dụng để làm việc trong Chrome. Nó sẽ buộc các thanh cuộn luôn hiển thị.
xaddict

2
Lưu ý rằng đó cũng là một vấn đề trong Firefox trên Mac OS X.
Blaise

Man, tôi ghét nó khi các trang web gây rối với giao diện người dùng trên hệ thống và tác nhân người dùng của tôi .
Amn

Câu trả lời:


249

Sự xuất hiện của các thanh cuộn có thể được kiểm soát bằng -webkit-scrollbarcác phần tử giả  của WebKit [ blog ] . Bạn có thể vô hiệu hóa giao diện và hành vi mặc định bằng cách đặt -webkit-appearance [ tài liệu ] thành none.

Vì bạn đang xóa kiểu mặc định, bạn cũng cần tự xác định kiểu hoặc thanh cuộn sẽ không bao giờ xuất hiện. CSS sau đây tái tạo sự xuất hiện của các thanh cuộn ẩn:

Thí dụ (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; 
} 
Ảnh chụp màn hình WebKit (Chrome)

ảnh chụp màn hình hiển thị thanh cuộn của webkit mà không cần di chuột


1
Đối với các thanh cuộn sư tử macosx bắt buộc, mẹo được mô tả ở đây không hoạt động với kỹ thuật này: stackoverflow.com/a 43217992/62255 . Mặc dù không bận tâm - vì chúng tôi rõ ràng đang đặt kích thước ở đây, chúng tôi có thể truy cập chúng trực tiếp.
jedierikb

5
Lưu ý rằng bạn cũng có thể tùy chỉnh bản nhạc / nền của thanh cuộn với:.frame::-webkit-scrollbar-track { background-color: #FFF; border-radius: 8px; }
XML

Lưu ý các kiểu thanh cuộn của bộ webkit không hoạt động trong iOS 7 (và có thể là 6).
RobW

4
Một điều cần đề cập là, trong thử nghiệm của tôi và một nhận xét thực sự cũ của người khác , có vẻ như bạn không thể có một thanh cuộn luôn bật và cuộn giống như động lực mà mọi người đã quen với iOS. Việc thực hiện CSS cuộn theo đà khiến các thanh cuộn tùy chỉnh của tôi biến mất.
jmq

2
Gần đây không xác minh điều này, nhưng tôi đã tìm thấy ghi chú này trong CSS của chúng tôi đã tham chiếu giải pháp này: "Lưu ý rằng điều này sẽ hiển thị thanh cuộn kiểu OS X, ví dụ như trong Chrome trên Windows."
Henrik N

19

Đối với ứng dụng web một trang nơi tôi tự động thêm các phần có thể cuộn, tôi kích hoạt thanh cuộn của OSX bằng cách lập trình cuộn một pixel xuống và sao lưu:

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

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

Điều này kích hoạt các dấu hiệu trực quan mờ dần trong và ngoài.


19

Đây là một đoạn mã ngắn hơn có thể điều chỉnh các thanh cuộn trên toàn bộ trang web của bạn. Tôi không chắc nó có khác nhiều so với câu trả lời phổ biến nhất hiện nay không nhưng đây là:

::-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);
}

Tìm thấy tại liên kết này: http://simurai.com/blog/2011/07/26/webkit-scrollbar


3

Thanh cuộn trình duyệt hoàn toàn không hoạt động trên iPhone / iPad. Tại nơi làm việc, chúng tôi đang sử dụng các thanh cuộn JavaScript tùy chỉnh như jScrollPane để cung cấp giao diện người dùng trình duyệt chéo nhất quán: http://jscrollpane.kelvinluck.com/

Nó hoạt động rất tốt đối với tôi - bạn có thể tạo một số thanh cuộn tùy chỉnh thực sự đẹp phù hợp với thiết kế của trang web của bạn.


2

Một cách khác để đối phó với các thanh cuộn ẩn của Lion là hiển thị lời nhắc để cuộn xuống. Nó không hoạt động với các khu vực cuộn nhỏ như trường văn bản nhưng tốt với các khu vực cuộn lớn và giữ nguyên phong cách chung của trang web. Một trang web thực hiện việc này là http://versusio.com , chỉ cần kiểm tra trang ví dụ này và đợi 1,5 giây để xem lời nhắc:

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

Việc thực hiện không khó nhưng bạn phải cẩn thận, rằng bạn không hiển thị lời nhắc khi người dùng đã cuộn.

Bạn cần jQuery + gạch dưới và

$(window).scroll để kiểm tra xem người dùng đã tự cuộn chưa,

_.delay() để kích hoạt độ trễ trước khi bạn hiển thị lời nhắc - lời nhắc không nên gây khó chịu

$('#prompt_div').fadeIn('slow') mờ dần trong lời nhắc của bạn và tất nhiên

$('#prompt_div').fadeOut('slow') mờ dần khi người dùng cuộn sau khi thấy dấu nhắc

Ngoài ra, bạn có thể liên kết các sự kiện Google Analytics để theo dõi hành vi cuộn của người dùng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.