Saya memiliki DIV wadah cairan lebar.
Dalam hal ini saya memiliki 4 DIVs semua 300px x 250px ...
<div id="container">
<div class="box1"> </div>
<div class="box2"> </div>
<div class="box3"> </div>
<div class="box4"> </div>
</div>
Apa yang saya ingin terjadi adalah kotak 1 untuk melayang ke kiri, kotak 4 untuk melayang ke kanan dan kotak 2 dan 3 untuk ditempatkan secara merata di antara mereka. Saya ingin spasi menjadi lancar juga sehingga browser dibuat lebih kecil, ruang menjadi lebih kecil juga.
html
css
fluid-layout
Lee Price
sumber
sumber
display:inline-block;
alih - alih mengapung?inline-block
padainline
elemenJawaban:
Lihat: http://jsfiddle.net/thirtydot/EDp8R/
text-align: justify
dikombinasikan dengan.stretch
apa yang menangani penentuan posisi.display:inline-block; *display:inline; zoom:1
perbaikaninline-block
untuk IE6 / 7, lihat di sini .font-size: 0; line-height: 0
memperbaiki masalah kecil di IE6.Ekstra
span
(.stretch
) dapat diganti dengan:after
.Ini masih berfungsi di semua browser yang sama dengan solusi di atas.
:after
tidak bekerja di IE6 / 7, tapi merekadistribute-all-lines
tetap menggunakannya , jadi tidak masalah.Lihat: http://jsfiddle.net/thirtydot/EDp8R/3/
Ada sedikit kelemahan
:after
: untuk membuat baris terakhir berfungsi sempurna di Safari, Anda harus berhati-hati dengan spasi putih di HTML.Secara khusus, ini tidak berfungsi:
Dan ini memang:
Anda dapat menggunakan ini untuk jumlah anak sewenang-wenang
div
tanpa menambahkanboxN
kelas untuk masing-masing dengan mengubahuntuk
Ini memilih setiap div yang merupakan anak pertama dari
#container
div, dan tidak ada yang lain di bawahnya. Untuk menggeneralisasi warna latar belakang, Anda dapat menggunakan pemilih urutan ke-CSS3 , meskipun hanya didukung di IE9 + dan peramban modern lainnya:menjadi:
Lihat di sini untuk contoh jsfiddle.
sumber
<div/><div/><div/>
tidak berfungsi. Anda harus punya<div/> <div/> <div/>
.justify
untuk kasus seperti itu, tetapi terima kasih telah memberikan solusi yang berfungsi. menyelamatkan saya banyak percobaan (meskipun debugging 3 jam: D). Selain itu, saya dapat menambahkan catatan bahwa jika Anda ingin baris terakhir dibiarkan selaras, Anda harus menambahkan beberapa kotak tambahan (untuk melengkapi baris).stretch
/:after
diperlukan karena (biasanya) dengan teks yang dibenarkan, baris terakhir tidak dibenarkan . Di sini, kami ingin baris terakhir dibenarkan, karena itu perlu:after
. Adapun pertanyaan kedua Anda, saya telah menjelajahi beberapa waktu yang lalu di jawaban sebelumnya . Dalam jawaban itu, dibutuhkan JavaScript. Jika Anda perlu mendukung browser yang lebih lama (IE8) maka saya yakin Anda memang membutuhkan JavaScript.Cara termudah untuk melakukan ini sekarang adalah dengan flexbox:
http://css-tricks.com/snippets/css/a-guide-to-flexbox/
Maka CSS secara sederhana:
demo: http://jsfiddle.net/QPrk3/
Namun , ini saat ini hanya didukung oleh browser yang relatif baru ( http://caniuse.com/flexbox ). Selain itu, spesifikasi tata letak flexbox telah berubah beberapa kali, jadi mungkin untuk mencakup lebih banyak browser dengan menambahkan sintaksis lama:
http://css-tricks.com/old-flexbox-and-new-flexbox/
http://css-tricks.com/using-flexbox/
sumber
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:
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])
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 menggunakan
text-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 SINIsumber
Posting lain menyebutkan flexbox , tetapi jika lebih dari satu baris item diperlukan ,
space-between
properti flexbox gagal (lihat akhir posting)Sampai saat ini, satu - satunya solusi bersih untuk ini adalah dengan
Modul Tata Letak Kotak CSS ( demo Codepen )
Pada dasarnya diperlukan kode yang relevan sampai saat ini:
1) Jadikan elemen wadah sebagai wadah kotak
2) Atur grid dengan jumlah kolom 'otomatis' - sebagaimana diperlukan. Ini dilakukan untuk tata letak yang responsif. Lebar masing-masing kolom adalah 120px. (Perhatikan penggunaan
auto-fit
(seperti yang ditunjukkanauto-fill
) yang (untuk tata letak 1-baris) runtuh trek kosong ke 0 - memungkinkan item untuk memperluas untuk mengambil ruang yang tersisa. (Lihat demo ini untuk melihat apa yang saya bicarakan )).3) Atur celah / talang untuk baris dan kolom kisi - di sini, karena ingin tata letak 'ruang-di antara' - jarak sebenarnya akan menjadi jarak minimum karena akan tumbuh sesuai kebutuhan.
4) dan 5) - Mirip dengan flexbox.
Demo codepen (Ubah ukuran untuk melihat efeknya)
Dukungan Browser - Caniuse
Saat ini didukung oleh Chrome (Blink), Firefox, Safari dan Edge! ... dengan dukungan parsial dari IE (Lihat posting ini oleh Rachel Andrew)
NB:
space-between
Properti Flexbox berfungsi dengan baik untuk satu baris item, tetapi ketika diterapkan pada wadah fleksibel yang membungkus itemnya - (denganflex-wrap: wrap
) - gagal, karena Anda tidak memiliki kendali atas penyelarasan baris terakhir item; baris terakhir akan selalu dibenarkan (biasanya bukan yang Anda inginkan)Untuk menunjukkan:
Tampilkan cuplikan kode
Codepen (Ubah ukuran untuk melihat apa yang saya bicarakan)
Bacaan lebih lanjut tentang kisi-kisi CSS:
sumber
Ini bekerja untuk saya dengan 5 gambar dalam ukuran yang berbeda.
Ini berfungsi karena justify-content: space-between, dan ada di daftar, ditampilkan secara horizontal.
Tentang CSS
Di html
sumber
di
jQuery
Anda mungkin menargetkan Induk langsung.Ini akan membiarkan
parent
tumbuh secara horizontal saatchildren
beng ditambahkan.CATATAN: Ini mengasumsikan bahwa
'.children'
havewidth
danHeight
SetSemoga Itu Membantu.
sumber
Jika Anda tahu jumlah elemen per "baris" dan lebar wadah, Anda bisa menggunakan pemilih untuk menambahkan margin ke elemen yang Anda butuhkan agar tampak benar.
Saya memiliki deretan tiga div yang saya inginkan dibenarkan sehingga menggunakan:
.tile:nth-child(3n+2) { margin: 0 10px }
ini memungkinkan div tengah di setiap baris memiliki margin yang memaksa div ke-1 dan ke-3 ke tepi luar wadah
Juga bagus untuk hal-hal lain seperti warna latar perbatasan dll
sumber