CSS เลื่อนที่กำหนดเองสำหรับ Firefox


313

ฉันต้องการปรับแต่งแถบเลื่อนด้วย CSS

ฉันใช้โค้ด CSS ของ WebKit ซึ่งทำงานได้ดีสำหรับ Safari และ Chrome:

::-webkit-scrollbar {
    width: 15px;
    height: 15px;
}

::-webkit-scrollbar-track-piece  {
    background-color: #C2D2E4;
}

::-webkit-scrollbar-thumb:vertical {
    height: 30px;
    background-color: #0A4C95;
}

ฉันจะทำสิ่งเดียวกันใน Firefox ได้อย่างไร

ฉันรู้ว่าฉันสามารถทำได้โดยใช้ jQuery แต่ฉันอยากทำด้วย CSS บริสุทธิ์ถ้าทำได้

จะขอบคุณสำหรับคำแนะนำจากผู้เชี่ยวชาญของใครบางคน!


1
โปรดแบ่งปันวิธีที่คุณสามารถทำได้โดยใช้ jQuery ฉันประสบปัญหาเดียวกัน แต่ใช้ CSS เพื่อแก้ไขสำหรับ Webkit อย่างไรก็ตาม Firefox โพสต์ปัญหาที่ jQuery solution ของคุณอาจช่วยได้
iGbanam

1
ฉันแนะนำให้ใช้ปลั๊กอิน jscrollpane jQuery
Dimitri Vorontzov

มีปัญหากับ jScrollPane ใน Firefox jScrollPane ทำงานได้อย่างสมบูรณ์แบบใน Chrome แต่ใน Firefox คุณมีแถบเลื่อนระบบที่ว่างอยู่ทางด้านขวาของแถบเลื่อน jScrollPane ควรมีหนึ่งแถบเลื่อนเท่านั้น
iGbanam

1
ไม่จริง. หากคุณมีสิ่งนั้นคุณทำสิ่งที่ผิด
Dimitri Vorontzov

ดูคำตอบของฉันได้ที่นี่: stackoverflow.com/questions/7357203/custom-scrollbars/ …
Buzinas

คำตอบ:


239

เมื่อถึงปลายปี 2561 มีการปรับแต่งที่ จำกัด ใน Firefox!

ดูคำตอบเหล่านี้:

และนี่คือข้อมูลพื้นฐาน: https://bugzilla.mozilla.org/show_bug.cgi?id=1460109


ไม่มี Firefox เทียบเท่ากับ::-webkit-scrollbarและเพื่อน ๆ

คุณจะต้องติดกับจาวาสคริปต์

ผู้คนมากมายต้องการคุณลักษณะนี้โปรดดู: https://bugzilla.mozilla.org/show_bug.cgi?id=77790


ตราบใดที่การแทนที่ JavaScript ดำเนินไปคุณสามารถลอง:


2
ขอบคุณ ThirtyDot หนึ่งคำถามว่า: -moz-Appearance: scrollbartrack-vertical - และส่วนขยาย CSS อื่น ๆ ที่เกี่ยวข้อง? บางทีพวกเขาสามารถใช้ในบางวิธี?
Dimitri Vorontzov

2
ไม่น่าเสียดายไม่มีค่าที่เป็นไปได้สำหรับการ-moz-appearanceช่วยเหลือ "The -moz-appearance CSS property is used in Gecko (Firefox) to display an element using a platform-native styling based on the operating system's theme."- คุณจะได้รับแถบเลื่อนดั้งเดิม
สามสิบ

15
ในกรณีที่ทุกคนที่อ่านสิ่งนี้ต้องการโซลูชันที่ใช้งานได้จริงฉันก็ลงเอยด้วยการใช้ปลั๊กอิน jscrollpane jQuery
Dimitri Vorontzov

