2012-02-10 7 views
20

コンテナ内に2つのdivがあります。 1つは左に浮動し、1つは右に浮動する。両方ともコンテナの約60%の幅で、中央に重なるように設計されています(右のdivが優先されます)。CSS:2つの浮動要素が重なり合うようにする

浮動小数点のように縦に積み重ねるのではなく、どうやって重ねるのですか?右の要素を無条件に配置すると、包含するdivは内容に合わせて展開されません。

コード(そのサーバは唯一のATM読まれるよう、残念ながら私はこれをjsfiddleすることはできません):あなたは絶対位置でのdivを作成し、あなたがなりたいものに正のzインデックスを追加することができ

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

#container { 
    width: 400px; 
    background-color: #eee; 
} 

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: inline; 
    float: left; 
} 

#right { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: inline; 
    float: right; 
} 
+0

正しい場合、「display:inline」属性でも寸法を設定することはできません。つまり、ディスプレイをインラインに設定した場合、幅や高さを定義することは想定されていません。 あなたは浮かんで、インラインは私には役に立たないようです。 z-indexは、javascriptを使って制御できます:hoversまたはclick()(2つの要素間の値を入れ替えます)。 あなたのインターフェースはどのくらい動的ですか? – benqus

+0

'display:inline'は冗長です。' float'される要素は自動的に 'display:block'です。 – Gareth

答えて

37

使用右ボックスがオーバーラップさせるように、左側のボックスに負margin-right

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: inline; 
    float: left; 
    margin-right:-104px; 
} 

104個の画素が境界のため4PXプラスオーバーラップ量です。

ここにはjsfiddleがあります。

+0

とても素晴らしいです。私はしばらくの間、浮動列をオーバーラップするソリューションを探しています(自動高さタブhttp://j.mp/1iQ30Fz用)これは完璧なソリューションです! – sstur

+3

私はこれを好まない。それは多くの "カスタム"のようです。 2番目の要素のサイズが100pxから何かに変更された場合、問題が発生する可能性があります。 –

0

フロント。

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

#container { 
    width: 400px; 
    background-color: #eee; 
    position: relative; 
} 

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: block; 
    position: absolute; 
    top: 0px; 
    left: 0px; 
} 

#right { 
    width: 250px; 
    border: 1px solid #ccc; 
    display: inline; 
    position: absolute; 
    top: 0px; 
    right: 0px; 
    z-index: 1; 
} 
+0

"0px"を定義するときに "px"が必要でないことがわからない場合は、top:0;いくつかの文字を保存します – thenetimp

+1

私はこれをすでに行っていますが、親コンテナが内容に合わせて展開されないことを意味します。 – Chris

+0

コンテナの幅とdivの幅を固定値ではなくパーセンテージで指定できます。例えばコンテナ幅:100%、#左幅60%、右幅60%。 –

2

ポジショニングでのみ実行できます。

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

#container { 
    width: 400px; 
    background-color: #eee; 
    position: relative; 
} 

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    position: absolute; 
    left: 0; 
    top: 0; 
    z-index: 1; 
} 

#right { 
    width: 250px; 
    border: 1px solid #ccc; 
    position: absolute; 
    right: 0; 
    top: 0; 
    z-index: 2; 
} 
-1

この方法を試してください。

<div id="container"> 
    <div id="left">left</div> 
    <div id="right">right</div> 
</div> 
<style> 
#container { 
    width: 400px; 
    background-color: #eee; 
} 

#left { 
    width: 250px; 
    border: 1px solid #ccc; 
    float: left; 
} 

#right { 
    width: 250px; 
    border: 1px solid #ccc; 
    margin-left: 150px; 
    position: absolute; 
} 
</style> 
+0

トリッキーではなく、自然にアライメントする方がよいでしょう。 –

-1

どのようにネガティブマージンと右のdivを引っ張っについて。このようなもの?

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

#container { 
    position: relative; 
    width: 400px; 
    height: 110px; 
    background-color: #eee; 
} 

#left { 
    width: 250px; 
    height: 100px; 
    border: 1px solid green; 
    float: left; 
} 

#right { 
    position: relative; 
    float: right; 
    width: 250px; 
    height: 100px; 
    top: -100px; 
    border: 1px solid red; 
} 
0

両方が収まるように容器を大きくします。次に、相対的な位置と左の値を使用します。

1

余分なdivを追加できますか?

<div id="container"> 
    <div id="left"> 
     <div id="left-inner">left</div> 
    </div> 
    <div id="right">right</div> 
</div> 
<style> 
#container { 
    width: 400px; 
} 

#left { 
    float: left; 
    width: 0px; 
    overflow:visible; 
} 

#left-inner { 
    float: right; 
    width: 250px; 
} 

#right { 
    width: 250px; 
} 
</style> 
+1

スタイリングを実現するための構造を追加すると、HTMLとCSSが不適切に使用されます。 –

+0

@Bradley A. Tetreault:原則としてこれは正しい。しかし現実は最悪です。IE6-8を例に挙げてください。すべての修正/ハックはdiv.fixer(またはdiv#fixer)の多くを含んでいます。 – llamerr

0

優れたソリューション:http://jsfiddle.net/A9Ap7/237/


ので、使用いけない:

MARGIN-LEFT:100px... 

== または類似のコマンドを。
問題は、左の要素のサイズが変更された場合、ウィンドウのサイズが変更された場合などです。問題が発生します。 なので、このようなカスタムの汚い「トリック」は使用しないでください。しかし、htmlの内部では通常の構造にしてください。

+0

これは2つの要素を許可するという問題を解決しません。オーバーラップする容器の幅の60%。 – Gareth

関連する問題