2009-05-21 14 views
1

私は解決策を探していて、しばしば示唆されているものを実装しようとしましたが、別のdiv内でdivを水平方向に中央管理していません。divsのセンタリングが正常に機能しない

私のCMSでは、ページの下部に向かって最大4つの情報ブロックを表示したいと考えています。だから、2つのコンテナdiv内にゼロと4つのdivの間に入れようとしています。 4つのdivは、ページに表示されるdivの数に応じて、使用可能な幅の19%、33%または49%の幅を取得します。内側の容器は、外側の容器内で水平にセンタリングされているものとする。それによって、4つまでのdivのグループが、もちろん、水平の中心に終わるはずです。内側のコンテナはメインコンテンツと同じ幅とそれより上にある2つの列が中央に配置されているので、垂直方向に表示されます。外部コンテナは、ページの全幅をとり、背景イメージを持ちます。

次のように私のコードは以下のようになります。

私のスタイルシートで
<!-- BEGIN USER MODULES --> 
<tr> 
    <td align="left" valign="top"> 

    <?php if ($this->countModules('user1 and user2') || $this->countModules('user1 and user3') || $this->countModules('user1 and user4') || $this->countModules('user2 and user3') || $this->countModules('user2 and user4') || $this->countModules('user3 and user4')) : ?> 
     <style type="text/css">#user1, #user2, #user3, #user4 { width:49%; }</style> 
    <?php endif; ?> 
    <?php if ($this->countModules('user1 and user2 and user3') || $this->countModules('user1 and user2 and user4') || $this->countModules('user1 and user3 and user4') || $this->countModules('user2 and user3 and user4')) : ?> 
     <style type="text/css">#user1, #user2, #user3, #user4 { width:33%; }</style> 
    <?php endif; ?> 
    <?php if ($this->countModules('user1 and user2 and user3 and user4')) : ?> 
     <style type="text/css">#user1, #user2, #user3, #user4 { width:19%; }</style> 
    <?php endif; ?> 

    <?php if ($this->countModules('user1 or user2 or user3 or user4')) : ?><div id="wrap1234"><div id="user1234"> 
     <?php if($this->countModules('user1')) : ?><div id="user1" class="module_bc"><jdoc:include type="modules" name="user1" style="xhtml" /></div><?php endif; ?> 
     <?php if($this->countModules('user2')) : ?><div id="user2" class="module_bc"><jdoc:include type="modules" name="user2" style="xhtml" /></div><?php endif; ?> 
     <?php if($this->countModules('user3')) : ?><div id="user3" class="module_bc"><jdoc:include type="modules" name="user3" style="xhtml" /></div><?php endif; ?> 
     <?php if($this->countModules('user4')) : ?><div id="user4" class="module_bc"><jdoc:include type="modules" name="user4" style="xhtml" /></div><?php endif; ?> 
    </div><div class="clear"></div></div><?php endif; ?> 

    </td> 
</tr> 

私はこれを持っている:

#wrap1234 { background:transparent url(images/header_bg.png) no-repeat scroll 0 0; border-bottom:1px solid #444444; border-top:1px solid #444444; margin:25px 0 10px; padding:5px 0; text-align:center; align:center;} 

#user1234 { width:1420px; margin-left:auto; margin-right:auto; } 

#user1, #user2, #user3, #user4 { float:left; margin:5px 0; padding:5px 0; text-align:left; } 

次のようにこのすべてが置かれたテーブルと体があり、スキップ直接階層線の外側にあるもの:

<body><div id="wrapper_main"><center><table border="0" cellpadding="0" cellspacing="0" width="<?php echo $this->params->get('width'); ?>" id="main_table"><tbody> 

ボディとテーブルのCSSは以下の通りです。 Firebugを使用すると、電源を切っても差が出るものは見つけられません。

