主に D3.js を使用してガント チャートの作成に取り組んでいます (機能例へのリンク)。ガント チャートには、個々の日の列 (下の図の右側の列) を区切る垂直のグリッド線があり、全体table
には、各行/プロジェクトを区切る水平のグリッド線があります。生成されたチャートの例を次に示します。
作成される要素の数を大幅に削減し、パフォーマンスを向上させるために、(要素を作成する) プロジェクト/日付アドレスごとにテーブル セルを作成する代わりに、絶対位置に配置された#rows * #days
ものを使用して垂直グリッド線を単純に描画することにしました。div
各日のヘッダー セル。たとえば、図では30
、31
、1
、 などの各セルには絶対配置div
された があり、その高さはテーブルの高さ全体に手動で設定しました。チャートの構造は次のようになります。
<table>
<tr><td colspan="5"></td><td>2012-12-30 to ...</td> ... </tr>
<tr>
<td></td>
<td>Est. Duration</td>
<td>% Completed</td>
<td>Est. Start Date</td>
<td>Est. End Date</td>
<td class="day-cell">
<div class="inner">
<div class="background" style="height: 260px;">30</div>
</div>
</td>
<td class="day-cell">
<div class="inner">
<div class="background" style="height: 260px;">31</div>
</div>
</td>
<td class="day-cell">
<div class="inner">
<div class="background" style="height: 260px;">1</div>
</div>
</td>
...
</tr>
<tr class="project-row">...</tr>
<tr class="project-row">...</tr>
...
</table>
これは、高さを手動で設定する必要があるという最後の警告を除いて、素晴らしく機能します。理想的には、JavaScript を使用せずに、テーブル全体の高さを参照して to の高さを設定できるようにしたいと考えていますが、それが絶対に必要/回避できない場合は、認めdiv.background
ます。100%
この問題は、プロジェクト行の追加または削除を開始すると最も関連性が高く、顕著になります (これをシミュレートするために、div
下の図の の高さを減らしました)。
上記のコードのクラスに関連するスタイルは次のとおりです。
div.inner
-position: relative; width: 19px
div.background
-position: absolute; top: -1px; left: -1px; right -1px; line-height: 24px
繰り返しますが、チャートの HTML と CSS (JSBin) の機能例を次に示します。これまでの解決策の試みにposition
は、table
toの設定relative
やさまざまな類似のものが含まれていました。高さをばかげたもの9999px
に設定overflow-y: hidden
してテーブルに置くことも考えましたが、もしあればもっときれいな解決策が欲しいです。