ホームページ >テクノロジー周辺機器 >IT業界 >レイアウトシークレット武器#1:CSSテーブルプロパティ
cssdisplay: table
属性:レイアウトの問題を解決するための強力なツール
コアポイント:
table
属性は強力であり、複数のレイアウトの問題を解決し、すべての最新のブラウザーと互換性があります。これにより、HTML要素はテーブル要素のように機能し、複雑なレイアウトとアライメントの問題に共通のソリューションを提供できます。 table
プロパティを使用して、輪郭ボックス、シンプルな古いスタイルのレイアウト、コンテンツオーケストレーションを備えた適応レイアウトを作成できます。応答性の高いデザインで特に役立ち、ユーザーの画面サイズに応じて要素をサイズ変更し、位置付けます。 table
属性には多くの利点がありますが、いくつかの制限もあります。他のディスプレイプロパティと比較して複雑なレイアウトの作成に柔軟性が低く、float
やposition
などの特定のCSSプロパティではうまく機能しません。ただし、多くの場合、table
属性を使用することの利点は、その欠点を上回ります。
現在、FlexBoxはレイアウト構築に人気のある新しいテクノロジーになる可能性があります。 Flexboxの利用可能なスペースに適応する驚くべき能力により、多くの人々がその可能性を楽しみにしています。ただし、すべてのレイアウトの問題を解決することはなく、古いブラウザとの互換性にはいくつかの問題があります。 FlexBoxには現在、一般的なポリフィル(古いブラウザ向けのフォールバックソリューション)はありません - 2009年バージョンのIE:Flexieのポリフィルのみを知っています。多くの場合、見過ごされがちなCSS table
を使用すると、ディスプレイプロパティがより簡単なソリューションを見つけることができることがわかりました。これらのCSSプロパティは、関連するすべてのブラウザーによって広くサポートされており(これはIE6とIE7を除外していることに注意してください)、いくつかの主要なレイアウトの難しさを優雅に解決できます。
属性を変更すると、display
>>テーブルまたはテーブル要素のように動作する可能性があります。
待って、テーブルを使用してレイアウトしますか?これは良くありませんか?
使用法
次の例では、上部のボタンをクリックすると、3つの色のdivの
display: table-cell
からに変更できます。
display
[Codepenサンプルリンク - 実際のCodepenリンクに置き換え]block
table-cell
など)にもアクセスすることもできます。
間隔が必要な場合は、古典的なCSS margin
属性はテーブルセルに影響を与えないことに注意してください。代わりに、border-spacing
を使用します(コンテナテーブル要素に適用する必要があります)。これらのルールを使用したい場合は、Codepenにコメント行を見つけることができます。
この手法は、他の方法で解決するのが難しい多くの問題を解決するのに非常に役立ちます。
3つの簡単なケースを選択しました。table
表示属性は非常に価値があります。
しかし、最初にそれらを見てみましょう:
表示属性
は として表されます
テーブル、インラインテーブル
display 属性 | 呈现为 |
---|---|
table, inline-table |
table |
table-column |
col |
table-column-group |
colgroup |
table-row-group |
tbody |
table-header-group |
thead |
table-footer-group |
tfoot |
table-row |
tr |
table-cell |
td |
table-caption |
caption |
table-column
col
table-column-group
colgroup
Table-Row-Group
tbody
table-header-group
thead
table-footer-group
tfoot
Table-row
tr
table-cell
td
table-caption
キャプション
フォームとCSSの真に包括的なガイドについては、CSSトリックをチェックしてください:[CSS Tricksのフォームガイドリンク - 実際のリンクに置き換え]
これは私が扱う最も一般的な問題の1つだと思います。コンテンツが不明なフローティングボックスがいくつかあり、それらをすべて同じ高さにする必要があります。
FlexBoxはこの問題を簡単に解決できることを知っていますが、テーブルルールもそれを行うことができます。
display: table
table-row
(またはdisplay: table-cell
)プロパティをコンテナに、float
プロパティを内部ボックスに適用するだけです。任意の属性を削除する必要があることに注意してください(それ以外の場合は、table-cell
属性は有効になりません)。
<code class="language-html"><div id="wrapper"> <div id="div1"></div> <div id="div2"></div> <div id="div3"></div> </div></code>
<code class="language-css">#wrapper { display: table; } #wrapper div { display: table-cell; }</code>
[Codepenサンプルリンク - 実際のCodepenリンクに置き換え]
これはかなり時代遅れの例ですが、最近やったように、あなたはそれに対処する必要があるかもしれません。
数ヶ月前、私は次のスキームに非常に似たグラフィックレイアウトを受け取りました。 IE8と互換性がある必要があり、これを行う最良の方法は、CSSテーブルルールを使用することであることがわかりました。
[Codepenサンプルリンク - 実際のCodepenリンクに置き換え]ケース3。コンテンツオーケストレーション関数を使用した適応レイアウト
これは可能であるだけでなく、コンテンツオーケストレーションタスクを実行することもできます。
2つのdivのプロパティを
からdisplay
に変更して、配置を垂直から水平に変更する方法を見てきました。 block
さらに、table-cell
属性を持つ要素は、テーブルレイアウトの上部に配置されます。繰り返しになりますが、
下のペンでは、ウィンドウがサイズ変更されたときにその位置をナビゲーション要素と交換するタイトル要素で、table-header-group
属性をtable-footer-group
に変更するだけです。
html:display
table-header-group
<code class="language-html"><div id="wrapper"> <nav></nav> <header></header> <div id="banner2"></div> <footer></footer> </div></code>
<code class="language-css">#wrapper, header { display: block; /* 我们实际上不需要此规则,因为它默认为此值 */ } @media (min-width: 48em) { #wrapper { display: table; } header { display: table-header-group; } }</code>
これはレイアウトプランです:左側のデフォルトのモバイルバージョン、右側のデスクトップバージョン:footer
#banner2
これはランニングデモンストレーションです:
[Codepenサンプルリンク - 実際のCodepenリンクに置き換え]
この議論の詳細については、
css を使用したスタッキング CSSレイアウトのアンチヒーロー - "
display:table
display:table
css私は個人的には複雑なレイアウトを構築するためにそれらを使用することを選択しないかもしれませんが、彼らは確かにレイアウト部分に関連する多くの課題を解決します。
CSStable
に関する(CSS属性に関するよくある質問をここに追加する必要があります。コンテンツは元のテキストに似ていますが、重複を避けるために文言を調整する必要があります。)
table
上記のすべてのCodePenリンクは、実際のCodePenリンクに置き換える必要があることに注意してください。 CodePenに直接アクセスして作成できません。
以上がレイアウトシークレット武器#1:CSSテーブルプロパティの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。