Twitter Bootstrapでレスポンシブな固定幅テーブルを作成する方法
Twitter Bootstrapで固定幅の<td>を設定する方法
方法1: table-layout: fixed; を使用する
これは最も簡単な方法です。table
要素にtable-layout: fixed;
プロパティを設定するだけです。
<table class="table table-bordered">
<thead>
<tr>
<th>#</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>山田太郎</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>佐藤花子</td>
<td>25</td>
</tr>
</tbody>
</table>
table {
table-layout: fixed;
}
方法2: width属性を使用する
td
要素にwidth
属性を設定することで、個々の列幅を固定できます。
<table class="table table-bordered">
<thead>
<tr>
<th width="100px">#</th>
<th width="200px">名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>山田太郎</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>佐藤花子</td>
<td>25</td>
</tr>
</tbody>
</table>
方法3: col要素を使用する
col
要素を使って、各列の幅を定義できます。
<table class="table table-bordered">
<colgroup>
<col width="100px">
<col width="200px">
<col>
</colgroup>
<thead>
<tr>
<th>#</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>山田太郎</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>佐藤花子</td>
<td>25</td>
</tr>
</tbody>
</table>
- 全ての列幅を同じにしたい場合は、方法1がおすすめです。
- 個々の列幅を細かく設定したい場合は、方法2または方法3がおすすめです。
- 複雑なレイアウトを作成したい場合は、方法3がおすすめです。
方法1: table-layout: fixed; を使用する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>固定幅のテーブル</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqx61gVWgIGe33WNlDwZ5wV1Us1kc9pHb+4156d/xS1Y1L4dHk1g0rqp4" crossorigin="anonymous">
</head>
<body>
<div class="container">
<h1>固定幅のテーブル</h1>
<table class="table table-bordered">
<thead>
<tr>
<th>#</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>山田太郎</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>佐藤花子</td>
<td>25</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
table {
table-layout: fixed;
}
方法2: width属性を使用する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>固定幅のテーブル</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqx61gVWgIGe33WNlDwZ5wV1Us1kc9pHb+4156d/xS1Y1L4dHk1g0rqp4" crossorigin="anonymous">
</head>
<body>
<div class="container">
<h1>固定幅のテーブル</h1>
<table class="table table-bordered">
<thead>
<tr>
<th width="100px">#</th>
<th width="200px">名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>山田太郎</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>佐藤花子</td>
<td>25</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
方法3: col要素を使用する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>固定幅のテーブル</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqx61gVWgIGe33WNlDwZ5wV1Us1kc9pHb+4156d/xS1Y1L4dHk1g0rqp4" crossorigin="anonymous">
</head>
<body>
<div class="container">
<h1>固定幅のテーブル</h1>
<table class="table table-bordered">
<colgroup>
<col width="100px">
<col width="200px">
<col>
</colgroup>
<thead>
<tr>
<th>#</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>山田太郎</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>佐藤花子</td>
<td>25</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
固定幅の<td>を設定する他の方法
方法4: flexbox を使用する
flexbox
を使用すると、より柔軟なレイアウトを作成できます。
<table class="table table-bordered">
<thead>
<tr>
<th>#</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>山田太郎</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>佐藤花子</td>
<td>25</td>
</tr>
</tbody>
</table>
table {
display: flex;
}
th, td {
flex: 1 1 auto;
}
th {
text-align: center;
}
方法5: grid を使用する
<table class="table table-bordered">
<thead>
<tr>
<th>#</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>山田太郎</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>佐藤花子</td>
<td>25</td>
</tr>
</tbody>
</table>
table {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
th, td {
text-align: center;
}
方法6: JavaScriptを使用する
JavaScriptを使用すると、動的に列幅を変更できます。
<table class="table table-bordered">
<thead>
<tr>
<th>#</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>山田太郎</td>
<td>20</td>
</tr>
<tr>
<td>2</td>
<td>佐藤花子</td>
<td>25</td>
</tr>
</tbody>
</table>
const table = document.querySelector('table');
const ths = table.querySelectorAll('th');
const tds = table.querySelectorAll('td');
for (let i = 0; i < ths.length; i++) {
ths[i].style.width = `${ths[i].offsetWidth}px`;
}
for (let i = 0; i < tds.length; i++) {
tds[i].style.width = `${tds[i].offsetWidth}px`;
}
- シンプルなレイアウトの場合は、方法1または方法2がおすすめです。
css twitter-bootstrap width