ぶら上げるってなんだ。段落の一文字目だけを左に飛び出して配置するというテキスト・レイアウトの話。margin-left
プロパティーで負の値を使っても良いのだけど、文字によって要調整なので面倒くさい。position: absolute
を使う場合は、親でposition: relative
が必須になるのでこれもちょっとアレ。他にもいくつかあったと思うけど、float
とmargin-right: 100%
を組み合わせて行うのが一番位置合わせが簡単になる。
Demo: Hanging :first-letter
英文ではメジャーなドロップキャップをアウトデントするもの。たまに見る気がするけど気のせいな気もする程度のタイポグラフィー知識……。
.test::first-letter {
margin-right: 100%;
margin-bottom: -999em;
float: right;
line-height: 1;
}
float: right
とmargin-right: 100%
を使ってまず飛び出させる。ここでfloat: left
だとmargin-left
プロパティーで負の値を使うのと同じく要調整になるので意味ない。このままでは一文字分上にずれるのでmargin-bottom
プロパティーで一文字分……と思いきやIE9(多分それ以前も)でバグ(後述)があるので大雑把に-999em
を指定して戻して揃える(一定以上は下に落ちないのでちゃんと揃う)だけ。親のline-height
プロパティーの値を引きずらないようにline-height: 1
にするのは忘れないようにする。このままだと味も素っ気もないので、フォントを変えて大きくしたりpadding-right
プロパティーで本文との間を調節したりするとデモのような形になる。text-align: right
も入れておいた方が良いかも。
日本語の文章でドロップキャップは使わないことがほとんどなのでこのまま使うことはあまりないけど、擬似要素をぶら上げる時とかにも応用できてたまに使ってる。とにかくfloat: right
とmargin-right: 100%
(またはその逆)の組み合わせがレイアウトに使えるという話なので、頭の隅にいれておくと結構な頻度で役に立つ。そして新しいイマドキなレイアウトを覚えず済ませることが多く……。
IE9でのバグは::first-letter
でのem
単位が親のフォントサイズを基準に計算されるというバグ。結構前からあるような気がする。
p {
font-size: 20px;
}
p::first-letter {
margin-right: 1em;
font-size: 100px;
}
そのためこう書くとmargin-right
が20px
になってしまう。覚えていてもほとんど役に立たない割に忘れてると痛い目にあう知識。