Membuat bilah gulir utama selalu terlihat

179

CSS apa yang diperlukan untuk membuat scrollbar vertikal browser tetap terlihat ketika pengguna mengunjungi halaman web (ketika halaman tidak memiliki cukup konten untuk memicu aktivasi scrollbar)?

Deniz Dogan
sumber
1
Untuk mencegah lompatan scrollbar di Windows ada solusi yang lebih baik .
Josh Habdas

Jawaban:

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

Ini membuat bilah gulir selalu terlihat dan hanya aktif bila diperlukan.

Pembaruan: Jika cara di atas tidak berhasil, gunakan saja ini.

html {
    overflow-y:scroll;
}
Corv1nus
sumber
3
Apakah Anda tahu versi FF apa yang didukung overflow-y? Seperti yang -moz-scrollbars-verticalsudah usang mendukung overflow-yproperti.
Ionuț G. Stan
Saya pikir Internet Explorer 6.x +, Firefox 1.5+ jika saya ingat dengan benar. Saya telah menggunakan kode di atas dan berfungsi di FF1.5-3.5.1 dan IE6-8 untuk saya.
Corv1nus
2
Apakah ada alternatif untuk "melompat halaman" ketika halaman tertentu di situs Anda terlalu kecil untuk memiliki bilah gulir dan yang lainnya? Atau apakah ini "praktik terbaik"? Saya harus mengakui, saya tidak melihat banyak halaman di web yang tidak memakan satu halaman penuh.
Jess
2
Saya tidak yakin apakah ini praktik terbaik tetapi, memiliki bilah gulir di semua halaman, dan hanya aktif bila perlu, untuk menghindari lompatan halaman biasanya merupakan solusi yang dapat diterima. Saya cenderung lebih suka scrollbar konstan daripada lompatan.
Corv1nus
1
Bagi mereka (seperti saya) yang menemukan gaya htmlsedikit hack-y , perhatikan bahwa Anda dapat menggunakan pemilih struktural semu :rootsebagai ganti html. Lihat: developer.mozilla.org/en-US/docs/Web/CSS/:root
Rounin
31

Pastikan overflow diatur ke "gulir" bukan "otomatis." Dengan mengatakan itu , di OS X Lion, overflow yang diatur ke "scroll" berperilaku lebih seperti auto di scrollbar yang masih hanya akan ditampilkan ketika sedang digunakan. Jadi, jika ada solusi di atas tampaknya tidak berhasil itu mungkin sebabnya.

Inilah yang harus Anda perbaiki:

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

Anda dapat mengaturnya dengan gaya jika Anda tidak menyukai default.

molls223
sumber
1
Benda ini bekerja! Tetapi bagaimana Anda bisa membuatnya hanya pada div tertentu?
Kaya
@ Kaya sama seperti elemen css lainnya. .yourdiv :: - webkit-scrollbar {...}
Kris
@ Kris Hai, terima kasih atas jawabannya, ini contohnya. stackoverflow.com/a/54667091/2637261
Kaya
Mengapa ini digunakan-webkit-appearance: none;
Suraj Jain
Ini bagus! Seharusnya jawaban yang diterima.
Cyberpunker
25

Banyak hal telah berubah dalam beberapa tahun terakhir. Jawaban di atas tidak berlaku lagi dalam semua kasus. Apple mendorong bilah gulir yang menghilang di mana-mana. Safari, Chrome, dan bahkan Firefox di MacO (dan iO) hanya menampilkan scrollbar ketika benar-benar bergulir - Saya tidak tahu tentang Windows / IE saat ini. Namun ada cara-cara non-standar untuk menata bilah gulir di Webkit (yaitu IE yang sudah lama tidak digunakan).

