2023/08/31備忘録css

テーブルの横スクロールバーを上にも設置したい

スマホでテーブルを横スクロールで表示させる場合に、テーブルの高さが高すぎて、ウィンドウに表示されないほど下にある場合、テーブル下のスクロールバーが上にもあったら便利ですよね。

それをかなえるハックがいくつかあります。

1. transformで上に移動させる

親要素(スクロールバーが付いてる要素)を半回転させ、中身の要素をさらに半回転させることによりスクロールバーを上に持ってきます。
ただし、子要素でposision:absoluteで要素を固定していると、上手くいきません。

.
.wrapper {
  width: 300px;
  overflow-x: scroll;
  transform: rotateX(180deg);
}
.content {
  background-color: aqua;
  width: 600px;
  transform: rotateX(180deg);
}

2. スクロールバーを付け足す

現状のDOMの構成をなるべく崩さずに調整できます。

.
.wrapper {
   width: 300px;
   overflow-x: scroll;
}

.content {
  background-color: aqua;
  width: 600px;
}

.scrollbar {
  width: 300px;
  height: 10px;
  overflow-x: scroll;
  overflow-y: hidden;
}

.inner {
  height: 1px;
  width: 600px;

const targetClasses = ['wrapper', 'scrollbar']

for(const targetClass of targetClasses) {
	document.querySelector(`.${targetClass}`).addEventListener('scroll', function () {
  	const otherClass = this.className.includes(targetClasses[0]) ? targetClasses[1] : targetClasses[0];
    console.log(otherClass)
    const left = document.querySelector(`.${targetClass}`).scrollLeft;
    document.querySelector(`.${otherClass}`).scrollTo(left, 0);
  })
}

テーブルの上部に仮のdivタグを設置して、テーブルと同じ固定幅をcssで設定することで、いかにも下のテーブルのために動いているようにみせることもできるのですが、テーブルが固定幅の場合に限られますし、いずれも一長一短です。HTMで実装をお願いしたいところです。