css sticky すごい便利
◆ カラムの親を display:flex; align-items: flex-end; にしてカラムを bottom: 0;
◆ これでスクロールし終えたら長いのに合わせてついてきてくれるサイドバーの完成
◆ これでスクロールし終えたら長いのに合わせてついてきてくれるサイドバーの完成
前のバージョン(56)で Chrome が CSS の position: sticky; に対応しました
最初はページ途中にあるヘッダ部分を途中から fixed にしてついてくるようにしたいときに使うもの と思ってたのですが float で並べたサイドバーでもいけるみたい
ブログのサイドバーとかはこれにしようかな って考えて試してみてるとスクロールに対応してない問題がありました
最後までスクロールしないとサイドバーの下の方を見れないのは不便で そこまで万能じゃないのかなあと思ってたのですが flexbox 使えば可能でした
CSS は自分でこう組み合わせたらいけるんじゃないかな と思ったのを試してみるとけっこう動いてくれるので試しながら使ってるのが楽しいですよね
ページ内のテーブルヘッダがついてくるのはよく見かけるかと思います
あれが簡単に書けます
個人的にそれよりもいいなと思ったのは チャットツールの日付みたいな見出しが気持ち良い感じに切り替わるところ
サンプル
[html]
こういう HTML で
[css]
こうするだけでいい感じに日付部分が切り替わってくれます
サンプル
[html]
この HTML に
[css]
これで短い方のカラムが途中からなくなることはなくなります
.column にスタイル指定して両方のカラムが sticky なのでブログの本文がサイドバーよりも長いときと短いときどっちでも対応できます
注意するところは section:after で指定してる clearfix
clear:both; をしないといけなくて section に overflow: hidden; する方法だと動きませんでした
この方法の一番の問題は短い方はスクロールせずに常に一番上の状態でついてくること
こういうことになります
右側が短くて 10 行以上はあります
なのに左側が最後になるまでずっと 1 行目が表示され続けます
右側の一番下を見るには長い方の左側の最後までスクロールが必要です
ほしかったものは 短い方の一番下に達するまでは 普通のページのようにスクロールして 短いほうが終わったらそのままの状態を維持してくれるものです
sticky-kit の 「Scrollable Sticky Element」 のサンプルが目的のものです
今の sticky だと一番下まで行って 上にスクロールした時がその動きになります
逆なので top じゃなく bottom ? と単純に考えてみたのですが bottom にすると固定されなくなるだけで動かなくなりました
サンプル
さっき同じ HTML で CSS だけ変更します
[css]
こっちでは clearfix の代わりに align-items に注意が必要です
align-items を指定しないとデフォルトの stretch になっていてカラムの高さが一緒になります
なので flex-start を指定して上に来るようにします
align-items を flex-end にしたら bottom と組み合わせていけるんでは? と思って試してみたら動きました
サンプル
[css]
最初のスクロールは 両方同じようにスクロールします
短い右側が下までいくと左だけのスクロールになります
ただ今度は 上に戻るときには 長い方の一番上までスクロールしないといけません
sticky-kit のようなスクロールできたらスクロールして できないならついてくる って言うわけにはいきません
まぁ上に行くことはそうないから別にいいかな
近いうちにブログテンプレートを変更しよ
最初はページ途中にあるヘッダ部分を途中から fixed にしてついてくるようにしたいときに使うもの と思ってたのですが float で並べたサイドバーでもいけるみたい
ブログのサイドバーとかはこれにしようかな って考えて試してみてるとスクロールに対応してない問題がありました
最後までスクロールしないとサイドバーの下の方を見れないのは不便で そこまで万能じゃないのかなあと思ってたのですが flexbox 使えば可能でした
CSS は自分でこう組み合わせたらいけるんじゃないかな と思ったのを試してみるとけっこう動いてくれるので試しながら使ってるのが楽しいですよね
sticky header
よくある例のヘッダーがついてくるやつページ内のテーブルヘッダがついてくるのはよく見かけるかと思います
あれが簡単に書けます
個人的にそれよりもいいなと思ったのは チャットツールの日付みたいな見出しが気持ち良い感じに切り替わるところ
サンプル
[html]
<h1>4/1</h1>
<section>
<div>ながーいテキスト</div>
</section>
<h1>4/2</h1>
<section>
<div>ながーいテキスト</div>
</section>
<h1>4/3</h1>
<section>
<div>ながーいテキスト</div>
</section>
<h1>4/4</h1>
<section>
<div>ながーいテキスト</div>
</section>
こういう HTML で
[css]
h1 {
position: sticky;
top: 0;
}
こうするだけでいい感じに日付部分が切り替わってくれます
sticky sidebar
次にサイドバーサンプル
[html]
<section>
<main class="column">
<div>ながあぁあいテキスト</div>
<div>ながあぁあいテキスト</div>
</main>
<aside class="column">
<div>ながあぁあいテキスト</div>
</aside>
</section>
この HTML に
[css]
section:after{
content: "";
display: block;
clear: both;
}
.column{
width: 50%;
float: left;
position: sticky;
top: 0px;
}
これで短い方のカラムが途中からなくなることはなくなります
.column にスタイル指定して両方のカラムが sticky なのでブログの本文がサイドバーよりも長いときと短いときどっちでも対応できます
注意するところは section:after で指定してる clearfix
clear:both; をしないといけなくて section に overflow: hidden; する方法だと動きませんでした
この方法の一番の問題は短い方はスクロールせずに常に一番上の状態でついてくること
こういうことになります
右側が短くて 10 行以上はあります
なのに左側が最後になるまでずっと 1 行目が表示され続けます
右側の一番下を見るには長い方の左側の最後までスクロールが必要です
ほしかったものは 短い方の一番下に達するまでは 普通のページのようにスクロールして 短いほうが終わったらそのままの状態を維持してくれるものです
sticky-kit の 「Scrollable Sticky Element」 のサンプルが目的のものです
今の sticky だと一番下まで行って 上にスクロールした時がその動きになります
逆なので top じゃなく bottom ? と単純に考えてみたのですが bottom にすると固定されなくなるだけで動かなくなりました
sticky sidebar flex
上では float でしたが flexbox でも使えますサンプル
さっき同じ HTML で CSS だけ変更します
[css]
section{
display: flex;
align-items: flex-start;
}
.column{
width: 50%;
flex: none;
position: sticky;
top: 0px;
}
こっちでは clearfix の代わりに align-items に注意が必要です
align-items を指定しないとデフォルトの stretch になっていてカラムの高さが一緒になります
なので flex-start を指定して上に来るようにします
スクロールさせる
これだと float のときと一緒で 長い方の最後までスクロールしないと短い方の最後が見えませんalign-items を flex-end にしたら bottom と組み合わせていけるんでは? と思って試してみたら動きました
サンプル
[css]
section{
display: flex;
align-items: flex-end;
}
.column{
width: 50%;
flex: none;
position: sticky;
bottom: 0px;
}
最初のスクロールは 両方同じようにスクロールします
短い右側が下までいくと左だけのスクロールになります
ただ今度は 上に戻るときには 長い方の一番上までスクロールしないといけません
sticky-kit のようなスクロールできたらスクロールして できないならついてくる って言うわけにはいきません
まぁ上に行くことはそうないから別にいいかな
近いうちにブログテンプレートを変更しよ