2013-04-06 25 views
5

"Płytki" (białe pola) widoczne na obrazku 1 reagują na ekran użytkownika. Jeśli rozmiar ekranu nie jest wystarczająco duży, pozostawia lukę po prawej stronie. Co chcę zrobić jest osiągnięcie skutku, jak widać na zdjęciu 2. Oto mój kod do tej pory dla tych konkretnych elementów ..CSS Center Responsive DIV

HTML:

<div class="main"> 
    <div class="inner"> 
     <div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div><div class="tile"></div> 
    </div> 
</div> 

CSS:

.main{ 
    width:100%; 
    background: #000; 
} 

.main .inner{ 
    margin:10px; 
    min-width: 140px; 
    background: red; 
} 

.main .inner .tile{ 
    margin:10px; 
    height: 120px; 
    width: 120px; 
    background: #fff; 
    display: inline-block; 
} 

IMAGE 1:enter image description here

IMAGE 2:enter image description here

+0

Pojedyncza siatka układu nie obsługuje obecnie tej funkcji. Aby uzyskać wyjaśnienie, dlaczego nie, zobacz [tę odpowiedź] (http://stackoverflow.com/a/15231163/1306809).Ale wiele plansz o różnych rozmiarach może go obsłużyć, używając zapytań o media, aby wybrać odpowiedni rozmiar na podstawie rozmiaru ekranu, jak zasugerował @axrwkr. –

Odpowiedz

7

Można to zrobić z mediami zapytań, aby ustawić szerokość klasy .inner przy różnych szerokościach przeglądarki, a następnie ustawić właściwości margin-left i margin-right na auto, aby go wyśrodkować. Ustaw właściwości padding-top i padding-bottom klasy .main zamiast ustawiania górnego i dolnego marginesu na klasie .inner. Użyj kombinacji padding w klasie .inner i border w klasie .tile, aby rozstawić równomiernie płytki na siebie 10px.

Szczegółowy opis zapytaniami mediów: CSS media queries

example

css

.main{ 
    width: 100%; 
    background: #000; 
    padding-top: 10px; 
    padding-bottom: 10px; 
} 

.main .inner{ 
    padding: 5px; 
    font-size: 0px; 
    display: table; 
    margin-left: auto; 
    margin-right: auto; 
    background-color: red; 
} 

.main .inner .tile{ 
    margin: 0px; 
    padding: 0px; 
    border: 5px solid red; 
    height: 120px; 
    width: 120px; 
    background: #fff; 
    display: inline-block; 
} 

Ustaw zapytania mediów dla każdej szerokości okna przeglądarki, w tym przykładzie mam tylko poszedł do 800px, ale możesz dodać tyle innych, ile potrzebujesz.

CSS (ciąg dalszy)

@media (min-width: 280px) { 
    .main .inner{ 
     width: 130px; 
    } 
} 

@media (min-width: 320px) { 
    .main .inner{ 
     width: 260px; 
    } 
} 

@media (min-width: 480px) { 
    .main .inner{ 
     width: 390px; 
    } 
} 

@media (min-width: 640px) { 
    .main .inner{ 
     width: 520px; 
    } 
} 

@media (min-width: 800px) { 
    .main .inner{ 
     width: 780px; 
    } 
} 

Zapytania nośników są używane do ustawiania szerokości .inner wielokrotności 130px która jest szerokość .tile z obramowaniem 10px.

Jeśli chcesz zmienić odstępy pomiędzy płytkami trzeba byłoby zmieniać border na klasie .tile Z padding na klasie .inner Z margin-top i margin-bottom na klasie .main i width określonego w każdej z zapytania o media.

+1

To może być obecnie jedyne dostępne rozwiązanie CSS, wykorzystujące zapytania o media do wyboru różnych siatek układu w zależności od szerokości przeglądarki. Myślę, że to albo to, albo JavaScript. –

+0

Dziękuję bardzo! – Harry

0
.main .inner{ 
    min-width: 140px; 
    background: red; 
    text-align:center; 
    } 

Dodaj text-align: center własność css http://jsfiddle.net/dolours/afKgg/

+0

Czy istnieje sposób na wyrównanie ostatniego wiersza w lewo? – Harry

0

Można ustawić max-width dla .inner wtedy text-align: center dla .main

+0

Czy istnieje sposób na wyrównanie ostatniego wiersza w lewo? – Harry