Bagaimana saya bisa mencapai struktur berikut tanpa menggunakan tabel atau JavaScript? Batas putih mewakili tepi divs dan tidak relevan dengan pertanyaan.
Ukuran area di tengah akan bervariasi, tetapi akan memiliki nilai piksel yang tepat dan seluruh struktur harus berskala sesuai dengan nilai-nilai itu. Untuk menyederhanakannya, saya perlu cara untuk mengatur lebar "100% - n px" ke div tengah-atas dan bawah-tengah.
Saya menghargai solusi lintas-browser yang bersih, tetapi jika itu tidak mungkin, peretasan CSS akan dilakukan.
Ini bonusnya. Struktur lain yang telah saya perjuangkan dan akhirnya gunakan tabel atau JavaScript. Ini sedikit berbeda, tetapi memperkenalkan masalah baru. Saya terutama menggunakannya dalam sistem windowing berbasis jQuery, tapi saya ingin menjaga tata letak skrip dan hanya mengontrol ukuran satu elemen (yang tengah).
Jawaban:
Anda dapat menggunakan elemen dan padding bersarang untuk mendapatkan tepi kiri dan kanan pada toolbar. Lebar default suatu
div
elemen adalahauto
, yang artinya menggunakan lebar yang tersedia. Anda kemudian dapat menambahkan padding ke elemen dan itu masih tetap dalam lebar yang tersedia.Berikut adalah contoh yang dapat Anda gunakan untuk menempatkan gambar sebagai sudut bulat kiri dan kanan, dan gambar tengah yang berulang di antara mereka.
HTML:
CSS:
sumber
>
operator masih belum cukup baik untuk dapat diandalkan.calc
di IE 8, atau versi Anroid Browser atau Opera saat ini. caniuse.com/#search=calcCara baru yang baru saja saya temukan: css
calc()
:Sumber: lebar css 100% minus 100px
sumber
Sementara jawaban Guffa bekerja dalam banyak situasi, dalam beberapa kasus Anda mungkin tidak ingin bantalan kiri dan / atau kanan menjadi induk dari div pusat. Dalam kasus ini, Anda dapat menggunakan konteks pemformatan blok di tengah dan mengapungkan div padding kiri dan kanan. Ini kodenya
HTML:
CSS:
Saya merasa bahwa hirarki elemen ini lebih alami jika dibandingkan dengan div bersarang bersarang, dan lebih baik mewakili apa yang ada di halaman. Karena itu, batas, bantalan, dan margin dapat diterapkan secara normal ke semua elemen (yaitu: 'naturalitas' ini melampaui gaya dan memiliki konsekuensi).
Perhatikan bahwa ini hanya bekerja pada divs dan elemen lain yang berbagi properti 'isi 100% dari lebar secara default'. Input, tabel, dan mungkin orang lain akan meminta Anda untuk membungkusnya dalam div kontainer dan menambahkan lebih banyak css untuk mengembalikan kualitas ini. Jika Anda cukup beruntung berada dalam situasi itu, hubungi saya dan saya akan menggali css.
jsfiddle di sini: jsfiddle.net/RgdeQ
Nikmati!
sumber
Anda dapat menggunakan tata letak Flexbox . Anda perlu mengatur
flex: 1
pada elemen yang perlu memiliki lebar dinamis atau tinggi untukflex-direction: row and column
masing - masing.Lebar dinamis:
HTML
CSS
Keluaran:
Tampilkan cuplikan kode
Tinggi dinamis:
HTML
CSS
Keluaran:
Tampilkan cuplikan kode
sumber
Cara biasa untuk melakukannya adalah seperti yang dijelaskan oleh Guffa, elemen bersarang. Agak menyedihkan harus menambahkan markup tambahan untuk mendapatkan kait yang Anda butuhkan untuk ini, tetapi dalam praktiknya pembungkus div di sini atau di sana tidak akan menyakiti siapa pun.
Jika Anda harus melakukannya tanpa elemen tambahan (mis. Ketika Anda tidak memiliki kendali atas markup halaman), Anda dapat menggunakan ukuran kotak , yang memiliki dukungan browser yang lumayan tetapi tidak lengkap atau tidak sederhana. Mungkin lebih menyenangkan daripada harus bergantung pada skrip.
sumber
Mungkin saya bodoh, tetapi bukankah meja solusi yang jelas di sini?
Cara lain yang saya temukan di chrome bahkan lebih sederhana, tetapi manusia itu hack!
Ini saja harus mengisi sisa baris secara horizontal, seperti halnya sel-tabel. Namun, Anda mendapatkan beberapa masalah aneh dengan nilai lebih dari 100% dari induknya, namun menetapkan lebar hingga nilai persentase memperbaikinya.
sumber
Kita dapat mencapai ini menggunakan flex-box dengan sangat mudah.
Jika kita memiliki tiga elemen seperti Header, MiddleContainer dan Footer. Dan kami ingin memberikan ketinggian yang tetap untuk Header dan Footer. maka kita bisa menulis seperti ini:
Untuk Bereaksi / RN (standarnya adalah 'display' sebagai flex dan 'flexDirection' sebagai kolom), dalam web css kita harus menentukan wadah atau wadah yang berisi ini sebagai tampilan: 'flex', flex-direction: 'column' seperti di bawah ini:
sumber
bagaimana jika pembungkus div Anda adalah 100% dan Anda menggunakan padding untuk jumlah piksel, maka jika padding # harus dinamis, Anda dapat dengan mudah menggunakan jQuery untuk mengubah jumlah padding Anda saat acara Anda menyala.
sumber
Saya memiliki masalah serupa di mana saya ingin spanduk di bagian atas layar yang memiliki satu gambar di sebelah kiri dan gambar yang berulang di kanan ke tepi layar. Saya akhirnya menyelesaikannya seperti ini:
CSS:
Kuncinya adalah tag yang tepat. Saya pada dasarnya menetapkan bahwa saya ingin mengulang dari 131px dari kiri ke 0px dari kanan.
sumber
Dalam beberapa konteks, Anda dapat memanfaatkan pengaturan margin untuk secara efektif menentukan "100% lebar minus N piksel". Lihat jawaban yang diterima untuk pertanyaan ini .
sumber