ทำให้แถบเลื่อนหลักมองเห็นได้ตลอดเวลา


179

CSS ใดที่จำเป็นในการทำให้แถบเลื่อนแนวตั้งของเบราว์เซอร์ยังคงปรากฏให้เห็นเมื่อผู้ใช้เยี่ยมชมหน้าเว็บ (เมื่อหน้ามีเนื้อหาไม่เพียงพอที่จะเปิดใช้งานแถบเลื่อน)


1
เพื่อป้องกันไม่ให้เลื่อนการกระโดดใน Windowsมีทางออกที่ดีกว่า
Josh Habdas

คำตอบ:


333
html {
    overflow: -moz-scrollbars-vertical; 
    overflow-y: scroll;
}

ทำให้แถบเลื่อนสามารถมองเห็นได้และใช้งานได้เมื่อจำเป็นเท่านั้น

อัปเดต: หากการใช้งานด้านบนไม่สามารถใช้งานได้เพียงแค่นี้

html {
    overflow-y:scroll;
}

3
คุณมีความคิดหรือไม่ว่า FF รุ่นใดที่สนับสนุนoverflow-y? ดูเหมือนว่า-moz-scrollbars-verticalจะถูกคัดค้านในความโปรดปรานของoverflow-yทรัพย์สิน
Ionuț G. Stan

ฉันคิดว่า Internet Explorer 6.x +, Firefox 1.5+ ถ้าฉันจำได้ถูกต้อง ฉันใช้รหัสข้างต้นและใช้งานได้ใน FF1.5-3.5.1 และ IE6-8 สำหรับฉัน
Corv1nus

2
มีทางเลือกอื่นสำหรับ "การข้ามหน้า" หรือไม่เมื่อหน้าบางหน้าในเว็บไซต์ของคุณเล็กเกินไปที่จะมีแถบเลื่อนและอื่น ๆ หรือนี่คือ "แนวปฏิบัติที่ดีที่สุด" หรือไม่? ฉันต้องยอมรับว่าฉันไม่เห็นหลาย ๆ หน้าบนเว็บที่ไม่เต็มหน้า
Jess

2
ฉันไม่แน่ใจว่ามันเป็นวิธีปฏิบัติที่ดีที่สุด แต่การมีแถบเลื่อนในทุกหน้าและทำงานเฉพาะเมื่อจำเป็นเพื่อหลีกเลี่ยงการข้ามหน้าเป็นวิธีที่ยอมรับได้ ฉันมักจะชอบแถบเลื่อนคงที่มากกว่าการกระโดด
Corv1nus

1
สำหรับผู้ที่ (เช่นฉัน) ที่พบว่าการจัดแต่งทรงhtmlบิตสับ-Yทราบว่าคุณสามารถใช้โครงสร้างหลอกตัวเลือกแทน:root htmlดู: developer.mozilla.org/en-US/docs/Web/CSS/:root
Rounin

31

ตรวจสอบให้แน่ใจว่าได้ตั้งค่าโอเวอร์โฟลว์เป็น "เลื่อน" ไม่ใช่ "อัตโนมัติ" ด้วยที่กล่าวไว้ใน OS X Lion การตั้งค่าโอเวอร์โฟลว์เป็น "เลื่อน" จะทำงานเหมือนอัตโนมัติในแถบเลื่อนนั้นจะยังคงแสดงเฉพาะเมื่อมีการใช้งาน ดังนั้นหากวิธีการแก้ปัญหาข้างต้นไม่ปรากฏว่าใช้งานได้อาจเป็นสาเหตุ

นี่คือสิ่งที่คุณจะต้องแก้ไข:

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

คุณสามารถจัดสไตล์ได้ตามต้องการหากคุณไม่ชอบค่าเริ่มต้น


1
สิ่งนี้ใช้ได้ผล! แต่คุณจะทำมันอย่างไรใน div เฉพาะ?
รวย

@ ที่อุดมไปด้วยเช่นเดียวกับองค์ประกอบ CSS อื่น ๆ .yourdiv :: - webkit-scrollbar {... }
Kris

@Kris สวัสดีขอบคุณสำหรับคำตอบนี่คือตัวอย่างของมัน stackoverflow.com/a/54667091/2637261
รวย

ทำไมจึงใช้-webkit-appearance: none;
Suraj Jain

มันเยี่ยมมาก! ควรเป็นคำตอบที่ยอมรับได้
Cyberpunker

25

สิ่งต่าง ๆ มีการเปลี่ยนแปลงในปีที่ผ่านมา คำตอบข้างต้นไม่ถูกต้องในทุกกรณีอีกต่อไป Apple กำลังผลักแถบเลื่อนที่หายไปทุกที่ Safari, Chrome และ Firefox บน MacOs (และ iOs) แสดงเฉพาะแถบเลื่อนเมื่อเลื่อนจริง - ฉันไม่รู้เกี่ยวกับ Windows / IE ปัจจุบัน อย่างไรก็ตามมีวิธีที่ไม่เป็นมาตรฐานในการกำหนดสไตล์ของแถบเลื่อนบน Webkit (IE ลดลงเมื่อนานมาแล้ว)