1
@ JacquesMathieu ฉันเห็นว่าคุณหมายถึงอะไร แม้ว่านั่นไม่ใช่ความผิดของบารอน แต่ถ้าฉันดาวน์โหลดหน้าและป้องกันไม่ให้บารอนเริ่มต้นข้อผิดพลาดก็ยังคงเกิดขึ้น ดังนั้นดูเหมือน Chrome ผิดพลาดที่นี่
thephpdev

3
drafts.csswg.org/css-scrollbars-1เป็นขั้นตอนที่ 1 เริ่มต้นของสเปค แต่มันเปิดใช้งานใน Firefox Nightly ตอนนี้ออกจากกล่องโดยค่าเริ่มต้น
wegry

53

Firefox 64 เพิ่มการสนับสนุนสำหรับร่างข้อมูลจำเพาะCSS แถบเลื่อนโมดูลระดับ 1ซึ่งจะเพิ่มสองคุณสมบัติใหม่ของscrollbar-widthและscrollbar-colorที่ให้การควบคุมบางกว่าวิธีการเลื่อนจะมีการแสดง

คุณสามารถตั้งค่าscrollbar-colorเป็นหนึ่งในค่าต่อไปนี้ (คำอธิบายจาก MDN):

  • auto การแสดงผลแพลตฟอร์มเริ่มต้นสำหรับส่วนการติดตามของแถบเลื่อนในกรณีที่ไม่มีคุณสมบัติสีอื่น ๆ ที่เกี่ยวข้องกับแถบเลื่อน
  • dark แสดงแถบเลื่อนสีเข้มซึ่งอาจเป็นตัวแปรสีเข้มของแถบเลื่อนที่จัดทำโดยแพลตฟอร์มหรือแถบเลื่อนที่กำหนดเองที่มีสีเข้ม
  • light แสดงแถบเลื่อนแบบแสงซึ่งอาจเป็นชุดตัวเลือกแบบเลื่อนที่จัดเตรียมโดยแพลตฟอร์มหรือแถบเลื่อนแบบกำหนดเองที่มีสีอ่อน
  • <color> <color> ใช้สีแรกกับนิ้วหัวแม่มือของแถบเลื่อนแถบที่สองของแทร็กบาร์

โปรดทราบว่าdarkและlightค่าไม่ได้นำมาใช้ใน Firefox ในปัจจุบัน

บันทึก macOS:

แถบเลื่อนกึ่งโปร่งใสที่ซ่อนอัตโนมัติซึ่งเป็นค่าเริ่มต้นของ macOS จะไม่สามารถใช้สีกับกฎนี้ได้ (พวกเขายังคงเลือกสีตัดกันตามพื้นหลัง) แถบเลื่อนที่แสดงอย่างถาวรเท่านั้น (การตั้งค่าระบบ> แสดงแถบเลื่อน> เสมอ) เป็นสี

การสาธิตด้วยภาพ:

คุณสามารถตั้งค่าscrollbar-widthเป็นหนึ่งในค่าต่อไปนี้ (คำอธิบายจาก MDN):

  • auto ความกว้างของแถบเลื่อนเริ่มต้นสำหรับแพลตฟอร์ม
  • thin ตัวแปรความกว้างของแถบเลื่อนบาง ๆ บนแพลตฟอร์มที่มีตัวเลือกนั้นหรือแถบเลื่อนที่บางกว่าความกว้างของแถบเลื่อนแพลตฟอร์มเริ่มต้น
  • none ไม่แสดงแถบเลื่อน แต่องค์ประกอบจะยังคงสามารถเลื่อนได้

