2015-06-09 4 views
8

Ho pensato che sarebbe stato semplice ma si sta rivelando un po 'di mal di testa. Sto cercando di ricentrare una griglia di immagini quando l'utente ridimensiona il browser e fa in modo che uno o più di essi si sovrappongano alla riga successiva.Elementi di ri-centraggio CSS su involucro

Ho provato a fornire il display della griglia: blocco in linea; ed è genitore un valore di allineamento del testo: centro; ma questo non ricentra gli elementi quando si avvolgono in una nuova riga. Aiuto apprezzato

Per una visualizzazione di ciò che sto cercando di ottenere vista picture here http://ianclarke.ca/div-reflow.png.

HTML:

<div class="parent-wrapper"> 
    <div class="child-wrapper"> 
     <!-- Worpress loop to load many thumnails --> 
     <?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?> 
     <div class="project-thumbnail"> 
     <?php the_post_thumbnail('thumbnail'); ?> 
     </div> 
     <?php endwhile; ?> 
    </div> 
</div> 

CSS:

.parent-wrapper 
{ 
width:100%; 
text-align: center; 
} 

.child-wrapper 
{ 
display:inline-block; 
} 

.project-thumbnail{ 
float:left; 
border:2px solid black; 
min-width: 269px; 
max-width: 269px; 
} 
+0

Perché non 'Larghezza: 269px'? – Adam

+1

Dovrai inserire '.child-wrapper' all'interno di ogni ciclo per copiarlo su ogni bambino. o date 'display: inline-block;' a '.project-thumbnail' e lasciate fuori' .child-wrapper' –

+0

Lo screenshot non è corretto in base al codice che avete, l'ultimo elemento dovrebbe essere al centro o quasi al centro . ad es. http://jsfiddle.net/6qp5g8yd/ – Stickers

risposta

1

Questa è la soluzione migliore che posso pensare con i CSS solo, la parte magica è le query @media. Ovviamente dovrai fare i conti per adattarsi al tuo caso.

JsFiddle Demo

body { 
 
    margin: 0; 
 
} 
 
.parent-wrapper { 
 
    margin: auto; 
 
    width: 500px; 
 
    padding: 5px 0; 
 
    font-size: 0; 
 
} 
 
.child-wrapper { 
 
    display: inline-block; 
 
    width: 100px; 
 
    font-size: 16px; 
 
} 
 
.child-wrapper img { 
 
    max-width: 100%; 
 
    height: auto; 
 
    padding: 5px; 
 
    vertical-align: top; 
 
    box-sizing: border-box; 
 
} 
 
@media screen and (max-width: 499px) { 
 
    .parent-wrapper { width: 400px; } 
 
} 
 
@media screen and (max-width: 399px) { 
 
    .parent-wrapper { width: 300px; } 
 
} 
 
@media screen and (max-width: 299px) { 
 
    .parent-wrapper { width: 200px; } 
 
} 
 
@media screen and (max-width: 199px) { 
 
    .parent-wrapper { width: 100px; } 
 
}
<div class="parent-wrapper"> 
 
    <div class="child-wrapper"> 
 
     <img src="//dummyimage.com/100" /> 
 
    </div> 
 
    <div class="child-wrapper"> 
 
     <img src="//dummyimage.com/100" /> 
 
    </div> 
 
    <div class="child-wrapper"> 
 
     <img src="//dummyimage.com/100" /> 
 
    </div> 
 
    <div class="child-wrapper"> 
 
     <img src="//dummyimage.com/100" /> 
 
    </div> 
 
    <div class="child-wrapper"> 
 
     <img src="//dummyimage.com/100" /> 
 
    </div> 
 
    <div class="child-wrapper"> 
 
     <img src="//dummyimage.com/100" /> 
 
    </div> 
 
</div>

+0

Grazie. Ora lo proverò. finire con qualche punto di rottura ma è molto più pulito di segnaposti invisibili –

+0

Sono andato con questa soluzione in quanto avrei potuto automatizzarlo abbastanza rapidamente in SASS e non ha coinvolto elementi extra. Grazie. –

0

Hai provato:

.child-wrapper{margin:0 auto;} 

in modo che rimanga centrato? Di solito funziona.

+0

Grazie. Ci ho provato, ma senza fortuna. Il child-wrapper si "restringe per adattarsi" alle miniature, ma una volta che una miniatura si avvolge alla riga successiva il div child assume la larghezza del div genitore. –

0

Aggiungere float:left alla classe .project-thumbnail per i punti di interruzione del browser specifici per le diverse dimensioni di browser/schermo/dispositivo.

.project-thumbnail{ 
    float:left; 
    border:2px solid black; 
    min-width: 269px; 
    max-width: 269px; 
} 

Aggiungi margin: 0, auto; alla classe successiva.

.child-wrapper 
{ 
    margin: 0, auto; 
} 

Passando attraverso il codice PHP ho capito che il DIV con il nome della classe .project-thumbnail ottiene ripetuto attraverso WHILE iterazioni del ciclo.

+0

Le mie scuse, la miniatura del progetto ha un attributo float: left, stavo modificando gli stili non necessari per mantenere la domanda chiara ed eliminata per errore. Ho una visuale wireframe della pagina in alto per darti un'idea di cosa sto cercando di ottenere. –

+0

Ok. È bello vedere la tua preoccupazione di pulire il codice prima di postarlo qui. Lo apprezzo. :). Ho anche incluso il margine: 0 auto; 'alla classe' .child-wrapper' ??? –

+0

L'ho provato senza fortuna, in questo momento quello che è (quasi) funzionante è il vecchio genitore - testo: centro allineato e bambino - display: trucco a blocchi in linea. Tuttavia le mie miniature che si avvolgono su una nuova riga sono allineate al centro. Mi piacerebbe che fossero allineati a sinistra. –

1

Ho trovato una domanda molto simile con due risposte funzionali. Uno usa JS e l'altro usa elementi segnaposto. Né sono molto carini, ma entrambi sembrano aggirare il problema dell'involucro di spazi bianchi in linea.

Shrink-wrap and center a container for inline-block elements

+0

Questi stanno suonando come l'unico vero modo per ottenere questo :( Proverò il modo JS e ti faccio sapere se riesco a farlo funzionare –