2013-10-10 17 views
14

Qui è quello che sto cercando di realizzare ... Come impilare automaticamente i div verticalmente all'interno di un genitore?

  1. "genitore" ha position: relative
  2. "div 1-3" hanno position: absolute

Tuttavia, ogni volta che fai questo, mi trovo a dover assegnare specifici valori "top" nel mio CSS. Quindi div 1 potrebbe essere in cima: 50px, div 2 sarebbe in alto: 150px, e div 3 sarebbe in alto: 225px;

C'è un modo per assicurarsi che i div continuino a raggrupparsi all'interno del genitore senza assegnare valori massimi e/o posizionamento assoluto?

+0

Puoi pubblicare il tuo codice? Dovrebbero avere questo comportamento di default. –

risposta

17

A div dovrebbe già essere visualizzato come blocco e occupare una "riga" completa. Ecco alcuni HTML e CSS per fare un esempio, confrontarlo con il codice:

http://jsfiddle.net/mWcWV/

<div id="parent"> 

    <div class="child">Foo</div> 
    <div class="child">Bar</div> 
    <div class="child">Baz</div> 

</div> 
2

Gli elementi div sono elementi di blocco, il che significa che eseguiranno una riga intera e che qualsiasi elemento accanto a essi salterà una riga. Basta fare:

<div></div> 
<div></div> 
<div></div> 

Se questo non dovesse funzionare, probabilmente avete bisogno di metterli in display: inline-block;

0

Basta rimuovere il posizionamento assoluto. Centra i div usando margin:auto e poi fornisci i margini verticali che ti piacciono.

0

si può dare margine a div interno.

+2

Prova a spiegare la tua risposta con un esempio o una demo. È troppo breve per essere accettato come risposta. – thefourtheye

2

deve essere dritta:

HTML:

<div class="container"> 
    <div class="red"></div> 
    <div class="blue"></div> 
    <div class="green"></div> 
</div> 

CSS:

.container { 
    position: relative; 
    width: 500px; 
    height: 500px; 
    background-color: #ffbf00; 
} 
.red { 
    background-color: #f00; 
    width: 200px; 
    height: 150px; 
    margin: 5px auto; 
} 
.blue { 
    background-color: #0f0; 
    width: 200px; 
    height: 150px; 
    margin: 5px auto; 
} 
.green { 
    background-color: #00f; 
    width: 200px; 
    height: 150px; 
    margin: 5px auto; 
} 

Controllare questo fiddle.

1

Durante l'uso di file css ...

div 
{ 
    display : block; 
} 

che darà una linea di rottura per ogni div blocco e che la funzione è di default e non usano relative - absolute tecnica.

+0

Ma la domanda è: se ho un menu in linea e che tre scatole sono disposte in linea con la tecnica (parent-child) (relativo -assoluto). Come può essere possibile – user107625

+0

In questo modo ogni 'div' * immediatamente * viene posto immediatamente dopo il suo predecessore in modo verticale piuttosto che in modo orizzontale (vale a dire in una colonna piuttosto che in una riga). * Non * posizionerà alcuno spazio tra loro, che l'illustrazione della Domanda suggerisce è il comportamento desiderato. Inoltre, dovresti spiegare * perché * pensi che non dovrebbero usare la tecnica 'relative' /' absolute'. – toonice

Problemi correlati