CSS でtableの一部をsticky ... 使えないの続編
tableの中でスクロールさせる部分と固定させる部分を分けるときにCSSでposition: stickyを指定するというのを調べていたという記事の続き,
上を固定してみた。
どのHTML / CSSの参考サイトも指定のtdかth要素をstickyにするか,absoluteにするかでスクロールに対して止めていた。
参考を見ながら試してみたコードはセルだけが固定された。
また試しのコードを作ってみた。
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, user-scalable=yes"> <style> html { height:100%; } body { height: 100%; margin: 0; padding:0; height: 100%; } #wrapper { overflow: scroll; width: 100%; height:100%; } #wrapper2 { position:absolute; top:0; left:0; overflow: hidden; width: 373px; height: 97.5vh; z-index:4; } #wrapper3 { position:absolute; top:0; left:0; overflow: hidden; width: 97.5vw; height: 34px; z-index:4; } table { table-layout;fixed; border-collapse: collapse; } thead th { background-color: #4a4aff; color: white; width: 300px; height: 10px; position: -webkit-sticky; position: sticky; top: 0; z-index: 1; box-sizing: border-box; border:1px solid white; } thead { position: -webkit-sticky; position: sticky; top: 0; z-index: 2; } thead th.blank { position: -webkit-sticky; position: sticky; top: 0; left: 0; z-index: 3; } td { text-align: center; box-sizing: border-box; background-color: #efefff; width: 300px; height: 70px; border: 1px solid black; } tr:nth-of-type(2n+1) td { background-color: #ffffff; } td:nth-of-type(1) { position: sticky; left:0px; } th:nth-of-type(1) { position: sticky; left:0px; z-index:3; } td:nth-of-type(2) { position: sticky; left:122px; } th:nth-of-type(2) { position: sticky; left:122px; z-index:3; } td:nth-of-type(3) { position: sticky; left:244px; } th:nth-of-type(3) { position: sticky; left:244px; z-index:3; } tr { height:20px; } .fixed { position: fixed; } .header { width:120px; height:30px; } </style> </head> <body> <div id="wrapper"> <table> <colgroup span="3" style="border-right:2px solid black;"> <colgroup span="7"> <thead> <tr><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th></tr> </thead> <tbody> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> </tbody> </table> </div> <div id="wrapper2"> <table> <colgroup span="3" style="border-right:2px solid black;"> <colgroup span="7"> <thead> <tr><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th></tr> </thead> <tbody> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> </tbody> </table> </div> <div id="wrapper3"> <table> <colgroup span="3" style="border-right:2px solid black;"> <colgroup span="7"> <thead> <tr><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th><th><div class="header">TEST</div></th></tr> </thead> <tbody> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> <tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr> </tbody> </table> </div> </body> </html>
オーバーレイ表示をすることで確かにヘッダだけ固定された。
コラムが今度は固定を追加した。
そして,スクロールバーのサイズは固定とみなしている。100%いっぱいに広げてしまうとスクロールバーが隠れてしまう。
せっかくとあるJavaScriptフレームワークの学習を始めたのにjqueryでグリグリいじりまくるコーディングに逆戻り…
やっぱりjQueryが手放せない。
jqueryでスクロールイベントに合わせてコラムだけを表示している側をスクロールする対応が必要