PythonでFlaskを使ってシフト表を出力するアプリを作っています。
1ヶ月表示するので左端の名前部分と日付部分はスクロールしても固定したいと思い調べた結果
CSSにて「position: sticky;」を指定するというところは理解できました。
まず列の固定でtableの最初の項目に「fixedtable」というclassをつけて動くのを確認しました。
その後同じように行を固定しようと同じように「fixedcolumn」というclassをつけてみたところ全く動作せず詰まってしまいました。
以下の行動は試してみました。
・ググってみて「sticky」とは親要素内でしか動かないという仕組みの理解
・tbodyタグを作って「fixedcolumn」を入れて、thタグを指定してもダメ
・単独でthタグに「fixedcolumn」を入れるもダメ
・trタグに「fixedcolumn」を入れてthタグを指定するもダメ
・Bootstrapを導入しているためかと思い全てに!importantをつけてみたりもしましたが反応なし
一つのテーブルごとに1列目と2行目を固定したいというのが最終的な形となります。
不足情報などあれば追記します。
助言を頂ければと思います。
よろしくお願いします。
いただいたアドバイスを元に修正とテーブル部全体のコードも載せました。
現状やはり1行目と2行目の固定ができない状況です。
html
1 {% set n = namespace(store = '') %} 2 {% set m = namespace(shiftname = '') %} 3 {% set l = namespace(loopcnt = 1) %} 4 {% for post in posts %} 5 {% if n.store != post.store %} 6 {% if not loop.first %} 7 </tbody> 8 </table> 9 </div> 10 {% endif %} 11 <div class="table-responsive"> 12 <table class="table table-bordered border-primary"> 13 <thead class="fixedcolumn"> 14 <tr> 15 {% for store in poststore %} 16 {% if store.store_name == post.store %} 17 <th class="fixedtable" style="width: 150px;"><a href="/store?store_no={{ post.store }}">{{ store.store_name }}</a></th> 18 <th colspan={{ day_count }} style="text-align: left;">{{ store.shift_time }}</th> 19 {% endif %} 20 {% endfor %} 21 </tr> 22 <tr> 23 <th class="fixedtable">氏名</th> 24 {% for i in range(1,day_count+1) %} 25 <th style="font-size: 0.75rem;">{{ i }}日</th> 26 {% endfor %} 27 </tr> 28 </thead> 29 <tbody> 30 {% endif %} 31 {% if m.shiftname != post.name %} 32 <tr> 33 <td class="fixedtable"><a href="/name?staff_name={{post.name}}">{{ post.name }}</a></td> 34 <td>{{ post.shift }}</td> 35 {% set l.loopcnt = l.loopcnt + 1 %} 36 {% else %} 37 {% if l.loopcnt == day_count %} 38 <td>{{ post.shift }}</td> 39 </tr> 40 {% set l.loopcnt = 1 %} 41 {% else %} 42 <td>{{ post.shift }}</td> 43 {% set l.loopcnt = l.loopcnt + 1 %} 44 {% endif %} 45 {% endif %} 46 {% set m.shiftname = post.name %} 47 {% set n.store = post.store %} 48 {% endfor %} 49 </table> 50 </div>
CSS
1thead tr{ 2 height: 60px; 3} 4 5.fixedcolumn tr:first-child th { 6 position: -webkit-sticky; 7 position: sticky; 8 top: 0; 9 background-color: #202020 !important; 10 color: white !important; 11} 12 13.fixedcolumn tr:nth-child(2) th { 14 position: -webkit-sticky; 15 position: sticky; 16 top: 60px; 17 background-color: #202020 !important; 18 color: white !important; 19} 20 21.fixedcolumn tr:first-child th:first-child { 22 z-index: 1; 23} 24 25.fixedcolumn tr:nth-child(2) th:first-child{ 26 z-index: 1; 27} 28 29.fixedtable { 30 position: -webkit-sticky; 31 position: sticky; 32 left: 0; 33 background-color: #202020 !important; 34 color: white !important; 35}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/17 12:24
2021/05/17 13:30
2021/05/17 14:04