Jika css3 adalah opsi, ini dapat dilakukan dengan menggunakan calc()
fungsi css .
Kasus 1: Membenarkan kotak pada satu baris ( FIDDLE )
Markup sederhana - sekelompok divs dengan beberapa elemen wadah.
CSS terlihat seperti ini:
div
{
height: 100px;
float: left;
background:pink;
width: 50px;
margin-right: calc((100% - 300px) / 5 - 1px);
}
div:last-child
{
margin-right:0;
}
di mana -1px untuk memperbaiki bug IE9 + calc / rounding - lihat di sini
Kasus 2: Membenarkan kotak pada banyak baris ( FIDDLE )
Di sini, di samping calc()
fungsi, media queries
diperlukan.
Gagasan dasarnya adalah menyiapkan kueri media untuk setiap status # kolom, di mana saya kemudian menggunakan calc () untuk menghitung margin-kanan pada setiap elemen (kecuali yang ada di kolom terakhir).
Ini kedengarannya seperti banyak pekerjaan, tetapi jika Anda menggunakan KURANG atau SASS ini bisa dilakukan dengan mudah
(Ini masih bisa dilakukan dengan css reguler, tetapi kemudian Anda harus melakukan semua perhitungan secara manual, dan kemudian jika Anda mengubah lebar kotak Anda - Anda harus mengerjakan semuanya lagi)
Di bawah ini adalah contoh menggunakan KURANG: (Anda dapat menyalin / menempelkan kode ini di sini untuk bermain dengannya, [itu juga kode yang saya gunakan untuk menghasilkan biola yang disebutkan di atas])
@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;
}
}
Jadi pada dasarnya Anda pertama-tama harus memutuskan lebar kotak dan margin minimum yang Anda inginkan di antara kotak-kotak tersebut.
Dengan itu, Anda dapat menentukan berapa banyak ruang yang Anda butuhkan untuk setiap negara bagian.
Kemudian, gunakan calc () untuk menghitung margin kanan, dan n-child untuk menghapus margin kanan dari kotak di kolom terakhir.
The keuntungan dari jawaban ini lebih jawaban yang diterima yang menggunakantext-align:justify
adalah bahwa ketika Anda memiliki lebih dari satu baris dari kotak - kotak pada baris akhir tidak mendapatkan 'dibenarkan' misalnya: Jika ada 2 kotak yang tersisa di baris akhir - I tidak ingin kotak pertama berada di sebelah kiri dan yang berikutnya berada di sebelah kanan - tetapi kotak-kotak itu saling mengikuti secara berurutan.
Mengenai dukungan browser : Ini akan berfungsi pada IE9 +, Firefox, Chrome, Safari6.0 + - (lihat di sini untuk detail lebih lanjut) Namun saya perhatikan bahwa pada IE9 + ada sedikit kesalahan antara status kueri media. [jika ada yang tahu bagaimana cara memperbaikinya, saya benar-benar ingin tahu :)] <- TETAP DI SINI
display:inline-block;
alih - alih mengapung?