นอกจากนี้คุณยังสามารถตั้งค่าความยาวที่เฉพาะเจาะจงตามสเป็ค ทั้งthinความยาวและความยาวที่ระบุอาจไม่ทำอะไรบนแพลตฟอร์มทั้งหมดและสิ่งที่มันทำคือเฉพาะแพลตฟอร์ม โดยเฉพาะอย่างยิ่ง Firefox ไม่ปรากฏว่าขณะนี้สนับสนุนค่าความยาวเฉพาะ ( ความคิดเห็นนี้ในตัวติดตามบั๊กของพวกเขาดูเหมือนจะยืนยันสิ่งนี้ ) thinkeywork ไม่ปรากฏว่าได้รับการสนับสนุนอย่างดีอย่างไรกับ MacOS และการสนับสนุนของ Windows ที่น้อย

อาจเป็นที่น่าสังเกตว่าตัวเลือกค่าความยาวและscrollbar-widthคุณสมบัติทั้งหมดกำลังได้รับการพิจารณาเพื่อนำออกในร่างฉบับร่างในอนาคตและหากเกิดเหตุการณ์เช่นนี้สถานที่ให้บริการเฉพาะนี้อาจถูกลบออกจาก Firefox ในรุ่นอนาคต

การสาธิตด้วยภาพ:


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

1
สิ่งนี้ซ้ำซ้อนกับคำตอบของ Luca เมื่อสามสัปดาห์ก่อน
Josh Habdas

@JoshHabdas คำตอบนั้นไม่มีข้อมูลความเข้ากันได้หรือการใช้งานเกือบเท่ากัน ฉันสร้างคำตอบนี้เพราะคำตอบอื่นไม่มีข้อมูลสำคัญที่ฉันต้องการ
อเล็กซานเดมาร

1
คุณสามารถให้เครดิตแนะนำคำติชมหรือพิจารณาแก้ไขคำตอบ
Josh Habdas

2
@JoshHabdas เอาล่ะ 5 คนเห็นว่ามีประโยชน์แล้วและมีข้อมูลที่ไม่พบในที่อื่น ๆ บนเว็บดังนั้นฉันจึงไม่เห็นด้วย
Alexander O'Mara

43

ฉันขอเสนอทางเลือกอื่นได้ไหม

ไม่มีการเขียนสคริปต์ใด ๆ สไตล์ CSS เท่านั้นที่เป็นมาตรฐานและความคิดสร้างสรรค์เล็กน้อย คำตอบสั้น ๆ - ปกปิดส่วนต่าง ๆ ของแถบเลื่อนเบราว์เซอร์ที่มีอยู่ซึ่งหมายความว่าคุณยังคงใช้งานได้ทั้งหมด

.scroll_content {
    position: relative;
    width: 400px;
    height: 414px;
    top: -17px;
    padding: 20px 10px 20px 10px;
    overflow-y: auto;
}

สำหรับการสาธิตและคำอธิบายเชิงลึกเพิ่มเติมเล็กน้อยตรวจสอบที่นี่ ...

jsfiddle.net/aj7bxtjz/1/


7
นี่ไม่ได้ตอบคำถามโชคไม่ดี ดิมิทรีพยายามสไตล์แถบเลื่อนไม่ซ่อนมัน
stvnrynlds

14
นั่นคือ 4 ปีที่แล้ว (ฉันรู้เรื่องนี้) ดังนั้นฉันแน่ใจว่าตอนนี้เขาทำอะไรบางอย่างแล้ว แต่หัวข้อดังกล่าวยังคงมีความเกี่ยวข้องในปัจจุบัน - ในขณะที่เบราว์เซอร์อื่น ๆ อนุญาตให้ปรับเปลี่ยนแถบเลื่อน "ผิดกฎหมาย" บางประเภท FF ไม่ได้ นั่นเป็นเหตุผลที่ฉันตัดสินใจที่จะโพสต์มันและผลที่ได้จาก front-end ก็คือสไตล์ scrollbar ที่มองเห็นได้
Tomaz

ฉันรักโซลูชันนี้ยกเว้นมาร์กอัปพิเศษทั้งหมดที่มีการกำหนดตำแหน่งที่แน่นอน (ทำให้สิ่งที่ขนาดตัวแปรแปรเปลี่ยนเป็นฝันร้าย) และคุณไม่สามารถเปลี่ยนรูปแบบได้จริง ๆ คุณแค่กำบัง / ซ่อนองค์ประกอบของ scroller ที่มีอยู่ - แย่มากถ้าฉันต้องการแถบสีเขียว!
RozzA

