การป้องกันไม่ให้แถบเลื่อนถูกซ่อนไว้สำหรับผู้ใช้แทร็คแพดของ MacOS ใน WebKit / Blink


162

พฤติกรรมเริ่มต้นของ WebKit / Blink (Safari / Chrome) บน MacOS ตั้งแต่ 10.7 (Mac OS X Lion) คือการซ่อนแถบเลื่อนจากผู้ใช้ trackpad เมื่อไม่ได้ใช้งาน นี้อาจจะทำให้เกิดความสับสน ; แถบเลื่อนมักเป็นเพียงคิวภาพที่องค์ประกอบเลื่อนได้

ตัวอย่าง ( 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 โดยไม่มีแถบเลื่อนที่มองเห็นได้

ภาพหน้าจอ Presto (Opera)

สกรีนช็อตของ div พร้อมแถบเลื่อนที่มองเห็นได้


ฉันจะบังคับให้แถบเลื่อนแสดงบนองค์ประกอบที่เลื่อนได้ใน WebKit ได้อย่างไร


คุณลองโอเวอร์โฟลว์แล้วหรือยัง: scroll? สิ่งนี้เคยทำงานใน Chrome มันควรบังคับให้แถบเลื่อนแสดงตลอดเวลา
xaddict

2
โปรดทราบว่ามันเป็นปัญหาใน Firefox บน Mac OS X ด้วย
Blaise

ผู้ชายฉันเกลียดเมื่อเว็บไซต์ยุ่งกับ UI ในระบบและตัวแทนผู้ใช้ของฉัน
พฤศจิกายน

คำตอบ:


250

การปรากฏตัวของแถบเลื่อนสามารถควบคุมได้ด้วยของ WebKit -webkit-scrollbarหลอกองค์ประกอบ  [ บล็อก ] คุณสามารถปิดการใช้งานลักษณะเริ่มต้นและพฤติกรรมโดยการตั้งค่า-webkit-appearance [ เอกสาร ]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)

สกรีนช็อตแสดงแถบเลื่อนของ webkit โดยไม่จำเป็นต้องโฮเวอร์


1
สำหรับการบังคับเลื่อนสิงโต MacOSX, เคล็ดลับที่อธิบายที่นี่ไม่ได้ทำงานกับเทคนิคนี้: stackoverflow.com/a/3417992/62255 ไม่ต้องกังวลเลย - เนื่องจากเรากำหนดขนาดไว้ที่นี่อย่างชัดเจนเราจึงสามารถเข้าถึงได้โดยตรง
jedierikb

5
โปรดทราบว่าคุณสามารถปรับแต่งแทร็ค / พื้นหลังของแถบเลื่อนได้ด้วย:.frame::-webkit-scrollbar-track { background-color: #FFF; border-radius: 8px; }
XML

หมายเหตุสไตล์ของแถบเลื่อน webkit ไม่ทำงานใน iOS 7 (และอาจเป็น 6)
RobW

4
สิ่งหนึ่งที่ต้องพูดถึงคือในการทดสอบของฉันและความคิดเห็นเก่าแก่จากคนอื่น ๆดูเหมือนว่าคุณไม่สามารถมีแถบเลื่อนที่ทำงานอยู่ตลอดเวลา การทำCSS เลื่อนโมเมนตัมทำให้แถบเลื่อนที่กำหนดเองของฉันหายไป
jmq

2
ยังไม่ได้ตรวจสอบเมื่อเร็ว ๆ นี้ แต่ฉันพบบันทึกนี้ใน CSS ของเราที่อ้างอิงโซลูชันนี้: "โปรดทราบว่านี่จะแสดงแถบเลื่อนสไตล์ OS X เช่นใน Chrome บน Windows"
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 ที่ทำงานเรากำลังใช้แถบเลื่อน JavaScript ที่กำหนดเองเช่น jScrollPane เพื่อให้ 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 Analytics เพื่อติดตามพฤติกรรมการเลื่อนของผู้ใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.