html, body, form, fieldset{margin:0; padding:0;} 
body {background:#222222 none repeat scroll 0 0; color:#777777; font-family:Helvetica,Tahoma,sans-serif; font-size:0.72em; height:100%; text-align:center;} 
#wrapper_main {background:#FFFFFF url(images/wrapper_main_bg.gif) repeat-x scroll left top; border-bottom:2px solid #CCCCCC; padding-bottom:20px; position:relative; width:100%; z-index:1;} 
td, div {font-size:100%;} 

実際のページは、開発サイトのjldev d o t joomlaloft.comから入手できます。

ご覧のとおり、内側のコンテナに固定幅と左右の余白を指定しました。これは、divを水平に中央に配置する方法としてよく示唆されています。ただし、divを含む内部コンテナは左揃えになります。

これを動作させることはできますか?あるいは、私は代替案を試すべきですか?例えば、左端と右端の情報ブロックdivに左右に可変マージンを入れます。

私はstackoverflowに多くの非常に良い答えがあることを知ったので、誰かが私が間違っていた場所を教えてくれることを期待しています。私はインスピレーションから外れています...あなたが与えることができる任意の助けのために事前に多くのおかげで!

PS Btwこれは私が今まで見た中で最も直感的かつ実用的なフォーラムの一つでなければなりません!

答えて

1

を幅とマージンを使用することをお勧めしません。私のブラウザでは、サイトの幅は1200ピクセル、#user1234は1420ピクセルです。

#user1234を幅:90%に設定します。各ユーザーdivは幅:25% 4つのdivがあるとき。オーバーフローを置く:隠された; #user1234で浮動小数点数をクリアします。

#user4 divのテキストが空き領域を満たしていないため、#user1234 divが中央揃えされているように見えません。背景色を置く:#c00; on#user1234で、境界線の位置を確認します。 (注意:オーバーフローが必要です:そうでない場合は#user1234は高さがなく、背景色は表示されません)。

Re:前のコメント - 同じタグに幅と余白を使用することに問題はありません。

+0

1420pxの幅は完全に誤算されました。実際の問題を指摘したので、これを投票します。幅が1000pxの正しい量に設定されると、すべてが機能しました。ありがとう!そうでなければ最高の答えだったはずの彼の代わりにncallawayにも感謝します。 –

0

私がDIVを中心にしたいときに行ったことは、それを相対的に配置することでした。左を50%、余白を左に設定するとdivの幅の1/2になり、divをコンテナの中心に完全に配置します。これまで私はこれを使ってきましたが、私の知る限り、ほとんどのブラウザ(IE6 +、IE以外のブラウザ)では動作します。これを行うより良い方法があるかもしれませんが。

#user1234 { position: relative; 
      left: 50%; 
      margin-left: -710px; 
      width:1420px;} 
+0

これはほとんど私のために働いたが、左マージンをずっと低く設定しなければならなかった。エミリーの答えまでは、幅の設定が完全​​に誤算されていたことが明らかになった。適切な幅でこれはうまくいきました。これは良い選択肢です。 –

+0

真。エミリーの答えは本当にあなたの仕事がうまくいかなかった理由の核心になっています。あなたがうまくいく何かを得てうれしい! –

1

なぜあなたは幅を使用しているのかわかりません:1420px for。 CSSの適切なレイアウトチュートリアルについては、thisまたは​​サイトをご覧ください。もう1つの選択肢はcss gridです。

私は個人的にテーブルを取り出して流体グリッドに切り替えることをお勧めします。これはあなたのサイトに最適です。それは少しの学習曲線を持っていますが、私を信じて、あなたはずっと幸せになるでしょう。あなたのサイトでは多くの作業が行われています。 CSSをより良く変更することはできますが。 CSSのfreenodeは、すぐに助けが必要な場合は通常、良いアドバイスと批判を与えます。

もう一つは、内側の中心のdivが、それはdiv要素を含んだより広いことはできません同じタグで

+0

これらの素晴らしいリンクをありがとう!他の答えは短期的な解決策として実用的ですが、これらの意見は私の目を開いて、次の段階でテーブルレスWebサイトを作る計画にうまく収まります。 –

関連する問題