Eğer css3 bir seçenektir, bu css kullanılarak yapılabilir calc()
işlevi.
Durum 1: Tek bir satırdaki kutuları yaslama ( FIDDLE )
İşaretleme basittir - bazı kap öğesi içeren bir grup div.
CSS şöyle görünür:
div
{
height: 100px;
float: left;
background:pink;
width: 50px;
margin-right: calc((100% - 300px) / 5 - 1px);
}
div:last-child
{
margin-right:0;
}
nerede -1px bir IE9 + kalk / yuvarlama hatanın düzeltilmesi - bakınız burada
Durum 2: Birden çok satırdaki kutuları yaslama ( FIDDLE )
Burada, calc()
işleve ek media queries
olarak gereklidir.
Temel fikir, her #columns durumu için bir medya sorgusu oluşturmaktır, burada daha sonra elemanların her birinde (son sütundaki olanlar hariç) marj-sağını çalışmak için calc () kullanırım.
Bu çok fazla iş gibi geliyor, ancak LESS veya SASS kullanıyorsanız, bu oldukça kolay bir şekilde yapılabilir
(Yine de normal css ile yapılabilir, ancak daha sonra tüm hesaplamaları manuel olarak yapmanız gerekir ve daha sonra kutu genişliğinizi değiştirirseniz - her şeyi tekrar çalışmanız gerekir)
Aşağıda LESS kullanan bir örnek var: (Bu kodu onunla oynamak için buraya kopyalayabilir / yapıştırabilirsiniz , [ayrıca yukarıda belirtilen kemanı oluşturmak için kullandığım kod])
@min-margin: 15px;
@div-width: 150px;
@3divs: (@div-width * 3);
@4divs: (@div-width * 4);
@5divs: (@div-width * 5);
@6divs: (@div-width * 6);
@7divs: (@div-width * 7);
@3divs-width: (@3divs + @min-margin * 2);
@4divs-width: (@4divs + @min-margin * 3);
@5divs-width: (@5divs + @min-margin * 4);
@6divs-width: (@6divs + @min-margin * 5);
@7divs-width: (@7divs + @min-margin * 6);
*{margin:0;padding:0;}
.container
{
overflow: auto;
display: block;
min-width: @3divs-width;
}
.container > div
{
margin-bottom: 20px;
width: @div-width;
height: 100px;
background: blue;
float:left;
color: #fff;
text-align: center;
}
@media (max-width: @3divs-width) {
.container > div {
margin-right: @min-margin;
}
.container > div:nth-child(3n) {
margin-right: 0;
}
}
@media (min-width: @3divs-width) and (max-width: @4divs-width) {
.container > div {
margin-right: ~"calc((100% - @{3divs})/2 - 1px)";
}
.container > div:nth-child(3n) {
margin-right: 0;
}
}
@media (min-width: @4divs-width) and (max-width: @5divs-width) {
.container > div {
margin-right: ~"calc((100% - @{4divs})/3 - 1px)";
}
.container > div:nth-child(4n) {
margin-right: 0;
}
}
@media (min-width: @5divs-width) and (max-width: @6divs-width) {
.container > div {
margin-right: ~"calc((100% - @{5divs})/4 - 1px)";
}
.container > div:nth-child(5n) {
margin-right: 0;
}
}
@media (min-width: @6divs-width){
.container > div {
margin-right: ~"calc((100% - @{6divs})/5 - 1px)";
}
.container > div:nth-child(6n) {
margin-right: 0;
}
}
Temel olarak, önce bir kutu genişliği ve kutular arasında istediğiniz minimum bir kenar boşluğuna karar vermeniz gerekir.
Bununla, her eyalet için ne kadar alana ihtiyacınız olduğunu öğrenebilirsiniz.
Ardından, sağ kenar boşluğunu hesaplamak için calc () öğesini ve son sütundaki kutulardan sağ kenar boşluğunu kaldırmak için nth-child öğesini kullanın.
Avantajı kullanan kabul cevap üzerinden bu cevabın text-align:justify
nihai satırda kalan 2 kutu varsa - I: alamadım son satırda kutuları mesela 'haklı' - Eğer kutularının birden fazla satır varken olmasıdır ilk kutunun solda ve bir sonraki kutunun sağda olmasını istemiyorum - aksine kutular birbirini sırayla takip ediyor.
İlgili tarayıcı desteği : Bu IE9 +, Firefox, Chrome, Safari6.0 üzerinde çalışacak + - (bkz burada daha fazla ayrıntı için) i IE9 üzerinde + medyanın sorgu devletler arasında bir aksaklık biraz var olduğunu fark Ancak. [birisi bunu nasıl düzeltebileceğini bilirse gerçekten bilmek istiyorum :)] <- BURADA SABİT
display:inline-block;
şamandıra yerine yapmıyorsunuz ?