3
ใช่หลังจากสี่ปีมันไม่ได้เกี่ยวกับการตอบคำถามของ OP เท่าที่มีส่วนร่วมในชุมชน
tmthyjames

3
สาระสำคัญของปัญหาคือการแก้ปัญหาโดยบางเครื่องมือแสดงผลไม่ได้มาตรฐาน นี่คือคำถามที่ตอบข้อกังวลของฉันได้ดีที่สุดและนี่คือคำตอบที่ฉันเลื่อนไว้
Filip Dupanović

36

ฉันคิดว่าฉันจะแบ่งปันสิ่งที่ค้นพบในกรณีที่มีคนกำลังพิจารณาปลั๊กอิน JQuery เพื่อทำงาน

ฉันเลื่อน JQuery Custom Scrollbarไป มันสวยแฟนซีและทำการเลื่อนอย่างราบรื่น (ด้วยความเฉื่อยเลื่อน) และมีพารามิเตอร์มากมายที่คุณสามารถปรับแต่งได้ แต่ท้ายที่สุดมันก็กลายเป็นซีพียูที่เข้มข้นเกินไปสำหรับฉัน

ตอนนี้ฉันกำลังให้Perfect Scrollbarไปแล้ว มันเรียบง่ายและมีน้ำหนักเบา (6KB) และมันทำงานได้ดีมาก มันไม่ได้ใช้ CPU มาก (เท่าที่ฉันสามารถบอกได้) และเพิ่มน้อยมากใน DOM ของคุณ มีเพียงสองสามพารามิเตอร์ในการปรับแต่ง (wheelSpeed ​​และ wheelPropagation) แต่ทั้งหมดที่ฉันต้องการและจัดการการอัปเดตเนื้อหาการเลื่อนได้อย่างดี (เช่นการโหลดรูปภาพ)

ป.ล. ฉันได้ดู JScrollPane อย่างรวดเร็ว แต่ @simone ถูกต้องมันเก่าไปแล้วและ PITA


3
นอกจากนี้ยังมีตัวเลียนแบบการเลื่อน trackpad - เป็นสิ่งที่ twitch.tv ใช้
forivall

1
Perfect Scrollbar นั้นดีมากจริงๆ หลังจากหมดตัวเลือกอื่น ๆ ฉันพบว่ามันเป็นทางออกที่ดีที่สุด ขอบคุณที่แนะนำ
Leonard Teo

nanoScroller ก็ดีเหมือนกันและค่อนข้างผอม jamesflorentino.github.io/nanoScrollerJSตรงข้ามกับปลั๊กอิน JS ที่หนักหน่วงตัวนี้ซ่อนเพียง scroller ดั้งเดิมและแสดง scroller อื่นโดยใช้เหตุการณ์ 'เลื่อน' ดั้งเดิม
Danny R

1
ฉันได้หลีกเลี่ยงการแก้ปัญหา jQuery ทั้งหมดเพราะพวกเขาทุกคนล้าหลังเครื่องจักรหรือเครื่องจักรที่ช้ากว่า แต่ PS ดูเหมือนว่าจะเป็นผู้ชนะ
RozzA

31

ตั้งแต่Firefox 64เป็นไปได้ที่จะใช้ข้อมูลจำเพาะใหม่สำหรับสไตล์การเลื่อนแบบง่าย ( ไม่สมบูรณ์เหมือนใน Chrome พร้อมคำนำหน้าผู้ขาย )

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

กฎสำคัญคือ:

สำหรับ Firefox

.scroller {
  overflow-y: scroll;
  scrollbar-color: #0A4C95 #C2D2E4;
}

