scrollbar-widthプロパティ
まだすべてのブラウザで安定して使用できるわけではありませんが、scrollbar-widthプロパティを用いることが可能です。ブラウザによってはこのプロパティを使う際にプレフィックスが必要な場合もあるため、対応したいブラウザによってCan I useをみながら対応をしてください。
以下のコードは、Firefoxの最新版で動作します。
HTML
1<div>
2
3 <div class="main">
4 <ul>
5 <li></li>
6 <li></li>
7 <li></li>
8 </ul>
9 </div>
10
11 <div class="side">
12 <ul>
13 <li></li>
14 <li></li>
15 <li></li>
16 </ul>
17 </div>
18
19</div>
CSS
1* {
2 margin: 0;
3 padding: 0;
4 list-style: none;
5}
6
7div {
8 display: flex;
9 height: 100vh;
10}
11
12.main,
13.side {
14 background: pink;
15 width: 50%;
16 margin: 10px;
17 padding: 15px;
18}
19
20.main {
21 height: 1000px;
22}
23
24.side {
25 overflow-y: scroll;
26 height: 200px;
27 scrollbar-width: none;
28}
29
30ul {
31 width: 100%;
32}
33
34li {
35 background: red;
36 margin: 10px;
37 text-align: center;
38 height: 500px;
39}
絶対配置
絶対配置によってスクロールバーの幅分だけ要素をずらして、スクロールバーを隠す方法です。しかし、スクロールバーの幅を取得する手段がないので、ここには固定の値を設定しないといけません。なので、ブラウザによってはちゃんとスクロールバーが隠れないことがあります。そういう場合を防ぐために対応ブラウザを用いたテストを行う必要が生じます。
このコードはFirefoxで動作します。
HTML
1<div>
2
3 <div class="main">
4 <ul>
5 <li></li>
6 <li></li>
7 <li></li>
8 </ul>
9 </div>
10
11 <div class="wrapper">
12 <div class="side">
13 <ul>
14 <li></li>
15 <li></li>
16 <li></li>
17 </ul>
18 </div>
19 </div>
20
21</div>
CSS
1* {
2 margin: 0;
3 padding: 0;
4 list-style: none;
5}
6
7
8div {
9 display: flex;
10 height: 100vh;
11}
12
13.main,
14.wrapper {
15 background: pink;
16 width: 50%;
17 margin: 10px;
18 padding: 15px;
19}
20
21.main {
22 height: 1000px;
23}
24
25.wrapper {
26 overflow: hidden;
27 position: relative;
28 height: 200px;
29}
30
31.side {
32 height: 200px;
33 overflow-y: scroll;
34 position: absolute;
35 top: 0;
36 bottom: 0;
37 left: 0;
38 right: -17px;
39 padding: 15px;
40}
41
42ul {
43 width: 100%;
44}
45
46li {
47 background: red;
48 margin: 10px;
49 text-align: center;
50 height: 500px;
51}
追記を受けて
できればブラウザによって挙動が変わったりしないような処理がありましたらお願い致します。
であれば、JavaScriptを使ってください。現状のCSSで使える機能だけではそれらを保障することは出来ません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。