2014-08-29 12 views
5

Posiadam pojemnik ze zmienną liczbą elementów. Elementy powinny być uzasadnione, ale z ustalonym odstępem między (np. 20px). Oznacza to, że szerokość każdego elementu musi się dostosować.Wyrównanie elementów za pomocą przestrzeni stałej (o zmiennej szerokości)

Na przykład w ten sposób:

HTML

<div class="container"> 
    <div> 
     <img src="..."> 
    </div> 
    <div> 
     <img src="..."> 
    </div> 
    <div> 
     <img src="..."> 
    </div> 
</div> 

CSS

div.container { 
    text-align: justify; 
} 

div.container div { 
    display: inline-block; 
    margin-right: 20px; 
} 

div.container div img { 
    width: 100%; 
} 

Na koniec powinno to wyglądać tak (ten obraz przedstawia dwa przykłady: 2 elementy i 3 elementy, szerokość jest dynamiczna, ale wielkość miejsca [20px]):

picture showing elements

Powinien działać z różnej liczbie elementów podrzędnych.

Czy istnieje profesjonalny sposób na zrobienie tego za pomocą CSS?

EDYTOWANIE: Powinienem wspomnieć, że to miejsce naprawy jest wartością%!

Odpowiedz

4

przypadku korzystania Flexbox jest opcją, można dodać flex: 1 do flex przedmiotów, a także własności marży o stałej wartości w następujący sposób:

EXAMPLE HERE

div.container { display: flex; } 

div.container div { 
    height: 50px; /* Just for demo */ 
    flex: 1; 
    margin-left: 20px; 
} 

div.container :first-child { margin-left: 0; } 

Właściwie flex: 1 jest stenogram z flex-grow: 1; w tym przypadku.

+0

schematu flexbox nie jest obsługiwana w IE8 i IE9, przypuszczam, korzystając z tabeli jest to lepszy pomysł, jak @Salman zrobił w swojej odpowiedzi . – 4dgaurav

+0

@ 4dgaurav Dlatego zacząłem swoją odpowiedź od 'Jeśli używasz Flexbox jest opcją ...' :) –

+0

Dziękuję za wspaniałą odpowiedź, działa idealnie. Oczywiście IE8 i IE9 to problem, ale jest niesamowity. Nie mogę użyć rozwiązania typu table-cell-solution, ponieważ moja przestrzeń poprawek jest wartością procentową. –

3

Można użyć display: table i display: table-cell na to:

.container { 
 
    display: table; 
 
    width: 100%; 
 
    border-spacing: 10px 0; 
 
    border-collapse: separate; 
 
    background: palevioletred; 
 
} 
 
.container div { 
 
    display: table-cell; 
 
} 
 
.container img { 
 
    display: block; 
 
    width: 100%; 
 
    height: auto; 
 
}
<div class="container"> 
 
    <div><img src="//dummyimage.com/200x100/000/CCC"></div> 
 
    <div><img src="//dummyimage.com/300x100/000/CCC"></div> 
 
    <div><img src="//dummyimage.com/400x100/000/CCC"></div> 
 
</div> 
 
<hr/> 
 
<div class="container"> 
 
    <div><img src="//dummyimage.com/200x100/000/CCC"></div> 
 
    <div><img src="//dummyimage.com/400x100/000/CCC"></div> 
 
</div> 
 
<hr/> 
 
<div class="container"> 
 
    <div><img src="//dummyimage.com/600x100/000/CCC"></div> 
 
</div>

+0

+1 dla tabeli, zgodność z przeglądarką krzyżową! – 4dgaurav

+0

Edycja: Powinienem wspomnieć, że to miejsce naprawy jest% -wartości! –

+0

@LucaNateMahler: można dodać dopełnienie do komórek tabeli zamiast odstępów między boderami. Jednak pierwsza i ostatnia komórka będą miały niepotrzebne wypełnienie odpowiednio po lewej i prawej stronie. Zobacz http://jsfiddle.net/salman/937vb7hj/3/ –

Powiązane problemy