グリッドが表示できるようになったので、 各タグがグリッド揃えになる様に位置調整をしていきます。
← などの余白部分をクリック・タップするとグリッド表示の on/off が可能になっておりますので、 お好みに応じて使い分けてください。
グリッド揃えとは?
そもそもグリッド揃えとは何かをカンタンに説明します。
基本的なルール
行取りの使用例
図表や画像、 ブログカードなどの高さは、 その内容によりまちまちですが、 それを本文の高さに揃える事を行取りと言います。
カラム表示ですと、 表示しているデバイスによっては隣のブログカードの高さと、 この文章の何処かの行の位置がピッタリ同じになります。
表示しているデバイスによっては文章の方が短いかもしれません w
この様に、 あらゆるタグの margin や padding などを調整してグリッドに揃えていきます。
基本的な揃え方
基本は margin で行間を確保
シンプルなサンプルを用意します。
ボックスのみの場合
.blank-box
.blank-box.sticky
この 2 つのボックスは次の scss が適用されています。
/* 白抜きボックス */
.blank-box {
margin-top: $line_space;
margin-bottom: $line_space;
padding-top: $line_height_px / 2 - 2px;
padding-bottom: $line_height_px / 2 - 2px;
}
/* 付箋風ボックス */
.blank-box.sticky {
margin-top: $line_space;
margin-bottom: $line_space;
padding-top: $line_height_px / 2;
padding-bottom: $line_height_px / 2;
}
/* ボックス内の文字 */
p {
line-height: $line_height_px;
}
どちらのボックスも行間分のマージンを上下に取っています。
そして、 白抜きボックスの下マージンと付箋風ボックスの上マージンは、 マージンの相殺により重なります。
マージンなどの付き方を着色表示してみると、
分かりやすいですね。 上下の薄い肌色に比べ、 ボックスの間はマージンが重なって色濃く表示されています。
つまり、 ボックスの (border を含めた) 大きさが行取りのサイズ (line-height の整数倍に font-size を足した数) になっていれば、 後は margin で行間を取るだけで済みます。
そう思ってました。 (不穏)
文字を置いてみる
では続いて、 先程のボックスの間に文字を置いてみます。 すると、
.blank-box
ボックスの間に文字を置いてみる。 (グリッド揃えの css を適用していない状態です。)
.blank-box.sticky
こんな感じでグリッドからズレてしまいます。 このままでは見辛いので次の行からグリッドに戻します。
ほい。 戻りました。 こちらも画像で見てみると、
この様に、 ボックスの間に置かれた文字には line-height が効いているので、 ボックスのマージンは文字の面まで届きません。
つまり、 <p> タグなどの line-height の効果が発生するタグは、 例え margin を 0px にしてもグリッドに揃いません ;;
であれば、 line-height を 「1」 にすれば余分な余白が発生しないので、 グリッドに揃うのでは?とも考えましたが、 ある程度の行間を確保しないと、 とても読み辛い文字組になってしまいます。 当然、 このまま続けるワケには行かないので、 もっかいグリッドに戻します。
ほい。 戻りました。 ですので、 読みやすい line-height を確保したまま、 文字面をグリッドに揃える必要があります。
そこで、 もう少し詳しく観察します。
先程の 2 つの画像を重ねてみると、 ボックス内のテキストは padding (緑色の部分) が line-height に食い込んでいるのが分かります。
つまり、 ボックス間テキストの line-height にも食い込みが出来る指定をすれば、 ボックスのマージンはボックス間テキストの面に届く様になります。
先程、 margin を 0px にしても揃わないと述べました。 そこで、 margin をマイナスにします。
実践的な揃え方
ネガティブマージン
margin にマイナスの値を持たせる事によって、 隣接するオブジェクトを食い込ませます。
$str_inner_margin_shift: 1;
$str_inner_margin_top: $line_space / 2 - $str_inner_margin_shift;
$str_inner_margin_bottom: $line_space / 2 + $str_inner_margin_shift;
@mixin p-margin() {
margin-top: - $str_inner_margin_top;
margin-bottom: - $str_inner_margin_bottom;
}
p {
@include p-margin();
}
行間の半分を上下のマージンに振り分けます。
計算式の中で、 「$str_inner_margin_shift」 なるものを足したり引いたりしていますが、 上下とも同じマージンですと、 どうにも文字がズレて見えます。
これがブラウザ解釈の問題なのか、 フォントのアセンダ・ディセンダ・ベースライン周りの問題なのかは分かりません ;;
ともあれ、 上下で別個のネガティブマージンを適用します。 せめてこれが同値でイケたらこの先もっと楽になったのですが、、、
で、 上記のスタイル設定を適用した状態で、 先程のボックスを表示するとこんな感じです。
.blank-box
ボックスの間に文字を置いてみる。 (グリッド揃えの css を適用済み。)
.blank-box.sticky
うん。 ステキです ♪
まとめ
この様に、 グリッドに揃えていくのは結構な手間が掛かりそうです。 line-height の影響を受けるタグって思いつくだけでも、 <p> 、 <ol> 、 <ul> 、 <li> 、 <dl> 、 <dt> 、 <dd> 、 とかありますしね。
しかも、 これらの組み合わせ処理も必要になります。 今回の <p> タグ処理のままでは連続する <p> タグのマージンは0になってしまいます。
まぁ、 気長にコツコツやっていく必要がありそうですね w
コメント