Saya sedang mengerjakan aplikasi web di mana saya ingin konten mengisi ketinggian seluruh layar.
Halaman memiliki tajuk, yang berisi logo, dan informasi akun. Ini bisa menjadi ketinggian yang sewenang-wenang. Saya ingin div konten untuk mengisi sisa halaman ke bawah.
Saya memiliki header div
dan konten div
. Saat ini saya menggunakan tabel untuk tata letak seperti:
CSS dan HTML
#page {
height: 100%; width: 100%
}
#tdcontent {
height: 100%;
}
#content {
overflow: auto; /* or overflow: hidden; */
}
<table id="page">
<tr>
<td id="tdheader">
<div id="header">...</div>
</td>
</tr>
<tr>
<td id="tdcontent">
<div id="content">...</div>
</td>
</tr>
</table>
Seluruh ketinggian halaman diisi, dan tidak perlu menggulir.
Untuk apa pun di dalam div konten, pengaturan top: 0;
akan meletakkannya tepat di bawah header. Terkadang kontennya berupa tabel sungguhan, dengan ketinggian diatur hingga 100%. Menempatkan ke header
dalam content
tidak akan memungkinkan ini berfungsi.
Apakah ada cara untuk mencapai efek yang sama tanpa menggunakan table
?
Memperbarui:
Elemen-elemen di dalam konten div
akan memiliki ketinggian yang diatur ke persentase juga. Jadi sesuatu di 100% di dalamnya div
akan mengisinya ke bawah. Seperti halnya dua elemen pada 50%.
Pembaruan 2:
Misalnya, jika tajuk mengambil 20% dari tinggi layar, tabel yang ditentukan 50% di dalamnya #content
akan memakan 40% dari ruang layar. Sejauh ini, membungkus seluruh hal dalam sebuah tabel adalah satu-satunya hal yang berhasil.
sumber
display:table
dan properti terkait, lihat jawaban ini untuk pertanyaan yang sangat mirip.Jawaban:
Pembaruan 2015: pendekatan flexbox
Ada dua jawaban lain yang menyebutkan flexbox secara singkat ; Namun, itu lebih dari dua tahun yang lalu, dan mereka tidak memberikan contoh. Spesifikasi untuk flexbox sudah pasti ditentukan sekarang.
Semua browser utama dan IE11 + mendukung Flexbox. Untuk IE 10 atau lebih, Anda dapat menggunakan FlexieJS shim.
Untuk memeriksa dukungan saat ini, Anda juga dapat melihat di sini: http://caniuse.com/#feat=flexbox
Contoh kerja
Dengan flexbox Anda dapat dengan mudah beralih di antara baris atau kolom mana pun yang memiliki dimensi tetap, dimensi ukuran konten, atau dimensi ruang tersisa. Dalam contoh saya, saya telah mengatur tajuk agar snap ke kontennya (sesuai dengan pertanyaan OP), saya telah menambahkan catatan kaki untuk menunjukkan cara menambahkan wilayah tinggi-tetap dan kemudian mengatur area konten untuk mengisi ruang yang tersisa.
Dalam CSS di atas, properti flex menandai properti flex-grow , flex-shrink , dan flex-basis untuk menetapkan fleksibilitas item-item flex. Mozilla memiliki pengantar yang bagus untuk model kotak fleksibel .
sumber
flex: 0 1 30px;
atributbox .row
seperti itu menimpa di setiap div?overflow-y: auto
untuk.row.content
mencapai apa yang Anda perlu namun.Sebenarnya tidak ada cara lintas browser yang baik untuk melakukan ini dalam CSS. Dengan asumsi tata letak Anda memiliki kompleksitas, Anda perlu menggunakan JavaScript untuk mengatur ketinggian elemen. Inti dari apa yang perlu Anda lakukan adalah:
Setelah Anda bisa mendapatkan nilai ini dan mengatur tinggi elemen, Anda harus melampirkan penangan acara ke jendela yang di-overload dan onresize sehingga Anda bisa menjalankan fungsi resize Anda.
Juga, dengan asumsi konten Anda bisa lebih besar dari viewport, Anda perlu mengatur overflow-y untuk menggulir.
sumber
Pos asli lebih dari 3 tahun yang lalu. Saya kira banyak orang yang datang ke posting ini seperti saya mencari solusi tata letak seperti aplikasi, katakanlah header, footer, dan konten penuh ketinggian yang entah bagaimana diperbaiki mengambil layar sisanya. Jika demikian, pos ini dapat membantu, berfungsi di IE7 +, dll.
http://blog.stevensanderson.com/2011/10/05/full-height-app-layouts-a-css-trick-to-make-it-easier/
Dan berikut beberapa cuplikan dari pos itu:
sumber
display: table
dalam tubuh, sepertinya meluap tubuh. Jadi melakukanheight: 100%
tidak menghasilkan ketinggian yang benar..col
tidak digunakan, bukan?Alih-alih menggunakan tabel di markup, Anda bisa menggunakan tabel CSS.
Markup
(Relevan) CSS
FIDDLE1 dan FIDDLE2
Beberapa kelebihan dari metode ini adalah:
1) Kurang markup
2) Markup lebih semantik daripada tabel, karena ini bukan data tabular.
3) Dukungan browser sangat baik : IE8 +, Semua browser modern dan perangkat seluler ( caniuse )
Hanya untuk kelengkapan, berikut adalah elemen Html yang setara untuk properti css untuk model tabel CSS
sumber
html, body { height: 100%, width: 100% }
tampak penting dalam pengujian saya.relative
pemosisian padatable-row
elemen sehingga memerlukan ketinggian posisi pertama yang bukan elemen tabel.Pendekatan CSS saja (Jika tinggi diketahui / diperbaiki)
Saat Anda ingin elemen tengah membentang di seluruh halaman secara vertikal, Anda bisa menggunakan
calc()
yang diperkenalkan di CSS3.Dengan asumsi kami memiliki ketinggian
header
danfooter
elemen tetap dan kami inginsection
tag untuk mengambil seluruh ketinggian vertikal yang tersedia ...Demo
Diasumsikan markup dan CSS Anda seharusnya
Jadi di sini, apa yang saya lakukan adalah, menjumlahkan ketinggian elemen dan daripada mengurangi dari
100%
menggunakancalc()
fungsi.Pastikan Anda menggunakan
height: 100%;
elemen induk.sumber
Bekas:
height: calc(100vh - 110px);
kode:
sumber
Solusi sederhana, menggunakan flexbox:
Sampel codepen
Solusi alternatif, dengan div dipusatkan di dalam div konten
sumber
Bagaimana Anda hanya menggunakan
vh
singkatanview height
di CSS ...Lihatlah cuplikan kode yang saya buat untuk Anda di bawah dan jalankan:
Lihat juga gambar di bawah yang saya buat untuk Anda:
sumber
CSS3 Cara Sederhana
semua browser utama saat ini mendukungnya, jadi silakan jika Anda tidak memiliki persyaratan untuk mendukung browser vintage.
sumber
Itu bisa dilakukan murni dengan
CSS
menggunakanvh
:dan
HTML
Aku memeriksa itu, Ia bekerja di semua browser utama:
Chrome
,IE
, danFireFox
sumber
vh
danvw
unit sebelumnya. Info lebih lanjut: snook.ca/archives/html_and_css/vm-vh-unitsheight: 100%
pada#content
menyebabkan tingginya cocok dengan#page
, mengabaikan#tdcontent
tinggi sama sekali. Dengan banyak konten, bilah gulir melampaui bagian bawah halaman.Tidak ada solusi yang diposting yang berfungsi saat Anda membutuhkan div bagian bawah untuk menggulir ketika konten terlalu tinggi. Inilah solusi yang berfungsi dalam kasus itu:
Sumber asli: Mengisi Ketinggian Sisa Wadah Saat Menangani Overflow di CSS
Pratinjau langsung JSFiddle
sumber
body-content-wrapper
, dan hal-hal tampaknya berfungsi dengan baik tanpa pembungkus ganda (tanpatable-cell
s). Apakah ada masalah dengan melakukannya seperti itu?.body
tingginya berakhir dengan ketinggian yang sama dengan yang ditetapkan.container
. Bilah gulir vertikal masih di tempat yang tepat, tetapi.container
ujung - ujungnya membentang lebih besar dari yang kita inginkan. Ketika layar penuh, bagian bawah dari.body
bagian bawah layar.Saya telah mencari jawaban untuk ini juga. Jika Anda cukup beruntung untuk dapat menargetkan IE8 dan yang lebih tinggi, Anda bisa menggunakan
display:table
dan nilai terkait untuk mendapatkan aturan rendering tabel dengan elemen level blok termasuk div.Jika Anda bahkan lebih beruntung dan pengguna Anda menggunakan browser tingkat atas (misalnya, jika ini adalah aplikasi intranet pada komputer yang Anda kontrol, seperti proyek terbaru saya), Anda dapat menggunakan Tata Letak Kotak Fleksibel baru di CSS3!
sumber
Apa yang berhasil untuk saya (dengan div dalam div lain dan saya berasumsi dalam semua keadaan lain) adalah mengatur padding bawah menjadi 100%. Artinya, tambahkan ini ke css / stylesheet Anda:
sumber
HTML 5
CSS
Solusi di atas menggunakan unit viewport dan flexbox , dan karenanya IE10 +, menyediakan Anda menggunakan sintaks lama untuk IE10.
Codepen untuk bermain: tautan ke codepen
Atau yang ini, bagi mereka yang membutuhkan wadah utama untuk dapat digulir jika konten meluap: tautan ke codepen
sumber
Ada banyak jawaban sekarang, tetapi saya menemukan menggunakan
height: 100vh;
untuk bekerja pada elemen div yang perlu mengisi seluruh ruang vertikal yang tersedia.Dengan cara ini, saya tidak perlu bermain-main dengan tampilan atau posisi. Ini sangat berguna ketika menggunakan Bootstrap untuk membuat dasbor di mana saya memiliki sidebar dan main. Saya ingin utama untuk meregangkan dan mengisi seluruh ruang vertikal sehingga saya bisa menerapkan warna latar belakang.
Mendukung IE9 dan lebih tinggi: klik untuk melihat tautan
sumber
Di semua browser waras, Anda dapat meletakkan div "header" sebelum konten, sebagai saudara kandung, dan CSS yang sama akan berfungsi. Namun, IE7- tidak menginterpretasikan ketinggian dengan benar jika float 100% dalam kasus itu, sehingga header harus dalam konten, seperti di atas. Overflow: otomatis akan menyebabkan bilah gulir ganda pada IE (yang selalu memiliki viewport scrollbar terlihat, tetapi dinonaktifkan), tetapi tanpa itu, konten akan klip jika meluap.
sumber
div
... yaitutop: 0;
akan meletakkan sesuatu tepat di bawah header. Saya akan memodifikasi pertanyaan saya lagi, karena Anda menjawabnya dengan sempurna, dan masih bukan yang saya inginkan! Saya hanya akan menyembunyikan overflow karena konten harus sesuai.Saya bergumul dengan ini untuk sementara waktu dan berakhir dengan yang berikut:
Karena mudah untuk membuat konten DIV sama tinggi dengan orang tua tetapi tampaknya sulit untuk membuatnya menjadi tinggi orangtua dikurangi tinggi header saya memutuskan untuk membuat konten div tinggi penuh tetapi posisikan itu benar-benar di sudut kiri atas dan kemudian tentukan padding untuk bagian atas yang memiliki tinggi header. Dengan cara ini, konten ditampilkan dengan rapi di bawah tajuk dan mengisi seluruh ruang yang tersisa:
sumber
Jika Anda bisa berurusan dengan tidak mendukung browser lama (yaitu, MSIE 9 atau lebih tua), Anda dapat melakukan ini dengan Modul Layout Kotak Fleksibel yang sudah menjadi W3C CR. Modul itu memungkinkan trik-trik bagus lainnya juga, seperti memesan kembali konten.
Sayangnya, MSIE 9 atau lebih kecil tidak mendukung ini dan Anda harus menggunakan awalan vendor untuk properti CSS untuk setiap browser selain Firefox. Semoga vendor lain segera menjatuhkan awalan.
Pilihan lain adalah Layout Grid CSS tetapi itu bahkan memiliki dukungan lebih sedikit dari versi browser yang stabil. Dalam praktiknya, hanya MSIE 10 yang mendukung ini.
Pembaruan tahun 2020 : Semua browser modern mendukung keduanya
display: flex
dandisplay: grid
. Satu-satunya yang hilang adalah dukungansubgrid
yang hanya didukung oleh Firefox. Perhatikan bahwa MSIE tidak mendukung baik oleh spesifikasi tetapi jika Anda ingin menambahkan peretasan CSS spesifik MSIE, itu dapat dibuat untuk berperilaku. Saya sarankan mengabaikan MSIE saja karena bahkan Microsoft mengatakan itu tidak boleh digunakan lagi.sumber
Solusi Grid CSS
Hanya mendefinisikan properti
body
withdisplay:grid
andgrid-template-rows
usingauto
danfr
value.Panduan Lengkap untuk Grids @ CSS-Tricks.com
sumber
Kenapa tidak seperti ini saja?
Memberi Anda html dan tubuh (dalam urutan itu) tinggi dan kemudian hanya memberikan elemen Anda tinggi?
Bekerja untukku
sumber
Anda sebenarnya dapat menggunakan
display: table
untuk membagi area menjadi dua elemen (tajuk dan konten), di mana tajuk dapat bervariasi dalam ketinggian dan konten mengisi ruang yang tersisa. Ini berfungsi dengan seluruh halaman, serta ketika area hanyalah konten dari elemen lain yang diposisikan denganposition
set kerelative
,absolute
ataufixed
. Ini akan berfungsi selama elemen induk memiliki tinggi non-nol.Lihat biola ini dan juga kode di bawah ini:
CSS:
HTML:
sumber
memecahkan masalah untuk saya. Dalam kasus saya, saya menerapkan ini pada div yang diperlukan
sumber
Vincent, saya akan menjawab lagi menggunakan persyaratan baru Anda. Karena Anda tidak peduli tentang konten yang disembunyikan jika terlalu lama, Anda tidak perlu mengapung header. Masukkan saja overflow yang disembunyikan pada tag html dan tubuh, dan atur
#content
tinggi hingga 100%. Konten akan selalu lebih panjang dari viewport pada ketinggian header, tetapi akan disembunyikan dan tidak akan menyebabkan scrollbar.sumber
table
karena itu berfungsi. Terima kasih atas pembaruannya.Coba ini
sumber
Saya menemukan solusi yang cukup sederhana, karena bagi saya itu hanya masalah desain. Saya ingin sisa halaman tidak putih di bawah kaki merah. Jadi saya mengatur warna latar belakang halaman menjadi merah. Dan isi backgroundcolor menjadi putih. Dengan tinggi konten diatur ke mis. 20em atau 50% halaman yang hampir kosong tidak akan membuat seluruh halaman merah.
sumber
Saya memiliki masalah yang sama tetapi saya tidak bisa membuat solusi dengan flexbox di atas. Jadi saya membuat template saya sendiri, yang meliputi:
Saya menggunakan flexbox tetapi dengan cara yang lebih sederhana, hanya menggunakan properti display: flex dan direction-direction: baris | kolom :
Saya menggunakan sudut dan saya ingin ukuran komponen saya menjadi 100% dari elemen induknya.
Kuncinya adalah mengatur ukuran (dalam persen) untuk semua orang tua yang masuk untuk membatasi ukuran mereka. Dalam contoh berikut, tinggi myapp memiliki 100% viewport.
Komponen utama memiliki 90% dari viewport, karena header dan footer memiliki 5%.
Saya memposting templat saya di sini: https://jsfiddle.net/abreneliere/mrjh6y2e/3
Html:
sumber
Untuk aplikasi seluler saya hanya menggunakan VH dan VW
Demo - https://jsfiddle.net/u763ck92/
sumber
Memutar ide Pak Alien ...
Ini tampaknya solusi yang lebih bersih daripada kotak fleksibel populer untuk browser yang mendukung CSS3.
Cukup gunakan min-height (bukan tinggi) dengan calc () ke blok konten.
Kalk () dimulai dengan 100% dan mengurangi ketinggian header dan footer (perlu menyertakan nilai padding)
Menggunakan "min-height" bukan "height" sangat berguna sehingga dapat bekerja dengan konten yang diberikan javascript dan kerangka kerja JS seperti Angular2. Jika tidak, perhitungan tidak akan mendorong footer ke bagian bawah halaman setelah konten yang diberikan javascript terlihat.
Berikut adalah contoh sederhana dari header dan footer menggunakan tinggi 50px dan bantalan 20px untuk keduanya.
Html:
Css:
Tentu saja, matematika dapat disederhanakan tetapi Anda mendapatkan idenya ...
sumber
Di Bootstrap:
Gaya CSS:
1) Cukup isi ketinggian ruang layar yang tersisa:
2) mengisi ketinggian ruang layar yang tersisa dan menyelaraskan konten ke tengah elemen induk:
sumber
Ini adalah versi minimal saya sendiri dari solusi Pebbl. Butuh selamanya untuk menemukan trik agar bisa berfungsi di IE11. (Juga diuji di Chrome, Firefox, Edge, dan Safari.)
sumber