-webkit-overflow-scrolling 要らなくなってる
◆ -webkit-overflow-scrolling をつけると範囲外表示できないバグがあった
◆ 今も直ってない
◆ だけどなくてもデフォルトでなめらかにスクロールするから付ける必要がなくなった
◆ 今も直ってない
◆ だけどなくてもデフォルトでなめらかにスクロールするから付ける必要がなくなった
-webkit-overflow-scrolling
以前の iOS ではページ全体のスクロールはなめらかでしたが要素内のスクロールはすごくカクカクしてました要素内のスクロールは 適当な要素に overflow: scroll をつけて要素内でスクロール可能にしたものです
それの対処方法に -webkit-overflow-scrolling: touch を指定するというのがあります
これを指定すると要素内のスクロールでもなめらかにできました
しかし このスタイルにはバグが多いと報告されていて 私が困ったものだと このスタイルをつけた要素の外側に描画できないというものがあります
スクロールエリアの中の要素で position: fixed を使って画面全体にダイアログ表示するなどすると スクロールエリアの外側が表示されません
通常はこう表示されるものが
こうなります
このページの HTML はこれです
プレビューから実際に確認できます
<!doctype html>
<meta name="viewport" content="width=1000">
<style>
#window {
width: 400px;
height: 300px;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
margin: 100px auto;
border: 1px solid silver;
}
li {
height: 40px;
border-bottom: 1px solid #f0f0f0;
}
:checked+.detail {
display: block;
position: fixed;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
background: rgba(0,0,0,0.5);
}
.body {
width: 700px;
margin: 30px auto;
padding: 20px;
background: white;
font-size: 30px;
}
</style>
<div id="window">
<ul>
<template id="tpl">
<li>
<span class="text">text text text text text...</span>
<button class="button">Detail</button>
<input type="checkbox" hidden>
<div class="detail" hidden>
<div class="body">
ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
ABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
</div>
</div>
</li>
</template>
</ul>
</div>
<script>
const tpl = document.querySelector("#tpl")
for (let i = 0; i < 20; i++) {
tpl.parentElement.append(tpl.content.cloneNode(true))
}
document.querySelector("#window").onclick = eve => {
if (eve.target.classList.contains("button")) {
const input = eve.target.nextElementSibling
input.checked = !input.checked
}
if(eve.target.closest(".detail")){
const dt = eve.target.closest(".detail")
dt.previousElementSibling.checked = false
}
}
</script>
いらなくなってる
前回確認したのはたしか iOS 11 くらいの頃でしたそろそろ直ってないか iPadOS 13.3 で確認してみると このバグは相変わらずでした
しかし -webkit-overflow-scrolling: touch の指定がなくてもなめらかにスクロールするようになっています
デフォルトでなめらかスクロールなのでこのスタイルは不要です
外せばバグも起きずうまく動きます
確認は iPadOS なので 普通の iOS でも直ってるかは未確認です
ちなみに要素内スクロールがカクカクするのは iOS でだけ発生していて Android だと問題なくスクロールできます
Android ではこの CSS 自体がありません