Katakanlah Anda memiliki ini:
html, body {margin: 0; padding: 0}
.box {width: 100vw; height: 100vh}
<div class="box">Screen 1</div>
Anda akan mendapatkan sesuatu yang memenuhi layar, tanpa scrollbar. Tapi tambahkan yang lain:
<div class="box">Screen 1</div>
<div class="box">Screen 2</div>
Anda tidak hanya mendapatkan scrollbar vertikal (diharapkan), tetapi sedikit scroll horizontal.
Saya menyadari Anda bisa menghilangkan lebarnya, atau mengaturnya menjadi lebar: 100%, tapi saya penasaran mengapa ini terjadi. Bukankah 100vw seharusnya "100% dari lebar viewport"?
Jawaban:
Seperti yang telah dijelaskan oleh wf4, scroll horizontal hadir karena scroll vertikal. yang dapat Anda selesaikan dengan memberi
max-width: 100%
..box { width: 100vw; height: 100vh; max-width:100%; /* added */ }
Bekerja Fiddle
sumber
max-width: 100%
lebar viewport tanpa scrollbar, maka Anda tidak perlu100vw
di tempat pertama :-) Anda bisa saja menggunakanwidth: 100%
karena elemen tidak memiliki leluhur yang diposisikan, jadi referensinya adalah badan.scrollbar akan dimasukkan
vw
sehingga scroll horizontal akan ditambahkan untuk memungkinkan Anda melihat di bawah scroll vertikal.Jika Anda hanya memiliki 1 kotak, lebar 100% x tinggi 100%. Setelah Anda menambahkan 2, lebar 100% x tinggi 200%, oleh karena itu memicu scrollbar vertikal. Saat bilah gulir vertikal dipicu, itu kemudian memicu bilah gulir horizontal.
Anda bisa menambahkan
overflow-x:hidden
kebody
html, body {margin: 0; padding: 0; overflow-x:hidden;} .box {width: 100vw; height: 100vh; background-color:#ff0000} .box2 {width: 100vw; height: 100vh; background-color:#ffff00}
http://jsfiddle.net/NBzVV/
sumber
max-width:100%
ke.box
akan mencegahnya.overflow
bahkan jika Anda menambahkannya ke halx
-postition: sticky
hal yang tidak ada yang akan berfungsi.Saya memiliki masalah serupa dan menemukan solusi berikut menggunakan variabel JS dan CSS.
JS:
function setVw() { let vw = document.documentElement.clientWidth / 100; document.documentElement.style.setProperty('--vw', `${vw}px`); } setVw(); window.addEventListener('resize', setVw);
CSS:
width: calc((var(--vw, 1vw) * 100);
1vw adalah nilai fallback.
sumber
Pembaruan: Pada Chrome versi 66, saya tidak dapat mereproduksi perilaku yang dilaporkan oleh pertanyaan lagi. Tampaknya tidak ada solusi yang diperlukan.
Jawaban Asli
Ini sebenarnya adalah bug seperti yang dilaporkan dalam jawaban ini dan komentar di atas.
Sementara solusi dalam jawaban yang diterima (menambahkan
.box {max-width: 100%;}
) umumnya berfungsi, saya merasa perlu dicatat bahwa saat ini tidak berfungsi untukdisplay:table
(diuji di Chrome). Dalam hal ini, satu-satunya solusi yang saya temukan adalah menggunakanwidth:100%
sebagai gantinya.display:table
display:table
danwidth:100%
sumber
max-width: 100%
. Saya mengusulkanwidth: 100vw
untuk berubah menjadiwidth: 100%
. Saya memperbarui jawaban saya menjadi mandiri.untuk menghilangkan lebar scrollbar yang termasuk dalam vw saya harus melakukan ini:
html, body { overflow-x: hidden; height: 100vh; }
sumber
*, html, body { margin: 0; padding: 0; overflow: hidden;/*add This*/ } /*and enjoy ^_^ */
sumber