Hatena::Groupweb

vantguarde

 | 

2.2

HTML5とレンダリング

| 23:27

Start filling in the rendering section.*

というわけで、レンダリングのセクションが追加されはじめました。

もちろんnon-normativeですが、「デフォルトスタイルシートを提供してはどうか?」みたいな意見も結構多いんですよね。んーまあ、わからなくもない。。

しかしかなり後になるかなあと思ったRenderingが追加されはじめるとは、今年中のLCを本気で狙ってますね*1

centerを甘くみちゃいけない

| 01:24

このエントリが去年の9月なので、今さら書くのもアレなんですが。

Twitterがこの頃デザイン変更をして、そのときにどうやらcenterを使ってたらしいんですね(今は無くなってますが)。それで「<center>って!<center>って!」みたいに言ってるエントリなんですが、center、ちょっと面白いんですよね。

ほとんどの解説サイトには「非推奨なのでこれからはmargin-leftmargin-rightautoを指定しましょう」みたいな事が書かれてると思うのですが、この指定だけだとcenterの挙動って再現できないんですよ。

ちょっと長いですが、テストケースを作ってみました。

<!DOCTYPE html>
<meta charset=utf-8>
<title>"center," the dwarf element</title>
<style>
  center { border: 1px dotted #f00; margin: 20px; width: 600px }
  p      { border: 1px dotted #0f0; margin: 20px; width: 400px }
  div    { border: 1px dotted #00f; margin: 20px }
</style>

<center>
  center内のテキストはセンタリングされます。
</center>

<center>
  <p>center内の段落もセンタリングされます。
</center>

<center>
  <div>
    ボックスの中にある段落はどうでしょうか?
    <p>ボックスの中にある段落もセンタリングされます。
  </div>
</center>

<center>
  <div>
    では、もうひとつdivを増やしてみましょう。
    <div>
      さらに囲ったボックスの中にある段落はどうでしょうか?
      <p>センタリングされます。
    </div>
  </div>
</center>

要は、centerの挙動ってこうなんですよ。

  • 内容とブロック要素を真ん中に配置する
  • それ自身はセンタリングしない
  • テキストだけじゃなくて、ボックスの配置まで子孫に継承する

2つ目はいいとして、3つ目ですね。継承しちゃうんです。

この変な特徴が、GeckoやWebKitでtext-alignの値に-moz-centerという独自の値が定義されてる理由だったりします。CSS WGでも議題に上がったことがあるくらい、おもしろい話だったりするんですよ。

なのでただdiv.center { text-align: center; margin: 0 auto }とかだと、それは真ん中寄せにはなるけどcenterのエミュレーションではないんだよ!ってことです。まあ、継承まで考えて使う人がどれくらい居るのかはわかりませんけど。

とまあ、centerはないかなーと言ってた理由のひとつがこれだったりします。

*1:そこからものすごく長いでしょうけど

kotarokkotarok2009/02/02 01:38確かalign="center"でも同じような挙動になった記憶があります。だから昔は外側の要素でalign="center"して内側の要素でせっせとalign="left"に戻してたような気が。それに比べると左右マージンautoによるセンタリングは一手間なくなって気が楽だな、と思います。


言いたいことがあったのでブクマじゃなくてちゃんとコメント欄で直接言いました!!これで僕も人に好かれるいい人間ですね!

securecatsecurecat2009/02/09 02:29>言いたいことがあったのでブクマじゃなくてちゃんとコメント欄で直接言いました!!これで僕も人に好かれるいい人間ですね!

vantguardeさん的には、ブクマで、しかもはてブよりもdeliciousでコメントして欲しいのではないでしょうか[謎]。

 | 
Contact: @vant / lepetitcroissant@gmail.com.