Bootstrap 4でtable-responsiveが効かなくなったのはなぜ?
かなりニッチな記事だと思いますが、Bootstrap 3を使っていた人がBootstrap
4に移行した時にtable-responsiveが効かなくなった方向けの記事です。
2時間近くハマったので他の人が同じ轍を踏まないように共有します。
原因:white-space:nowrapの指定が無くなったから
Bootstrap 3の.table-responsive
の時にはこんなcss記述がありました。
@media screen and (max-width: 767px)
.table-responsive>.table>tbody>tr>td,
.table-responsive>.table>tbody>tr>th,
.table-responsive>.table>tfoot>tr>td,
.table-responsive>.table>tfoot>tr>th,
.table-responsive>.table>thead>tr>td,
.table-responsive>.table>thead>tr>th {
white-space: nowrap;
}
white-space: nowrap;
は改行をしなくするための記述です。
この記述がBootstrap 4では無いので、日本語は自動的に改行されてしまうのです。
そのため、table
の幅が.table-responsive
に収まってしまい、レスポンシブ表示がされないのです。
英語の場合は単語単位では改行されないため、満足な幅がでるようです。
対策:thにだけwhite-spaceを指定する
これだけ。
.table-responsive th {
white-space: nowrap;
}
tdは自動で改行されるので、tdの幅を調節したい場合は、thの要素内にスペースを追加してあげれば調節できます。
調節方法は個人的には気持ち悪いけど、いろいろやった結果一番最適解な気がする。
他の対策方法としてはtable
要素にtable-layout:
をかけて
fixedtd
にインラインでwidth
を指定する方法もあるけど、インラインstyle指定はできれば使いたくないので、スペースが一番良いように思います。
ついでにUIの改善も
.table-responsiveはスマホで見るとパッと見スクロールできるかがわからないので、良く以下の記述を追加してます。
@media screen and (max-width: 575px) { //スマホだけ適用
/* 枠線を表示する /
.table-responsive {
border: 1px solid #eee;
}
/ スクロールできることを明示する /
.table-responsive::before {
font-size: 12px;
display: block;
padding: 5px 5px 5px 15px;
content: ‘表は左右にスクロールできます’;
color: #999;
}
/ iPhoneのtable-responsiveの時にスクロールバーを表示する */
.table-responsive::-webkit-scrollbar {
height: 5px;
}
.table-responsive::-webkit-scrollbar-track {
border-radius: 5px;
background: #eee;
}
.table-responsive::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #666;
}
}