tableタグ生成
Table Tag Generatorhtmlテーブルを作成できるツールです。マウスを使ってテーブルのセルをドラッグし、複数のセルを選択したり、セルの内容を編集したりできます。また、セルのタイプ(<td>と<th>)を変更したり、選択したセルを統合したり、分割したりも可能です。さらに、テーブルの行や列を増減することができ、ユーザーは動的にテーブルをカスタマイズできます。
コラム・豆知識
表組みは構造を意識して設計する
<table>
は、レイアウト目的ではなく「データの意味的な表現」に使うべきタグです。
見た目だけでなく、情報の構造や関係性を表す目的で使用することで、スクリーンリーダーや検索エンジンにも正しく伝わります。
装飾目的での使用には<div>
や<ul>
との比較検討が必要です。
thead・tbody・tfootで論理構造を明確に
複雑な表では、<thead>
・<tbody>
・<tfoot>
を適切に分けて使うことで、表の構造が明瞭になります。
<thead>
は見出し、<tbody>
は本体、<tfoot>
は集計や補足などに使われ、視覚的にも論理的にも整理された表を作るのに有効です。
特に長いテーブルでスクロール固定などの実装を行う際にも役立ちます。
thとscope属性でアクセシビリティを高める
表の見出しセルには<th>
を使い、scope="col"
やscope="row"
を指定することで、支援技術がセルの意味を正確に解釈できます。
これにより、スクリーンリーダーが行・列の対応を読み上げやすくなり、視覚障害のあるユーザーにも理解しやすい表になります。
見た目が同じでも、<td>
と<th>
の役割を混同しないようにしましょう。
レスポンシブ対応にはCSSテクニックが必要
<table>
は本質的に横スクロールに弱いため、モバイル対応では工夫が必要です。
display: block
でスクロールさせる方法、data-label
属性とCSSを組み合わせてカラムを縦並びに見せる方法などがあります。
データの種類や優先順位によって、テーブルの構造自体を変える選択肢も検討すべきです。
キャプションとsummaryで補足情報を加える
表の目的や内容を説明するには、<caption>
要素を活用しましょう。
ユーザーにとって内容の理解がしやすくなり、アクセシビリティの面でも有効です。
HTML5ではsummary
属性は非推奨になりましたが、<caption>
は引き続き使用されており、視覚的にも表の上部に情報を加える手段として有効です。
ツールの仕組み解説
document.addEventListener('DOMContentLoaded', function() { initializeTable(); });
DOMContentLoaded
は、HTMLの読み込み完了後に処理を実行するイベントです。これにより、ユーザーがページを開いた瞬間にテーブルが生成されます。
テーブルの初期化では、行と列に合わせて2次元配列を作成します。各セルにはtd
型、空の文字列、rowSpan
とcolSpan
が設定されます。
function initializeTable() { table = Array(rows).fill().map(() => Array(cols).fill().map(() => ({ type: 'td', content: '', rowSpan: 1, colSpan: 1 })) ); renderTable(); }
この処理によって、マージや分割にも柔軟に対応できる「セル情報付きの配列構造」が作られます。
テーブルをHTMLとして描画するのがrenderTable()
関数です。
function renderTable() { const tableContainer = document.getElementById('tableContainer'); // ...中略 tableContainer.innerHTML = tableHtml; }
ここでは、table
配列の中身をループし、選択状態やセルの型(td/th)、入力欄などを含めてHTMLテーブルを組み立てています。
セルのクリックやドラッグに対応する処理も含まれています。以下はセルを選択状態に切り替える関数の一部です。
function toggleCellSelection(cell) { const row = parseInt(cell.dataset.row); const col = parseInt(cell.dataset.col); // 選択状態の切り替え処理 }
選択したセルを記憶しておくことで、あとで「結合」や「分割」などの処理に使えます。
セルの種類(td
/th
)を切り替えるための関数もあります。
function toggleCellType() { selectedCells.forEach(({ row, col }) => { table[row][col].type = table[row][col].type === 'td' ? 'th' : 'td'; }); renderTable(); }
見出し行を使いたいときに便利な機能です。
複数のセルを1つにまとめるのがmergeCells
関数です。
function mergeCells() { if (selectedCells.length < 2) return; // 最小・最大範囲を求め、rowSpan / colSpanを調整 }
選択範囲から一番左上のセルを基準に、それ以外をnull
にして結合済みとし、整形されたテーブルを再描画します。
結合したセルを元に戻すには、splitCells
関数を使います。
function splitCells() { // rowSpan, colSpan を1に戻して、空セルを挿入 }
これにより、誤って結合してしまったセルを簡単に復元できます。
操作履歴を戻す機能としてundo
も用意されています。
function undo() { if (history.length === 0) return; table = history.pop(); renderTable(); }
変更前のテーブル状態をhistory
に保存しているため、「戻る」ボタンで簡単に巻き戻すことができます。
HTMLの完成コードをリアルタイムで出力する処理もあります。
function generateHtml() { // テーブルの構造をHTML文字列として整形して出力 }
これにより、ユーザーは作成したテーブルをそのままコピーして使用することが可能になります。
行や列の追加・削除も、以下のようにシンプルな処理で実現しています。
document.getElementById('increaseRows').addEventListener('click', () => { rows++; table.push(Array(cols).fill().map(() => ({ type: 'td', content: '', rowSpan: 1, colSpan: 1 }))); renderTable(); });
この構造により、テーブルのサイズ調整も直感的に操作できます。