แต่มันลดระดับลงอย่างงดงามบนตัวใหม่
Ben

3
ขอบคุณสำหรับจุดที่ยอดเยี่ยมนี้ในแถบเลื่อนที่หายไป สำหรับฉันเหตุผลที่ทำให้แถบเลื่อนสามารถมองเห็นได้คือการหลีกเลี่ยงการกระตุกที่เล็กน้อย แต่สังเกตเห็นได้ชัดเจนและน่ารำคาญมากเนื่องจากการเปลี่ยนแปลงเนื้อหาจากการเลื่อนเป็นไม่ ด้วยแถบเลื่อนที่หายไปพวกเขาไม่ได้กระตุกร่างกายเมื่อพวกเขาแสดงและซ่อนดังนั้นมันจึงใช้ได้สำหรับฉัน แต่ขอบคุณสำหรับจุดที่ยอดเยี่ยมนี้
Noitidart

4
จากมุมมอง UX เวลาส่วนใหญ่ที่เราต้องการให้แถบเลื่อนปรากฏ ตามแนวโน้มปัจจุบันหากไม่สามารถมองเห็นแถบเลื่อนมันเป็นขั้นตอนเพิ่มเติมที่จะต้อง "ลอง" รายการที่มองเห็นได้สำหรับรายการเพิ่มเติมในรายการ เงื่อนงำภาพเพิ่มเติมที่หล่นลงหรือรายการมีรายการในนั้นไม่จำเป็นถ้าคนเห็นแถบเลื่อน
windsurf88

24
html {
    overflow-y: scroll;
}

นั่นคือสิ่งที่คุณต้องการ?

แต่น่าเสียดายที่ Opera 9.64 ดูเหมือนจะไม่สนใจว่าการประกาศ CSS เมื่อนำไปใช้HTMLหรือBODYแม้ว่ามันจะทำงานสำหรับองค์ประกอบระดับบล็อกอื่น ๆ DIVเช่น


13
html {height: 101%;}

ฉันใช้โซลูชันข้ามเบราว์เซอร์นี้ (หมายเหตุ: ฉันมักจะใช้การประกาศ DOCTYPE ในบรรทัดที่ 1 ฉันไม่รู้ว่ามันทำงานในโหมด quirksmode ไม่เคยทดสอบเลย )

สิ่งนี้จะแสดงแถบเลื่อนแนวตั้ง ACTIVEในทุก ๆ หน้าแถบเลื่อนแนวตั้งจะสามารถเลื่อนได้เพียงไม่กี่พิกเซล

เมื่อเนื้อหาของหน้าสั้นกว่าพื้นที่ที่มองเห็นของเบราว์เซอร์ (พอร์ตดู) คุณจะยังคงเห็นแถบเลื่อนแนวตั้งใช้งานอยู่และจะสามารถเลื่อนได้เพียงไม่กี่พิกเซล

ในกรณีที่คุณกำลังหมกมุ่นอยู่กับการตรวจสอบความถูกต้องของ CSS (ฉันกำลังหมกมุ่นอยู่กับการตรวจสอบความถูกต้องของ HTML เท่านั้น) โดยใช้โซลูชันนี้รหัส CSS ของคุณจะตรวจสอบความถูกต้องสำหรับ W3C เพราะคุณไม่ได้ใช้ -moz-scrollbars-vertical


1
ทางออกที่หรูหรา
Artur Keyan

12

body { height:101%; } จะ "ครอบตัด" หน้าใหญ่

ฉันใช้:

body { min-height:101%; }

1
คำถามนี้ถูกถามเมื่อ 5 ปีที่แล้วและมีคำตอบที่ยอมรับแล้ว คำตอบของคุณไม่ได้ให้คำตอบที่ดีกว่าคำตอบที่ยอมรับแล้ว
Dipen Shah

18
คำตอบนี้ให้ข้อมูลเพิ่มเติมที่ไม่ได้ให้ไว้ในคำตอบอื่น ๆ
GaTechThomas

2

ฉันสามารถทำให้มันทำงานได้โดยการเพิ่มลงในแท็ก body ดีกว่าสำหรับฉันเพราะฉันไม่มีอะไรในองค์ประกอบ html

body {
    overflow-y: scroll;
}

2

วิธีอื่นคือการตั้งค่าความกว้างขององค์ประกอบ html เป็น 100vw ในหลาย ๆ เบราว์เซอร์ส่วนใหญ่ไม่ใช่สิ่งนี้จะลบล้างผลของแถบเลื่อนที่มีต่อความกว้าง

html { width: 100vw; }

0

การตั้งค่าความสูงเป็น 101% เป็นวิธีแก้ปัญหาของฉัน หน้าเว็บของคุณจะไม่ 'สะบัด' อีกต่อไปเมื่อสลับระหว่างหน้าเว็บที่เกินความสูงวิวพอร์ตและหน้าเว็บที่ไม่มี



0

ฉันทำนี่:

html {
    margin-left: calc(100vw - 100%);
    margin-right: 0;
}

จากนั้นฉันไม่ต้องดูแถบเลื่อนสีเทาที่น่าเกลียดเมื่อไม่จำเป็น


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