สำหรับ Chrome

.scroller::-webkit-scrollbar {
    width: 15px;
    height: 15px;
}

.scroller::-webkit-scrollbar-track-piece  {
    background-color: #C2D2E4;
}

.scroller::-webkit-scrollbar-thumb:vertical {
    height: 30px;
    background-color: #0A4C95;
}

โปรดทราบว่าการเคารพโซลูชันของคุณเป็นไปได้ที่จะใช้กฎของ Chrome ที่ง่ายขึ้นดังต่อไปนี้:

.scroller::-webkit-scrollbar-track  {
    background-color: #C2D2E4;
}

.scroller::-webkit-scrollbar-thumb {
    height: 30px;
    background-color: #0A4C95;
}

สุดท้ายเพื่อซ่อนลูกศรในแถบเลื่อนใน Firefox ในปัจจุบันมีความจำเป็นต้องตั้งค่าเป็น " thin " ด้วยกฎต่อไปscrollbar-width: thin;


1
ดูเหมือนว่า IE 5.5 อาจได้รับบางสิ่งบางอย่างทันที :)
Josh Habdas


0

มันทำงานในสไตล์ผู้ใช้และดูเหมือนว่าจะไม่ทำงานในหน้าเว็บ ฉันไม่พบทิศทางที่เป็นทางการจาก Mozilla ในเรื่องนี้ ในขณะที่มันอาจทำงานได้ในบางจุด Firefox ไม่ได้รับการสนับสนุนอย่างเป็นทางการสำหรับเรื่องนี้ ข้อผิดพลาดนี้ยังคงเปิดอยู่https://bugzilla.mozilla.org/show_bug.cgi?id=77790

scrollbar {
/*  clear useragent default style*/
   -moz-appearance: none !important;
}
/* buttons at two ends */
scrollbarbutton {
   -moz-appearance: none !important;
}
/* the sliding part*/
thumb{
   -moz-appearance: none !important;
}
scrollcorner {
   -moz-appearance: none !important;
   resize:both;
}
/* vertical or horizontal */
scrollbar[orient="vertical"] {
    color:silver;
}

ตรวจสอบhttp://codemug.com/html/custom-scrollbars-using-css/ สำหรับรายละเอียด


2
ฉันพยายามเช่นเดียวกับที่คุณเขียน แต่มันไม่ทำงานสำหรับ FF ของฉันตรวจสอบjsfiddle.net/gGbkY/1 ฉันทำอะไรหายไปหรือไม่?
Satinder singh

มันทำงานในสไตล์ผู้ใช้และดูเหมือนว่าจะไม่ทำงานในหน้าเว็บ ฉันไม่พบทิศทางที่เป็นทางการจาก Mozilla ในเรื่องนี้
ipirlo

1
โปรดตรวจสอบลิงก์เดียวกัน: มันไม่ทำงานอีกต่อไป
Krunal Shah

3
สไตล์ผู้ใช้คืออะไร
Marecky

รายงานข้อบกพร่องที่คุณเชื่อมโยงเมื่อ 17 ปีที่แล้วและยังไม่ได้รับมอบหมาย ฉันคิดว่ามันปลอดภัยที่จะบอกว่า FF จะไม่สนับสนุนการซ่อนแถบเลื่อนดั้งเดิม
Sterling Bourne

-2
@-moz-document url-prefix(http://),url-prefix(https://) {
    scrollbar {
       -moz-appearance: none !important;
       background: rgb(0,255,0) !important;
    }
    thumb,scrollbarbutton {
       -moz-appearance: none !important;
       background-color: rgb(0,0,255) !important;
    }

    thumb:hover,scrollbarbutton:hover {
       -moz-appearance: none !important;
       background-color: rgb(255,0,0) !important;
    }
    scrollbarbutton {
       display: none !important;
    }
    scrollbar[orient="vertical"] {
      min-width: 15px !important;
    }
}

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