CSS3レイアウトデザイン

CSS3レイアウトデザイン

CSS2.1での段組みレイアウトの表現は、floatプロパティで要素を浮動化して幅の値をあたえることで、後続の要素を水平方向、左右どちらかに並べていました。CSS3では段数を指定するなど、より直感的に表現できる機能が追加されており、機能を組み合わせて指定すれば、高度なレイアウトも簡単に構築することが可能になっています。

という事で、それでは今回はッ、

・マルチカラムのレイアウト
・フレキシブルボックスレイアウト
・グリッドレイアウト
・その他のレイアウト仕様
・メディアクエリ

上記について記載していこうと思います…。

マルチカラムのレイアウト

「マルチカラムレイアウト」では、段数の段の幅、間隔、罫線などを指定することができます。段数はcolumn-countプロパティ、段の幅はcolumn-widthプロパティで指定します。たとえば、「column-count: 3;」と記述すると3段組みで表示されます。組方向が横の場合、左側のボックスから順に流し込まれます。

段の間隔は、column-gapプロパティで指定します。「column-gap 30px;」と記述すると、段と段の間隔は30ピクセルになります。
段と段の間に表示する罫線(区切り線)は、column-ruleプロパティで指定します。「column-rule: 1px solid #000;」と記述すると、太さ1ピクセルの単線が黒で表示されます。

マルチカラムレイアウトでは、ボックスの段の数をcolumn-countプロパティを使用して指定します。段の幅を指定するcolumn-widthプロパティと組み合わせて使うことが可能です。

column-count

初期値:auto
適用要素:ブロックレベル要素(置換要素、table要素を除く)、th要素・td要素、インラインブロック要素
継承:なし
値:integer/auto
【サンプルソースコード】
#contents {
column-count: 2;
}

CSS Multi-column Layout Moduleのプロパティ

マルチカラムレイアウトの指定

プロパティ 指定内容
breah-after 改ページ・改段の挿入位置(ボックスの前)の指定
break-before 改ページ・改段の挿入位置(ボックスの後)の指定
break-inside 改ページ・改段の挿入位置(ボックス内)の指定
column-count 改段の指定
column-fill 段の高さを揃える指定
column-gap 段と段の間隔の指定
column-rule 段の区切り線の指定
column-rule-color 区切り線の色の指定
column-rule-style 区切り線のスタイルの指定
column-rule-width 区切り線の太さの指定
columns 段の幅と段数の指定
column-span 複数の段を貫く表示の指定
column-width 段の幅の指定

フレキシブルボックスレイアウト

マルチカラムレイアウトは、1つのボックスを分割して段組みを表現しますが、フレキシブルボックスレイアウトは、複数のボックスを水平方向に配置します(floatプロパティを使った段組みの手法に近い仕様)。

複数のボックスを含有する親ボックスに対して、「display: box;」と指定すれば、ボックスが水平方向に並びます。ボックスの高さを自動的に揃えてくれるので、意図しない空白が発生してバランスが崩れることもありません。

ボックスにdisplayプロパティを使用し、「flexbox」を指定することでブロック要素として扱われ、フレキシブルボックスが有効になります。デフォルトでは、水平方向(左から右)に並びますが、box-orientプロパティを使えば、垂直方向に並べることができます。

display

初期値:inline
適用要素:すべての要素
継承:なし
値:flexbox/inline-flexbox
【サンプルソースコード】
nav {
display: flexbox;
width: 180px;
}

CSS Flexble Box Layout Moduleのプロパティ

フレキシブルボックスレイアウトの指定

プロパティ 指定内容
display ボックス(flexbox)の種類の指定
flex-align 垂直方向の指定
flex-flow ボックス(flexbox)の方向
flex-line-pack 複数行のボックス(flexbox)の揃えの指定
flex-order ボックス(flexbox)の表示順
flex-pack 水平方向の揃え

グリッドレイアウト

「グリッドレイアウト」では、適用したい領域に対して「display: grid;」を指定し、グリッドコンテナとして定義しておきます。続けて、行と列を指定し、分割された領域にコンテンツを配置していきます。

列は、grid-columnsプロパティで定義します。「grid-columns: 15% 60% 25%」の場合、1列目の幅が15%、2列目の幅が60%、3列目が25%の幅になります。行は、grid-rowsプロパティで定義します。数値ではなく、「auto」を指定すると、容量内に合わせて自動的に値を算出してくれます。

ボックスにdisplayプロパティを使用し、「grid」を指定すると、グリッドレイアウトが有効になります。列の横幅は、grid-columnsプロパティで数値もしくは比率(fr)を指定します。※frは割合の単位です。

display

初期値:inline
適用要素:すべての要素
継承:なし
値:grid/inline-grid
【サンプルソースコード】
#container {
display: grid;
grid-columns: 75% 25%: 180px;
width: 960px;
}

Grid Layoutのプロパティ

