お知らせ / ブログINFO / BLOG
2019.09.09
【CSS】display:table;・display:table-cell;での横並び
以前「【CSS】display:inline-block;での横並びと隙間対策」で紹介した横並びの実装ですが、今回はdisplay:table;
・display:table-cell;
での実装の仕方を紹介致します。
このやり方では、HTMLのtable
タグとほぼ同じ運用になり、float
では制御し難い高さの設定が必要ないので、覚えておくとレイアウトの実現が楽になります。
ですが、注意しなければいけない点がいくつかありますので、合わせて紹介致します。
HTML
<div class="table">
<div class="cell">
<p>セル1</p>
</div>
<div class="cell">
<p>セル2</p>
</div>
<div class="cell">
<p>セル3</p>
</div>
</div>
table
タグと同様の扱いになる親要素のclass="table"
と、セル(th
/td
)に値するclass="cell"
です。
CSS
.table {
width:100%;
display:table;
border:1px solid #e4e4e4;
}
.cell {
display:table-cell;
vertical-align:middle;
word-wrap:break-word;
}
.cell:nth-child(odd) {
background-color:#e4e4e4;
}
親ブロックにdisplay:table;
を、直下の子要素にdisplay:table-cell;
を指定します。
HTMLのtable
タグと同じ特性を持ちますので、横幅は内包するコンテンツの幅になります。指定があればwidth
で指定しましょう。
また、縦位置調整もvertical-align
で、URLなどの途中で改行されない文章はword-wrap:break-word;
で改行の仕方を指定出来ます。
画面表示
セル1
セル2
セル3
あくまでもHTMLのtable
タグと同じ特性を持ちますので、セルに対してmargin
は効きません。セル間の余白をあける場合は、border-collapse:separate;
とborder-spacing
を設定します。
注意が必要なのが、
・position
がきかないバージョンのブラウザが存在する事
・タブレットでは2カラム、スマホでは1カラムにするなどのレスポンシブレイアウト(グリッドレイアウト)での制御が難しい
・min-height
max-height
がきかない
・word-wrap:break-word;
による文字の折り返し(自動アルゴリズムレイアウト)が効かない場合がある
これらは一例ではありますが、気を付けなければいけません。しっかりと特性を理解し、正しい状況で使用できるようにしておきましょう。