2012-02-10 25 views
20

Ho due div all'interno di un contenitore. Uno galleggia a sinistra e uno galleggia a destra. Entrambi sono larghi circa il 60% del contenitore e sono progettati in modo tale che si sovrappongano al centro (il div destro ha la priorità).CSS: sovrapposizione di due elementi mobili

Come faccio a far sì che si sovrappongano anziché impilare verticalmente come fanno di solito gli elementi mobili? Se posizioni in modo abusivo l'elemento giusto, il div contenente non si espande per adattarsi al contenuto.

Codice (purtroppo non riesco jsfiddle questo come i loro server sono di sola lettura atm):

<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

Se sono corretto, l'attributo "display: inline" non consente anche di impostare le dimensioni. Ciò significa che se si imposta il display su inline non è necessario definire larghezze e/o altezze. E tu galleggi, quello in linea sembra inutile per me. Vorrei usare z-index che puoi controllare tramite javascript su: hovers o click() s (scambia i valori tra i due elementi). Quanto è dinamica la tua interfaccia? – benqus

+0

Il 'display: inline' è ridondante in quanto ogni elemento che è' float'ed è automaticamente 'display: block'. – Gareth

risposta

37

Uso negativo margin-right sulla scatola sinistra in modo che la scatola di destra è autorizzato a sovrapporsi:

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

Le 104 pixel è la quantità di sovrapposizione più 4PX per i bordi.

Ecco uno jsfiddle.

+0

Così fantastico. Sono stato alla ricerca di una soluzione per sovrapporre colonne flottate per un po '(per le schede altezza automatica http://j.mp/1iQ30Fz) Questa è una soluzione perfetta! – sstur

+3

Non mi piace. Sembra essere un caso molto "personalizzato". I problemi potrebbero verificarsi se la dimensione del secondo elemento viene modificata da 100 px a qualsiasi ... –

0

Si potrebbe creare i div con posizione assoluta e aggiungere un z-index positiva a quella che si vuole essere in davanti.

<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

Nel caso in cui non sapessi che il "px" non è necessario quando definisci "0px" puoi usare solo top: 0; ti ho salvato alcuni caratteri – thenetimp

+1

Ho già fatto questo ma significa che il contenitore genitore non si espanderà per adattarsi al contenuto – Chris

+0

Puoi inserire le larghezze del contenitore e dei div con percentuali invece di valori fissi. per esempio. larghezza del contenitore: 100%, larghezza # larghezza 60% e larghezza # 60%. –

2

È possibile farlo solo con il posizionamento.

<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

Provate questo:

<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

dovrebbero essere meglio allineati in modo naturale, invece di ingannare. –

-1

ne dite di tirare il div destro con margine negativo. Qualcosa come questo?

<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

Rendere il contenitore più grande in modo che sia in forma. Quindi usa la posizione relativa e a sinistra: -100px o qualunque cosa su quello a destra.

1

Puoi aggiungere un ulteriore div in là?

<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

L'aggiunta di una struttura aggiuntiva per lo styling è un uso improprio di HTML e CSS. –

+0

@Bradley A. Tetreault: come regola generale è giusto. ma la realtà è peggiore di questo - prendi IE6-8 come esempio e tutte le sue correzioni/hack, che coinvolge anche molto div.fixer (o div # fixer) – llamerr

0

Eccellente Soluzione: http://jsfiddle.net/A9Ap7/237/


Quindi, non uso:

MARGIN-LEFT:100px... 

== o comandi simili.
Il problema è che, se la dimensione degli elementi di sinistra viene cambiata, se la finestra viene ridimensionata o ecc., Allora ti creerà problemi! quindi, non usare questi "trucchi" sporchi personalizzati, ma crea una struttura normale all'interno di html, quindi dovrebbero essere ordinati naturalmente.

+0

Questo non risolve il problema di consentire due elementi che sono Il 60% della larghezza del contenitore si sovrappone. – Gareth

Problemi correlati