リストなどで1行が長くなってしまうと、
|※テキストテキスト
|※テキストテキストテキストテキ
|ストテキスト
|※テキストテキストテキ
折り返されてこのようになってしまいます。
ですが、折り返されたあとは※ではなく文字の初め(テキストの"テ")に
合わせたいということが殆どかと思います。
今まではpaddingと背景画像を使って再現していたのですが、
もっとずっと楽な方法があること知ったのでメモしておきます。
上の例がリストであるとして、ソースはこのようになっていると思います。
<ul>
<li>※テキストテキスト</li>
<li>※テキストテキストテキストテキストテキスト</li>
<li>※テキストテキストテキ</li>
</ul>
まず、この<li>タグに左paddingを指定します。
1文字分、と指定するのがいいと思いますが、崩れる場合もあるようなので
そのときはピクセルで。
padding-left:1em; または padding-left:12px; など
これで一文字分、右にずれることになります。
| ※テキストテキスト
| ※テキストテキストテキストテ
| キストテキスト
| ※テキストテキストテキ
次に、行の先頭だけ左にずらします。
タグにtext-indentを指定します。
text-indent:-1em;
これで頭だけ左にずれ、改行後の先頭はテキストに揃う形になります。
|※テキストテキスト
|※テキストテキストテキストテキ
| ストテキスト
|※テキストテキストテキ
それにしても、text-indentなんてまさにこういう用途のために
用意されているようなクラスですよね・・
もしくは先頭1文字下げるとか。
普段、画像置き換えのために文字を吹っ飛ばすくらいしか
使っていなかったので、目から鱗な気分です。
最近、display:inline-block; を良く使っています。
名前の通り display:inline; と display:block; の性質を持っていて、
指定したタグの内側はblock要素、外側はinline要素になります。
なので、
・ボックスが横並びになる
・vertical-align が使えるようになる
・(上の2つを)height を決めなくても使える
というメリットがあります。
ボックスを横にならべるのは float:left; でも問題ないのですが、
繰り返し並べて自動改行される場合は
height を合わせないとズレてしまうことがあります。
使い方は以下のようになります。
タグが1つ増えてしまうのが欠点でしょうか^^;
■CSS
.sample {
width: 200px;
display: -moz-inline-box; /*FireFox2以下用*/
display: inline-block;
/display: inline; /*IE7以下用*/
/zoom: 1; /*IE7以下用*/
}
.sample div{ /*FireFox2以下用*/
width:200px;
display:block;
}
■HTML
<div class="sample"><div>内容</div></div>
いくつかのブラウザに対応させるために
少し記述が多くなりますが、使う価値はあると思います。
div 内の要素を下揃えにする方法です。
大枠の div を「A」、そのなかで下揃えにしたい要素を
div で囲って「B」とします。
■ divA の設定
・height を指定する
・position:relative; と入れる
■ divB の設定
・position:absolute; と入れる
・bottom:0; と入れる(ピクセルで下からの高さを指定できます)
これで、divA 内で divB を下揃えにすることができます。