Saya mencoba membuat beberapa kelas CSS yang dapat digunakan kembali untuk konsistensi yang lebih baik dan lebih sedikit kekacauan di situs saya, dan saya terjebak dalam mencoba untuk membakukan satu hal yang sering saya gunakan.
Saya memiliki wadah <div>
yang tidak ingin saya atur ketinggiannya (karena akan berbeda-beda tergantung di mana situs itu berada), dan di dalamnya ada header <div>
, dan kemudian daftar item yang tidak berurutan , semua dengan CSS diterapkan ke mereka.
Ini terlihat sangat seperti ini:
Saya ingin daftar unordered untuk mengambil ruang yang tersisa dalam wadah <div>
, mengetahui bahwa header <div>
adalah 18px
tinggi. Saya hanya tidak tahu bagaimana menentukan tinggi daftar sebagai "hasil 100%
minus 18px
".
Saya telah melihat pertanyaan ini ditanyakan dalam beberapa konteks lain pada SO, tetapi saya pikir akan layak untuk bertanya lagi untuk kasus khusus saya. Adakah yang punya saran dalam situasi ini?
Jawaban:
Saya menyadari ini adalah posting lama, tetapi mengingat bahwa itu belum disarankan, perlu disebutkan bahwa jika Anda menulis untuk browser yang mendukung CSS3, Anda dapat menggunakan
calc
:Perlu dicatat bahwa tidak semua browser saat ini mendukung fungsi standar CSS3 calc (), jadi mengimplementasikan versi browser spesifik dari fungsi tersebut mungkin diperlukan seperti berikut:
sumber
lessc --strict-math=on
agar kurang untuk tidak mengevaluasi ekspresi di dalamcalc
- hanya masalah yang saya hadapi dan menghabiskan banyak waktu (pada Less 2.0.0)100%-18px
,100%- 18px
, dan100% -18px
tidak bekerja di browser saya diuji dengan.Untuk sedikit pendekatan yang berbeda, Anda dapat menggunakan sesuatu seperti ini pada daftar:
Ini berfungsi selama wadah induk memiliki
position: relative;
sumber
position: relative;
membuatku tersandung.absolute
dalam wadah anak, itu tidak mungkinrelative
.absolute
juga), dan perlu diatur ke ketinggian 100% juga.Saya menggunakan Jquery untuk ini
maka saya mengikat ukuran jendela untuk recalc itu setiap kali jendela browser diubah ukurannya (jika ukuran kontainer diubah dengan ukuran jendela)
sumber
Jangan mendefinisikan tinggi sebagai persentase, cukup atur
top=0
danbottom=0
, seperti ini:sumber
height:100%
dandisplay:block
. Kalau tidak, itu akan menjadi solusi yang sangat elegan. Menariknya,margin:auto
juga gagal memusatkan objek dengan lebar tetap secara vertikal, meskipun berfungsi dengan baik secara horizontal.Menganggap tinggi header 17px
Daftar css:
Header css:
sumber
ul { margin-top: -17px; }
overflow:hidden;
pada elemen yang mengandungoverflow:auto;
elemen yang diinginkan.Itu berhasil untuk saya!
sumber
calc()
memusatkannya pada saat runtime. Tetapi untuk banyak kasus ini seharusnya tidak menjadi masalah. Hal lain yang perlu diingat adalah bahwa menggunakan banyak nilai negatif untuk margin, padding, dan offset dapat menyebabkan kebingungan ketika men-debug kode nanti, jadi cobalah untuk menjaga hal-hal sederhana.Coba ukuran kotak. Untuk daftar:
Untuk tajuk:
Tentu saja, wadah induk harus memiliki sesuatu seperti:
sumber
Cara lain untuk mencapai tujuan yang sama: kotak fleksibel . Jadikan wadah sebagai kotak fleksibel kolom, dan kemudian Anda memiliki semua kebebasan untuk memungkinkan beberapa elemen memiliki ukuran tetap (perilaku default) atau untuk mengisi / mengecilkan ke ruang wadah (dengan pertumbuhan-tumbuh: 1 dan lentur- menyusut: 1).
Lihat https://jsfiddle.net/2Lmodwxk/ (coba perpanjang atau kurangi jendela untuk melihat efeknya)
Catatan: Anda juga dapat menggunakan properti singkatan:
sumber
Saya mencoba beberapa jawaban lain, dan tidak ada yang bekerja seperti yang saya inginkan. Situasi kami sangat mirip dengan header jendela dan jendela dapat diubah ukurannya dengan gambar di badan jendela. Kami ingin mengunci rasio aspek dari pengubahan ukuran tanpa perlu menambahkan perhitungan untuk memperhitungkan ukuran tetap dari header dan masih memiliki gambar yang mengisi tubuh jendela.
Di bawah ini saya membuat cuplikan yang sangat sederhana yang menunjukkan apa yang akhirnya kami lakukan yang tampaknya bekerja dengan baik untuk situasi kami dan harus kompatibel di sebagian besar browser.
Pada elemen jendela kami, kami menambahkan margin 20px yang berkontribusi pada penentuan posisi relatif terhadap elemen lain di layar, tetapi tidak berkontribusi pada "ukuran" jendela. Window-header kemudian diposisikan secara absolut (yang menghilangkannya dari aliran elemen lain, sehingga tidak akan menyebabkan elemen lain seperti daftar yang tidak berurutan digeser) dan atasnya diposisikan -20px yang menempatkan header di dalam margin dari jendela. Akhirnya elemen ul kami ditambahkan ke jendela, dan tingginya dapat diatur ke 100% yang akan membuatnya mengisi tubuh jendela (tidak termasuk margin).
sumber
Terima kasih, saya menyelesaikan masalah saya dengan bantuan Anda, mengubahnya sedikit karena saya ingin div 100% lebar 100% heigth (kurang tinggi dari bilah bawah) dan tidak ada gulir di badan (tanpa peretasan / menyembunyikan bilah gulir).
Untuk CSS:
Untuk HTML:
Itu berhasil, oh ya saya menaruh nilai sedikit lebih hebat pada div.adjusted untuk bottom daripada untuk bottom bar tinggi, kalau tidak scrollbar vertikal muncul, saya disesuaikan menjadi nilai terdekat.
Perbedaannya adalah karena salah satu elemen di area dinamis adalah menambahkan lubang bawah tambahan yang saya tidak tahu bagaimana cara menghilangkannya ... itu adalah tag video (HTML5), harap dicatat saya meletakkan tag video itu dengan css ini ( jadi tidak ada alasan untuk itu membuat lubang bawah, tetapi itu memang):
Tujuannya: Memiliki video yang mengambil 100% browser (dan mengubah ukuran secara dinamis ketika browser diubah ukurannya, tetapi tanpa mengubah rasio aspek) kurang ruang bawah yang saya gunakan untuk div dengan beberapa teks, tombol, dll (dan validator w3c & css tentu saja).
EDIT: Saya menemukan alasannya, tag video seperti teks, bukan elemen blok, jadi saya memperbaikinya dengan css ini:
Perhatikan
display:block;
tag pada video.sumber
Saya tidak yakin apakah ini berfungsi dalam situasi khusus Anda, tetapi saya telah menemukan bahwa bantalan pada div bagian dalam akan mendorong konten di dalam div jika div yang berisi ukuran tetap. Anda harus mengapung atau benar-benar memposisikan elemen header Anda, tetapi jika tidak, saya belum mencoba ini untuk div ukuran variabel.
sumber