2015-09-28 8 views
8

voglio raggiungere questo risultato con HTML e CSS:elementi posizione intorno un altro con i CSS

enter image description here

Se la scatola rossa è un grande contenuto (Un contenuto PDF), e quelli blu organizzare intorno ad esso . Prima al suo fianco e poi, quando c'è abbastanza spazio, sotto di esso.

La mia struttura HTML è la seguente, ma posso cambiarlo:

<div id="outerContainer"> 
    <div id="bigRedBox"></div> 
    <div> 
     <ul id="blueContentList"> 
      <li class="blueContent"></li> 
      <li class="blueContent"></li> 
      <li class="blueContent"></li> 
      <li class="blueContent"></li> 
      <li class="blueContent"></li> 
     </ul> 
    </div> 
</div> 

Ormai, il posizionamento rimane in questo modo:

enter image description here

non so se questo è possibile senza creare due contenitori (uno sul lato, uno sotto), cosa che posso fare, ma mi farebbe scrivere un sacco di JS.

+1

Se conosci la larghezza di tutto in anticipo, non puoi semplicemente "float: left' sul div rosso? Quindi tutto quello che devi fare è assicurarti che le div blu siano della larghezza appropriata per adattarsi a 1 colonna sul lato – Basic

+0

Vuoi guardare in flexbox per qualcosa di simile. – Rob

+0

Oltre a @Rob puoi anche dare un'occhiata a [Isotope] (http://isotope.metafizzy.co/) – Jan

risposta

2

Si potrebbe fare qualcosa di simile per le voci di elenco, naturalmente, non è reattivo, ma è possibile utilizzare% o di media query per ottimizzarlo.

#blueContentList li{ 
    width: 100px; 
    height: 100px; 
    background-color: blue; 
    margin: 10px; 
    float: left; 
} 

http://jsfiddle.net/tomsarduy/ywms6soq/

+0

Ho raggiunto esattamente quello che volevo, grazie! –

1

È possibile controllare la struttura della griglia già fornita da bootstrap. In alternativa puoi anche provare a raggiungere questo obiettivo usando l'float : left per tutti gli elementi quadrati.

9

È possibile ottenere ciò che si desidera facendo galleggiare tutti gli elementi e diventare fratelli l'uno dell'altro.

#bigRedBox { 
 
    width:80%; 
 
    height:150px; 
 
    background-color:red; 
 
    float:left; 
 
    margin:5px; 
 
} 
 
.blueContent { 
 
    width:15%; 
 
    height:50px; 
 
    background-color:blue; 
 
    float:left; 
 
    margin:5px; 
 
}
<div id="outerContainer"> 
 
    <div id="bigRedBox"></div> 
 
    <div class="blueContent"></div> 
 
    <div class="blueContent"></div> 
 
    <div class="blueContent"></div> 
 
    <div class="blueContent"></div> 
 
    <div class="blueContent"></div> 
 
</div>

+0

Sarebbe meglio mantenere la struttura delle liste, ma questa è una soluzione semplice. –

2

Io personalmente non userei galleggianti. Suggerisco un tipo di colonna/riga di layout. ecco un violino: http://jsfiddle.net/xa91f4Lw/

basta usare display: inline-block e fare uso di semplici div s quando si desidera qualcosa di essere un nuovo "riga"


nuovo violino: http://jsfiddle.net/xa91f4Lw/1/

o questo: http://jsfiddle.net/xa91f4Lw/2/

+0

Questo sarebbe difficile per me, perché questa pagina è dinamica e dovrei calcolare dove mettere ciascun elemento. Perché dovresti evitare l'attributo float? I float –

+1

estraggono gli elementi dal normale layout della pagina, cosa che non mi piace. sei costretto a usare più float, o dover calcolare le altezze/larghezze delle cose. L'utilizzo del blocco inline è utile per le pagine dinamiche poiché il contenitore viene ridimensionato in base alla quantità di contenuto all'interno della pagina. Aggiornerò il violino con un'alternativa –

Problemi correlati