忍者ブログ

The Preparation Room

テンプレートを製作・テストしています。


[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

センタリングあれこれ。

CSSを使ってブロック要素をセンタリング(中央揃え)する時の基本は、
1. widthで幅を指定(%可)
2. marginで左右の隙間をautoにする
例:div.container{
width:700px;
margin-right:auto;
margin-left:auto;
}

だが、Win IEはこれではセンタリングしてくれない。
Win IEは親要素のtext-align:centerが本来ならばインライン要素限定なのにブロック要素にも適応されるので、これを利用して、
1. widthで幅を指定(%可)
2. marginで左右の隙間をautoにし、text-alignでテキストの表示位置を指定する。
3. 親要素でテキストをセンタリングする。
例:body{
text-align:center;
}
div.container{
width:700px;
margin-right:auto;
margin-left:auto;
text-align:left;
}

DIVブロックについてはこれでOK。

しかし、tableはMac IEの互換モードでは上の方法でセンタリングしてくれない(標準モードはOK)。
親要素をtext-align:leftにするとセンタリングされる。
ここでWin IEと指定がかぶって困るので、Win IEが対応していない(無視する)子供セレクタを利用する。
ついでにMac IEはテーブルはmarginを一括指定するとダメだという我侭っぷりなので、個別指定にするのも忘れずに、
1. widthで幅を指定(%可)
2. margin-rightとmargin-leftで左右の隙間をautoにし、text-alignでテキストの表示位置を指定する。
3. 親要素でテキストをセンタリングする。
4. 親要素で子供セレクタを使ってテキストを左寄せにする。
例:body{
text-align:center;
}
html>body{
text-align:left;
}
table.container{
width:700px;
margin-right:auto;
margin-left:auto;
text-align:left;
}

↑この書き方でほぼブロック要素のセンタリングはいけると思う。
そういえばブロック要素のセンタリングに関して、Netscapeもめんどくさいバグがある。
widthで指定した幅が絶対指定(px)の場合、指定した幅よりもウィンドウサイズを小さくすると、ブロック要素の左側が隠れてしまう。
marginをautoにした場合、普通は最小のマージンが0になるのだが、なぜかマイナスになってしまうようだ。
左のマージンを0など、auto以外の値にすれば隠れる事はなくなるのだが、それだとウィンドウサイズが大きくてもセンタリングされない。

ちなみに、tableタグの場合はウィンドウ幅よりテーブルの幅が大きくてもバグが起きず、問題なく表示される。

ということは‥、display:table;とdisplay:table-cell;を使ってやると解決するんだなこれが。
意外にも、Netscape6以降ぐらいならこれに対応してる様子。
display:table;がtableタグにあたり、display:table-cell;がthやtdタグにあたる。
一段ならばtrにあたるdisplay:table-row;は書かなくてもOK。
入れ子が一つ増えるのは気分が悪いけど、隠れて読めなくなるよりまし‥かもしれない。
PR

Comments

こんにちは。

こんにちは。報告なのですが、windowsIEで見ると下のようになります。
どうすればいいでしょうか。

http://file.coso2.blog.shinobi.jp/Img/15/

さかな (93773bccf7) on Jun 03, 2006 [EDIT]

すみません、どうも見苦しいようですね(^^;
桜のに戻しておきます。
σ(^ー゜)の環境がMacなため上手くテンプレを組めていないだけで、決してさかなさんの設定は関係ないです。
テンプレテスト用のブログなので度々おかしなことになっているとは思いますが、「苦戦してるな」ぐらいに見守っていただければ(笑
ちょっとづつ原因を探して直していきますので、気軽に「まだおかしいよ」とかつっこんでやって下さい。
わざわざキャプまで撮って頂いてありがとうございました!

miu_uim on Jun 04, 2006

sine

死ね

ta-san (29f02ff33d) on Jun 05, 2006 [EDIT]

小学生のような荒らしですね┐(´ー`)┌マタカイ?
一応名前があるのですが、そんなの呼ぶはずがないじゃないですか、60.41.111.144さん。
σ(^ー゜)は暴言吐かれるようなことをしたでしょうか?

miu_uim on Jun 06, 2006

コメント

手っ取り早い方法は、「標準モード」にして「width指定」、「横marginをauto」だと思います。


ページ全体をセンタリングしたいならわざわざ
HTML部分に

<div id="container"></div>

と書かず、スタイルシートで「bodyに対して」

body{
display:block;
margin-right:auto;
margin-left:auto;
width:任意の値
}

とすればよいのでは?


と、参考程度に。

スタイリスト(えw (9a89bb4237) on Jun 08, 2006 [EDIT]

初めまして、スタイリストさん。
覚え書きにコメントありがとうございます。

一応「任意のブロック要素をセンタリングする」のが目的なのでこれでよいかな?と思います。
例は親要素であることが分かりやすいようにbodyを使ってますが。

ttp://cssbug.at.infoseek.co.jp/detail/winie/b120.html
↑こういうのがあったので、bodyに対して(100%以外の)widthは指定するものじゃ無いと思っていたのですが、教えて頂いた方法でも大丈夫なんですか?
Winでの確認が出来ないので‥(^^;
CSSは難しいですね。

miu_uim on Jun 09, 2006

コメント2

「任意のブロック要素に」でしたか。
自分はてっきり、ページ全体のセンタリングかと勘違いしていました。

バグ?についてですが、bodyに「display:block」を書くとよいと思いますよ。

IE互換又はIE標準のデフォルトでbodyがインラインになっているのが問題なのかと思っているのですが。そのような記事をどこかで読んだ記憶があります。

body自体にdisplay:blockを書くのは問題ないみたいですね。

ttp://www.w3.org/TR/2005/WD-CSS21-20050613/visuren.html
(下の方の9.8 Comparison of ・・・)

スタイリスト(えw (9a89bb4237) on Jun 12, 2006 [EDIT]

ページ全体のセンタリングの需要は高いので有益情報ありがとうございます。
divで囲まなくいでセンタリングするのはSEO系には喜ばれそうなので、今度やってみたいと思います。

Win IEはbodyがインラインになってるんですか?!
びっくりです。
凄いバグだなぁ(^^;

miu_uim on Jun 15, 2006

Leave a comment

※メールアドレスは公開されません。

 Vodafone絵文字 i-mode絵文字 Ezweb絵文字

Trackback

※トラックバックは管理人の了承後に公開されます。


ブログ内検索(4)

QRコード(4)


Template Designed by miu_uim

忍者ブログ [PR]