Frank Lämmer
sumber
tapi itu menurun anggun di yang baru?
Ben
3
Terima kasih atas poin luar biasa ini pada scrollbar yang menghilang. Bagi saya alasan untuk menjaga scrollbar terlihat adalah untuk menghindari brengsek yang sedikit tetapi sangat mencolok dan sangat menjengkelkan karena konten berubah dari memiliki scroll menjadi tidak. Dengan scrollbar yang menghilang, mereka tidak menyentak tubuh ketika mereka menunjukkan dan menyembunyikannya, jadi tidak masalah bagi saya. Tapi terima kasih untuk poin yang luar biasa ini.
Noitidart
4
Dari sudut pandang UX, sering kali kita ingin bilah gulir terlihat. Per tren saat ini, Jika bilah gulir tidak terlihat, itu adalah langkah tambahan untuk harus "mencoba" daftar yang terlihat untuk lebih banyak dalam daftar. Petunjuk visual tambahan bahwa drop down atau daftar memiliki lebih banyak item di dalamnya tidak diperlukan jika orang melihat scrollbar.
windsurf88
24
html {
    overflow-y: scroll;
}

Itukah yang kamu inginkan?

Sayangnya, Opera 9.64 tampaknya mengabaikan deklarasi CSS itu ketika diterapkan pada HTMLatau BODY, meskipun itu berfungsi untuk elemen tingkat blok lainnya DIV.

Ionuț G. Stan
sumber
13
html {height: 101%;}

Saya menggunakan solusi lintas browser ini (catatan: Saya selalu menggunakan deklarasi DOCTYPE di baris 1, saya tidak tahu apakah itu berfungsi di quirksmode, tidak pernah mengujinya ).

Ini akan selalu menampilkan bilah gulir vertikal AKTIF di setiap halaman, bilah gulir vertikal hanya dapat digulir beberapa piksel.

Ketika konten halaman lebih pendek dari area yang terlihat oleh browser (port tampilan) Anda masih akan melihat scrollbar vertikal aktif, dan itu hanya dapat digulir beberapa piksel.

Jika Anda terobsesi dengan validasi CSS (Saya hanya terobsesi dengan validasi HTML) dengan menggunakan solusi ini, kode CSS Anda juga akan divalidasi untuk W3C karena Anda tidak menggunakan atribut CSS standar seperti -moz-scrollbars-vertical

Marco Demaio
sumber
1
Solusi elegan
Artur Keyan
12

body { height:101%; } akan "memotong" halaman yang lebih besar.

Sebagai gantinya, saya menggunakan:

body { min-height:101%; }
Scott
sumber
1
Pertanyaan ini ditanyakan 5 tahun yang lalu dan sudah memiliki jawaban yang diterima. Jawaban Anda tidak memberikan jawaban yang lebih baik daripada jawaban yang sudah diterima.
Dipen Shah
18
Jawaban ini sebenarnya memberikan informasi tambahan yang tidak disediakan dalam jawaban lain.
GaTechThomas
2

Saya bisa membuatnya berfungsi dengan menambahkannya ke tag tubuh. Lebih baik untuk saya karena saya tidak punya apa-apa di elemen html.

body {
    overflow-y: scroll;
}
Jazzepi
sumber
2

Pendekatan alternatif adalah mengatur lebar elemen html ke 100vw. Pada banyak, jika tidak sebagian besar browser, ini meniadakan efek scrollbar pada lebar.

html { width: 100vw; }
Lunelson
sumber
0

Pengaturan tinggi hingga 101% adalah solusi saya untuk masalah ini. Halaman Anda tidak akan lagi 'jentik' saat beralih di antara yang melebihi tinggi viewport dan yang tidak.

Korps Sanjaal
sumber
0
body { 
    min-height: 101vh; 
} 

bekerja yang terbaik untukku

Lolo
sumber
0

Saya melakukan ini:

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

Maka saya tidak perlu melihat scrollbar abu-abu jelek ketika itu tidak diperlukan.

Stian
sumber
Pertanyaannya meminta agar selalu terlihat.
Corv1nus