[解決済み] フレックスボックスはテーブルと同じようにレイアウトできますか?
質問
社内で開発したフレームワークを使用していますが、そのフレームワークはHTMLに特定の構造を必要とします。厄介なのは、各行が独自のクラスとデータ属性を持つ独自のコンテナを必要とすることです。
そこで問題です。DOM を大幅に変更せずに、下のフレックス ボックスを HTML のテーブルのように本質的にレンダリングするにはどうしたらよいでしょうか。それともテーブルが唯一の方法なのでしょうか?解決策は、IE11とChromeの両方で動作する必要があります。
こんな感じにしたいんだけど...。
Column A | Column B | Column C
1 | 2 | 3
section {
display: flex;
flex-wrap: wrap;
}
section .col {
flex: 1 1 auto;
}
section .line-break {
flex-basis: 100%;
width: 0px;
height: 0px;
overflow: hidden;
}
<html>
<head>
</head>
<body>
<section>
<header>
<div class="col">Column A</div>
<div class="col">Column B</div>
<div class="col">Column C</div>
</header>
<div class="line-break"></div>
<div class="row">
<div class="col">1</div>
<div class="col">2</div>
<div class="col">3</div>
</div>
</section>
</body>
</html>
解決方法は?
提示しようとするコンテンツが、タイプ
表形式データ
を指定すると
table
が適切な方法です。
HTML 5.1 W3C勧告、2016年11月1日、4.9 表形式データ
マークアップを変更できない、あるいは変更したくない場合、CSS Tableを使用することで、以下のような表示形式を簡単に切り替えることができます。
flex
,
block
など、あるいは
float
メディアクエリなどを使用しています。
を削除した。
<div class="line-break"></div>
要素は必要ないので、そのままでも問題ありませんが、コンポーネントなどでレンダリングされる場合は、そのままでも問題ありません。
それでもFlexboxを使う必要がある場合は、私のこの回答で、2つの重要な機能についてのCSS TableとFlexboxの違いについて触れています。
幅とスパン列を変化させた、便利な Flexbox のサンプルを更新しました。
スタック・スニペット - フレックスボックス ( IE11用フィドルデモ )
.tbl {
display: flex;
flex-direction: column;
}
.row {
display: flex;
min-height: 50px;
}
.cell {
flex: 4;
border: 1px solid red;
}
.cell:nth-child(1) {
flex: 1;
}
.cell:nth-child(2) {
flex: 2;
}
.cell.span4-5 {
flex: 8 24px; /* col 4,5 flex-grow/border/padding */
}
.cell.span3-4 {
flex: 8 24px; /* col 3,4 flex-grow/border/padding */
}
.cell.span3-5 {
flex: 12 36px; /* col 3,4,5 flex-grow/border/padding */
}
.row:first-child .cell {
display: flex;
justify-content: center; /* center horiz. */
align-items: center; /* center vert. */
}
.row .cell {
padding: 5px;
box-sizing: border-box;
}
<div class="tbl">
<div class="row">
<div class="cell">ID </div>
<div class="cell">Nr </div>
<div class="cell">Header 1 </div>
<div class="cell span4-5"> Header 2 </div>
</div>
<div class="row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">Content</div>
<div class="cell">Content</div>
<div class="cell">Content</div>
</div>
<div class="row">
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell span3-5">Content</div>
</div>
<div class="row">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell span3-4">Content</div>
<div class="cell">Content</div>
</div>
</div>
スタック・スニペット - CSSテーブル
section {
display: table;
width: 100%;
}
section > * {
display: table-row;
}
section .col {
display: table-cell;
}
<html>
<head>
</head>
<body>
<section>
<header>
<div class="col">Column A</div>
<div class="col">Column B</div>
<div class="col">Column C</div>
</header>
<div class="row">
<div class="col">1</div>
<div class="col">2</div>
<div class="col">3</div>
</div>
</section>
</body>
</html>
関連
-
[解決済み】スタイルシートとして解釈されるリソースがMIMEタイプtext/htmlで転送される(ウェブサーバーとは関係ないようです)。
-
[解決済み】「選択されたファイルがありません」を変更しました。
-
[解決済み] HTMLのバックスペース
-
[解決済み] セレクトボックスのプレースホルダーを作成するにはどうすればよいですか?
-
[解決済み] HTML5の数値入力のスピンボックスを非表示にすることはできますか?
-
[解決済み] フレックスアイテムを右寄せにするには?
-
[解決済み] フレックスボックス 最後の行をグリッドに揃える
-
[解決済み] display:inline-flexとdisplay:flexの違いは何ですか?
-
[解決済み] フレックスアイテムがコンテンツサイズ以上に縮小されないのはなぜですか?
-
[解決済み】display:flexを使って残りの縦幅をCSSで埋める。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】iframeの高さを100%にする方法【重複】。
-
js プログラミング共通のエラーです。Uncaught TypeError。XXXは関数ソリューションではありません
-
[解決済み] このCSSでInline-blockが正しく動作しないのはなぜですか?
-
[解決済み] html : iframeでhtmlのコンテンツが表示されない。
-
[解決済み] WebForms UnobtrusiveValidationMode には、'jquery' の ScriptResourceMapping が必要です。jquery という名前の ScriptResourceMapping を追加してください(大文字と小文字を区別します)。
-
[解決済み] Bootstrapのカラム内で画像を中央に配置する方法 [重複]について
-
[解決済み] Favicon.icoを表示させることができません。
-
[解決済み] HTML Divのボーダーが表示されない
-
[解決済み] HTMLボタンのテキストを固定幅で折り返すには?
-
[解決済み] Visual Studio Code CSSエラー「空のルールセットを使用しないでください」【終了しました