linkerは「人と人」「人と情報」「人と物」をつなぐデザインユニットです。

dl,dt,ddでデザインを整える方法とか[追記 2009.04.21 12:15]

みなさん、こんにちは!まーしーです。
先週末、また1つ歳をとってしまいました。
誕生日に食べるケーキは大好きです。

今日は最近どうやってやろうかな?と考えてたもののマークアップについて書いてみようかな?と思います。
jQueryの勉強も兼ねてる感じです。
(注:mac firefoxのみで検証してます。)

090420-01.gif

まぁ、こんなデザインがあったとします。
これをどんなかんじでマークアップするか?というのもあるんですが、
とりあえずdl,dt,ddでマークアップする方法で考えてみたいとおもいます。
(左の見出し部分は垂直センターの方がよかったかもなぁ・・・)

とりあえずhtmlは

あいうえお
あいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえお
あいうえおあいうえお
あいうえおあいうえおあいうえおあいうえお
あいうえおあい
あいうえお

こんな感じになりますね。

全ての項目でdtの幅を揃える場合

いくつか方法があるかと思いますが、文字数で幅を指定すればこんな感じになりますかね。  

▼ css

dl{
	width:400px;
}
dt{
	width:10em;
	margin-bottom:0.5em;
	float:left;
}
dd{
	border-left:2px solid #376122;
	padding-left:10px;
	margin-left:11em;
	margin-bottom:0.5em;
}

demo

これはこれでありかも?とか思うのでOKかもしれないですね。
fontの種類、ブラウザによって若干emのサイズが違うのが気になってるところではあるんですが、
そのあたりも今後の課題ということで。

幅をpxで揃えることも可能ですね。
その場合はdtの文字数が多い場合は改行されるだけですね。

dtに入る文字数がある程度見えているけど、最大文字数に揃えたいと思ったので
jQueryとか使ってやってみると

こんな感じで書けばいけそうな感じです。

▼ css

dl{
	width:400px;
}
dt{
	margin-bottom:0.5em;
	float:left;
}
dd{
	border-left:2px solid #376122;
	padding-left:10px;
	margin-bottom:0.5em;
}

▼ javascript

$(document).ready(function() {
    var max = 0;
    $("dt").each(function(){
        if ($(this).width() > max)
            max = $(this).width();   
    });
    $("dt").width(max);
		var margin = max + 10;
		$("dd").css("margin-left",margin);
});

demo

んでこれをベースに

見出しのサイズで揃える

こういうデザインだったらどうすりゃいいかなぁ?というのを考えてました

090420-02.gif

dtの横幅+αをddの左マージンに指定してあげればよいわけですね。

とりあえずjQueryはこんなかんじでかいてみました。

▼ javascript

$(document).ready(function() {
	$("dt").each(function(){
		var dtwidth = $(this).width();
		$(this).css("width",dtwidth);
		var ddmargin = $(this).width() + 10;
		$(this).next().css("margin-left", ddmargin);
	});
});

demo

なんかもっとスマートにする方法があるような気がするんですが、わの現時点のスキルではこれが限界でした。
ふぅ・・・
dtの次の要素、ってのをどうやってやるんだろうな??というのでかなり詰まりましたね。

ここまでつくってから、dtの中身は垂直センタリングしたいな〜、と思ったので、
それはまた今度やりますか・・
なんとなく垂直センタリングってやりにくいよな〜、というのが個人的な感覚なんですが 、
みなさんどんなかんじでマークアップしてるんでしょうね。
気になるところです。

参考リンク

追記 2009.04.21 12:15

ハムさんからコメントを頂いていますが、上記のcssだとIE6で微妙にずれます。
そのあたりについては

float関連の問題で覚えておくべき5つの対策 | THE HAM MEDIA
http://h2ham.seesaa.net/article/109568808.html

を参考にしてみてください。
ハムさん、ご指摘ありがとうございます!!