グリッドレイアウトの指定

プロパティ 指定内容
grid-columns 列の幅の指定
grid-rows 行の高さの指定
grid-column 列の番号の指定
grid-row 行の番号の指定
grid-cell グリッドセルの指定
grid-cell-stacking グリッドセルの重なり方向の指定
grid-template グリッドセル構造の指定
grid-column-span 列の数の指定
grid-row-span 行の数の指定
grid-column-sizing 列幅の算出方法の指定
grid-row-sizing 列の高さの算出方法の指定
grid-flow 方向の指定
grid-column-align 列の水平方向揃えの指定
grid-row-align 行の垂直方向揃えの指定
grid-layer 重ね順の指定

その他のレイアウト仕様

「CSS Regions Module Level 3」や「CSS Template Layout Module」は、CSS2.1まで不可能だった紙媒体の高度なページデザイン技術をブラウザ上で表現することができます。エディトリアルデザインの領域に近づくことで、電子書籍や電子雑誌などの基礎技術として普及する可能性もある事と思います。

CSS Regions Module Level 3のプロパティ

高度な流し込みレイアウトの指定

プロパティ 指定内容
flow-into 指定されたフロー領域内に要素を置く
flow-from 指定されたフロー領域と結びつける
break-before 改ページ・改段の挿入位置(ボックスの前)の指定
break-after 改ページ・改段の挿入位置(ボックスの後)の指定
break-inside 改ページ・改段の挿入位置(ボックスの内)の指定
region-overflow 指定されたフロー領域と結びついた最後の領域の指定
@region 特定の領域に指定

CSS Template Layout Moduleのプロパティ

高度なポジショニングレイアウトの指定

メディアクエリ

CSS2.1には、メディアタイプを指定することができる「@media」があり、対象とするメディアに専用のスタイルを適用することができます。
メディアタイプには、csreen、print(ページ出力)、handheld(小さな画面のデバイス)、projection(プロジェクタなど)、speech(音声合成出力)など10種類あります。

CSS3では「Media Queries」(メディアクエリ)が定義され、より詳細な条件でスタイルを適用できるようになりました。デバイスのスクリーンサイズや解像度、縦横比、色数、デバイスの向き、ブラウザの横幅や高さを条件として、専用のスタイルを指定することができます。メディアクエリを使用することで、デバイスごとにコンテンツを最適化しなくても、柔軟に対応させることが可能です。

メディアクエリの基本的な記述サンプル

プロパティ 指定内容
display 要素が生成するボックスの種類の指定
position ボックスの配置の指定
chains スロットの連続の指定
break-before 改ページ・改段の挿入位置(ボックスの前)の指定
break-after 改ページ・改段の挿入位置(ボックスの後)の指定
break-inside 改ページ・改段の挿入位置(ボックスの内)の指定
<h1>タイトル</h1>
@media screen{
h1 { color: red; }
}
@media all{
h1 { color: red; }
}

メディア特性と条件を指定する記述サンプル

@media screen and (min-width:960px){
h1 { color: red; }
}
ブラウザの表示領域の幅が960px以上の場合、タイトルの色を赤
@media screen and (min-width:480px)and(max-width:960px){
h1 { color: red; }
}
ブラウザの表示領域の幅が480px以上、960px以下の場合、タイトルの色を赤
@media screen and (min-device-width:768px)and(max-device-width:1024px){
h1 { color: red; }
}
デバイスのスクリーン幅が768px以上、1024px以下の場合、タイトルの色を赤

デバイスの方向でスタイルを適用する記述サンプル

@media screen and (orientation:landscape){
h1 { color: red; }
}
デバイスを横向きにした場合、タイトルの色を赤

Media Queries参照リンク

メディアクエリの特性、条件、値に関する一覧

メディア特性 条件
width ブラウザのウィンドウの幅 数値
height ブラウザのウィンドウの高さ 数値
device-width デバイスのスクリーンの幅 数値
device-height デバイスのスクリーンの高さ 数値
aspect-ratio ブラウザのウィンドウの縦横比 比率(横/縦)
device-aspect-ratio デバイスのスクリーンの縦横比 比率(横/縦)
orientation デバイスの方向 portrait(縦)/landscspe(横)
resolution 解像度 dpi、dpcm
color 色数(ビット数) 数値
color-index カラーテーブル 数値
monochrome グレースケールの諧調 数値

という事で今回は、CSS3レイアウトデザインをサンプルソースコードを交え記載してみました。

私もflexboxプロパティやメディアクエリは、毎回といってイイほどよく使います。今回のようにまとめた概念だと、比較的難しく感じるかもしれませんが、実際に数回記載して頂き、理解を深めて頂ければと思います。また、それ以外のレイアウトなども使うことが慣れていると、とっても便利なプロパティだと思います。

とりあえず、今回はここまで…。

お仕事のご依頼は↓コチラより…、それではまた次回…。