当社の簡易IoTシステムでは、Webブラウザで「装置の稼働履歴」を表示することができます。
この「稼働履歴」では、装置の1ヶ月分の稼働履歴を、縦軸を「日」、横軸を「時間」として、時系列に表形式で表示していますが、この表示にはHTMLのtableを使用しています。
この表示を、現在より細かく(例えば、セルの横幅を1ピクセルに)しようとした時に、色々と対応が必要になったので、その内容をまとめておきます。
サンプルとしたHTMLは以下のとおりです。
<table class="test"> <tr> <td class="title" rowspan=20>テスト</td> <td class="data" bgcolor="yellow"></td> <td class="data" bgcolor="yellow"></td> : : これを、横に1440セル、縦に20セル分くりかえす。 : <td class="data" bgcolor="yellow"></td> </tr> <tr> <td></td> <td colspan="60">0</td> <td colspan="60">1</td> : <td colspan="60">23</td> </tr> </table>
左端に横幅100ピクセルのタイトル、その右横に、縦横1ピクセルのセルを、横に1440個、縦に20個、隙間なしに並べたいと思います(ピクセルアートを描くようなイメージです)。
まずは、CSSとして、以下を準備しました。
.test{ border: solid 1px gray; } .data{ width: 1px; height: 1px; } .title{ width: 100px; }
結果は以下のようになりました。セル間に隙間ができており、タイトルも横幅が狭くなってしまっています。
CSSを、以下のように修正しました。
.test{ border: solid 1px gray; border-collapse: collapse; } .data{ padding:0; width: 1px; height: 1px; } .title{ padding:0; width: 100px; }
結果は以下のようになりました。セル間の隙間はなくなりましたが、タイトルの横幅は狭いままです。
さらに、CSSを以下のように修正し、テーブル全体の横幅を明示的に指定しました。
.test{ border: solid 1px gray; border-collapse: collapse; table-layout: fixed; width: 1540px; } .data{ padding:0; width: 1px; height: 1px; } .title{ padding:0; width: 100px; }
これでようやく、所望のとおりに表示できるようになりました。
ところで、当社の簡易IoTシステムでは、以下のブラウザで表示確認を行なっています。
[Windows10] Edge, Internet Explorer, Chrome
[Mac] Safari
[Androidスマホ] Chrome (縦表示, 横表示)
[Androidタブレット] Chrome (縦表示, 横表示)
[iPhone] Safari (縦表示, 横表示)
[iPad] Safari (縦表示, 横表示)
上記のHTMLを、これらのブラウザで表示させてみたところ、Windows10のChromeだけ、表示がおかしくなってしまいました。
このように、同一サイズのセルを並べているにも関わらず、右端の方だけ、幅が狭くなっています。
ディスプレイを外付けに変えたり、ブラウザ表示の拡大/縮小を行ったりすると、その度に挙動が変わり、原因が分かりません。
とりあえず、ノートパソコンのディスプレイに「拡大/縮小なし」で表示させる場合、セル幅を2ピクセルにすると、レイアウトがくずれることなく表示できたので、そのように対処しました。