前提・実現したいこと
bodyのwidth内に.tableを収めたい。
あるいはモーダル表示を途切れない様に表示させたい。
願わくば、上記両方を実現したい。
※スマホ表示の時のみ解決できてば本件の問題はクリアとなります。
目指している形は下記の画像のようにモーダルがしっかり全体が見え、操作に支障がないようにしたい。
※PC画面のwidthでの操作例となります。
発生している問題・エラーメッセージ
編集モーダルを表示させるとモーダルが途中で途切れてしまい、スクロールなどもできず、固定されている。
下記添付1画像のようにbodyのwidth内にtableが収まらないのが原因のように現在は受け取っています。
viewの.tableはbootstrap4の.tableを使用しています。
ruby
1テーブルのページです 2[edit.html.erb] 3 4<% provide(:title, '履歴') %> 5<% provide(:home, 'history') %> 6<% provide(:navbar_text, 'black') %> 7 8<div class="container"> 9 <div class="table-responsive"> 10 <div class="w-50"><%= render 'shared/flash_messages' %></div> 11 <h1 class="text-center health-top">履歴</h1> 12 13 <table class="table table-bordered table-condensed table-hover table-striped" id="table-healths"> 14 <thead> 15 <tr> 16 <th rowspan="2">日付</th> 17 <th rowspan="2">曜日</th> 18 <th colspan="2">体情報</th> 19 <th colspan="3">睡眠情報</th> 20 <th rowspan="2">水分</th> 21 <th rowspan="2">お通じ</th> 22 <th rowspan="2">編集</th> 23 </tr> 24 <tr> 25 <th>体重</th> 26 <th>体脂肪</th> 27 <th>就寝時間(前日)</th> 28 <th>起床時間</th> 29 <th>睡眠時間</th> 30 </tr> 31 </thead> 32 33 <tbody> 34 <% @healths.each do |h| %> 35 <tr> 36 <!-- 日付 --> 37 <td class='<%= css_class(h.day) %> pr-0 pl-0'><%= l(h.day, format: :short) %></td> 38 <!-- 曜日 --> 39 <td class='<%= css_class(h.day) %>'> 40 <%= $days_of_the_week[h.day.wday] %> 41 </td> 42 <!-- 体重 --> 43 <td> 44 <% if h.weight.present? %> 45 <%= h.weight %> 46 <%= 'kg' %> 47 <% end %> 48 </td> 49 <!-- 体脂肪 --> 50 <td> 51 <% if h.body_fat.present? %> 52 <%= h.body_fat %> 53 <%= '%' %> 54 <% end %> 55 </td> 56 <!-- 就寝時間 --> 57 <td> 58 <% if h.bedtime_at.present? %> 59 <%= l(h.bedtime_at, format: :short) %> 60 <% end %> 61 </td> 62 <!-- 起床時間 --> 63 <td> 64 <% if h.getuptime_at.present? %> 65 <%= l(h.getuptime_at, format: :short) %> 66 <% end %> 67 </td> 68 <!-- 睡眠時間 --> 69 <td> 70 <% if h.bedtime_at.present? && h.getuptime_at.present? %> 71 <%= sleeping_time(h, h.bedtime_at, h.getuptime_at) %> 72 <% end %> 73 </td> 74 <!-- 水分 --> 75 <td> 76 <% if h.water == true %> 77 <%= "摂取あり" %> 78 <% end %> 79 </td> 80 <!-- お通じ --> 81 <td> 82 <% if h.bowel_movement == true %> 83 <%= "あり" %> 84 <% end %> 85 </td> 86 <!-- 編集 --> 87 <td> 88 <div> 89 <% if h.day <= Date.today %> 90 <%= link_to "編集", user_healths_edit_day_path(@user.user_id, h.id), remote: true, 91 class: "btn btn-success btn-sm" %> 92 <% end %> 93 </div> 94 </td> 95 </tr> 96 <% end %> 97 </tbody> 98 </table> 99 </div> 100</div> 101 102<div id="edit_day" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"></div> 103
ruby
1モーダルページです 2[_edit_day.html.erb] 3 4<div class="modal-dialog modal-width"> 5 <div class="modal-content"> 6 <div class="modal-header"> 7 <h4 class="modal-title"><%= l(@health.day, format: :long) %>の編集</h4> 8 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 9 </div> 10 <div class="modal-body"> 11 <%= form_with model: @health, url: user_healths_update_day_path(@user, @health) do |f| %> 12 <table class="table table-bordered table-condensed table-hover table-striped health_day_table" id="table-healths"> 13 <thead> 14 <tr> 15 <th rowspan="2">日付</th> 16 <th rowspan="2">曜日</th> 17 <th colspan="2">体情報</th> 18 <th colspan="3">睡眠情報</th> 19 <th rowspan="2">水分</th> 20 <th rowspan="2">お通じ</th> 21 </tr> 22 <tr> 23 <th>体重</th> 24 <th>体脂肪</th> 25 <th>就寝時間(前日)</th> 26 <th>起床時間</th> 27 <th>睡眠時間</th> 28 </tr> 29 </thead> 30 31 <tbody> 32 <tr> 33 <!-- 日付 --> 34 <td class='<%= css_class(@health.day) %> pr-0 pl-0'><%= l(@health.day, format: :short) %></td> 35 <!-- 曜日 --> 36 <td class='<%= css_class(@health.day) %>'> 37 <%= $days_of_the_week[@health.day.wday] %> 38 </td> 39 <!-- 体重 --> 40 <td> 41 <%= f.number_field :weight, step: "0.1", class: "form-control", min: 1, max: 150, 42 autofocus: true, 43 required: true %> 44 </td> 45 <!-- 体脂肪 --> 46 <td> 47 <%= f.number_field :body_fat, step: "0.1", class: "form-control", min: 0, max: 30 %> 48 </td> 49 <!-- 就寝時間 --> 50 <td> 51 <%= f.time_field :bedtime_at, class: "form-control", 52 autofocus: true, 53 required: true %> 54 </td> 55 <!-- 起床時間 --> 56 <td> 57 <%= f.time_field :getuptime_at, class: "form-control" %> 58 </td> 59 <!-- 睡眠時間 --> 60 <td> 61 <% if @health.bedtime_at.present? && @health.getuptime_at.present? %> 62 <%= sleeping_time(@health, @health.bedtime_at, @health.getuptime_at) %> 63 <% end %> 64 </td> 65 <!-- 水分 --> 66 <td> 67 <%= f.check_box :water, {}, true, false %> 68 </td> 69 <!-- お通じ --> 70 <td> 71 <%= f.check_box :bowel_movement, {}, true, false %> 72 </td> 73 </tr> 74 </tbody> 75 </table> 76 <div class="edit-day-btn"> 77 <%= f.submit class: "btn btn-flat-border w-50" %> 78 </div> 79 <% end %> 80 </div> 81 </div> 82 </div>
scss
1// テーブル 2 3* { 4 float: none; 5 position: static; 6} 7 8img { 9 max-width: 100%; 10 height: auto; 11} 12 13#table-healths { 14 // table-layout: fixed; 15 th { 16 vertical-align: middle; 17 text-align: center; 18 } 19 td { 20 vertical-align: middle; 21 text-align: center; 22 } 23} 24 25.col-sm-12 { 26 width: 100%; 27 overflow-x: scroll; 28} 29 30.col-12 { 31 table-layout: fixed; 32} 33
試したこと
.table-responsiveを.containerと.tableのあいだに記述しすれば解決するかと思い、実践。
結果はbody内に収まるわけではなく収まらない分の.tableをスクロールで閲覧が可能となる。
また、モーダルは添付画像の様に途中から見切れてしまい、固定されてしまいます。
こちらにつきましては、bodyのwidth分しか表示されていないことが原因のように受け取ります。
他にはbodyにクラスをつけて半ば強引にwidthを調整しました。
scss
1.history { 2 width: fit-content; 3}
結果はスマホ画面の幅ではなく、PC画面サイズでの表示になる為モーダルも右隅が入りきらない状況です。
惜しいといえば惜しいのですが、スマホ画面に対応という観点では少々方向性が違う気がしています。
大変恐れ入りますが、お力をお貸しいただけますようお願い致します。
補足情報(FW/ツールのバージョンなど)
Bootstrap 4.1.1
rails 5.2.3
ruby 2.6.3
cloud9