Bagaimana saya bisa membuat div mengisi lebar yang tersisa?
<div id="Main" style="width: 500px;">
<div id="div1" style="width: 100px;"></div>
<div id="div2"></div>
<div id="div3" style="width: 100px; float: right;"></div>
</div>
Bagaimana saya bisa div2
mengisi sisanya?
Jawaban:
Cobalah sesuatu seperti ini:
<style> #divMain { width: 500px; } #left-div { width: 100px; float: left; background-color: #fcc; } #middle-div { margin-left: 100px; margin-right: 100px; background-color: #cfc; } #right-div { width: 100px; float: right; background-color: #ccf; } </style> <div id="divMain"> <div id="left-div"> left div </div> <div id="right-div"> right div </div> <div id="middle-div"> middle div<br />bit taller </div> </div>
div secara alami akan menggunakan lebar 100% dari penampungnya, tidak perlu menyetel lebar ini secara eksplisit. Dengan menambahkan margin kiri / kanan yang sama dengan dua div sisi, isinya sendiri dipaksa untuk duduk di antara keduanya.
Perhatikan bahwa "div tengah" berada setelah "div kanan" di HTML
sumber
Solusi terkini (Oktober 2014): siap untuk tata letak yang lancar
Pengantar:
Solusi ini bahkan lebih sederhana daripada yang disediakan oleh
Leigh
. Ini sebenarnya berdasarkan itu.Di sini Anda dapat melihat bahwa elemen tengah (dalam kasus kami, dengan
"content__middle"
class) tidak memiliki properti dimensi yang ditentukan - tidak ada lebar, atau padding, atau properti terkait margin sama sekali - tetapi hanyaoverflow: auto;
(lihat catatan 1).Keuntungan besarnya adalah sekarang Anda dapat menentukan a
max-width
dan amin-width
pada elemen kiri & kanan . Yang luar biasa untuk tata letak yang lancar .. maka tata letak responsif :-)catatan 1: versus jawaban Leigh di mana Anda perlu menambahkan properti
margin-left
&margin-right
ke"content__middle"
kelas.Kode dengan tata letak non-fluid:
Di sini elemen kiri & kanan (dengan kelas
"content__left"
dan"content__right"
) memiliki lebar tetap (dalam piksel): karenanya disebut tata letak non-fluid.Demo Langsung di http://jsbin.com/qukocefudusu/1/edit?html,css,output
<style> /* * [1] & [3] "floats" makes the 2 divs align themselves respectively right & left * [2] "overflow: auto;" makes this div take the remaining width */ .content { width: 100%; } .content__left { width: 100px; float: left; /* [1] */ background-color: #fcc; } .content__middle { background-color: #cfc; overflow: auto; /* [2] */ } .content__right { width: 100px; float: right; /* [3] */ background-color: #ccf; } </style> <div class="content"> <div class="content__left"> left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/> </div> <div class="content__right"> right div<br/>right div<br/>right div<br/>right div<br/> </div> <div class="content__middle"> middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller </div> </div>
Kode dengan tata letak fluida:
Di sini elemen kiri & kanan (dengan kelas
"content__left"
dan"content__right"
) memiliki lebar variabel (dalam persentase) tetapi juga lebar minimum dan maksimum: maka disebut tata letak fluida.Demo Langsung dalam tata letak yang lancar dengan
max-width
properti http://jsbin.com/runahoremuwu/1/edit?html,css,output<style> /* * [1] & [3] "floats" makes the 2 divs align themselves respectively right & left * [2] "overflow: auto;" makes this div take the remaining width */ .content { width: 100%; } .content__left { width: 20%; max-width: 170px; min-width: 40px; float: left; /* [1] */ background-color: #fcc; } .content__middle { background-color: #cfc; overflow: auto; /* [2] */ } .content__right { width: 20%; max-width: 250px; min-width: 80px; float: right; /* [3] */ background-color: #ccf; } </style> <div class="content"> <div class="content__left"> max-width of 170px & min-width of 40px<br />left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/> </div> <div class="content__right"> max-width of 250px & min-width of 80px<br />right div<br/>right div<br/>right div<br/>right div<br/> </div> <div class="content__middle"> middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller </div> </div>
Dukungan Browser
Diuji di BrowserStack.com pada browser web berikut:
sumber
overflow
membuat konteks pemformatan blok? akandisplay: flex
memiliki efek yang sama?overflow-y: hidden
karena a) lebar yang diizinkan untuk disetel, b) memiliki dukungan browser terbaik dan c) bukan tabelFlex-box adalah solusinya - dan mereka luar biasa. Saya sudah menginginkan sesuatu seperti ini dari css selama satu dekade. Yang Anda butuhkan hanyalah menambahkan
display: flex
gaya Anda untuk "Utama" danflex-grow: 100
(di mana 100 adalah sembarang - tidak penting bahwa itu tepat 100). Coba tambahkan gaya ini (warna ditambahkan untuk membuat efek terlihat):<style> #Main { background-color: lightgray; display: flex; } #div1 { border: 1px solid green; height: 50px; display: inline-flex; } #div2 { border: 1px solid blue; height: 50px; display: inline-flex; flex-grow: 100; } #div3 { border: 1px solid orange; height: 50px; display: inline-flex; } </style>
Info lebih lanjut tentang kotak fleksibel di sini: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
sumber
Gunakan properti CSS Flexbox
flex-grow
untuk mencapai ini..main { display: flex; } .col-1, .col-3 { width: 100px; } .col-2 { flex-grow: 1; }
<div class="main"> <div class="col-1" style="background: #fc9;">Left column</div> <div class="col-2" style="background: #eee;">Middle column</div> <div class="col-3" style="background: #fc9;">Right column</div> </div>
sumber
Meski
bit
terlambat memposting jawaban, berikut adalah pendekatan alternatif tanpa menggunakan margin.<style> #divMain { width: 500px; } #div1 { width: 100px; float: left; background-color: #fcc; } #div2 { overflow:hidden; background-color: #cfc; } #div3 { width: 100px; float: right; background-color: #ccf; } </style> <div id="divMain"> <div id="div1"> div 1 </div> <div id="div3"> div 3 </div> <div id="div2"> div 2<br />bit taller </div> </div>
Metode ini bekerja seperti sihir, tapi berikut penjelasannya :) \
Bermain-main dengan contoh serupa di sini.
sumber
Div yang harus mengambil ruang yang tersisa haruslah sebuah kelas .. Div lainnya dapat berupa id tetapi harus memiliki lebar ..
CSS :
#main_center { width:1000px; height:100px; padding:0px 0px; margin:0px auto; display:block; } #left { width:200px; height:100px; padding:0px 0px; margin:0px auto; background:#c6f5c6; float:left; } .right { height:100px; padding:0px 0px; margin:0px auto; overflow:hidden; background:#000fff; } .clear { clear:both; }
HTML :
<body> <div id="main_center"> <div id="left"></div> <div class="right"></div> <div class="clear"></div> </div> </body>
Tautan berikut memiliki kode dalam tindakan, yang seharusnya menyelesaikan masalah cakupan area yang tersisa.
jsFiddle
sumber
Saya sedang mencari solusi untuk masalah sebaliknya di mana saya membutuhkan div lebar tetap di tengah dan div lebar fluida di kedua sisi, jadi saya datang dengan yang berikut dan berpikir saya akan mempostingnya di sini jika ada yang membutuhkannya.
#wrapper { clear: both; width: 100%; } #wrapper div { display: inline-block; height: 500px; } #center { background-color: green; margin: 0 auto; overflow: auto; width: 500px; } #left { float: left; } #right { float: right; } .fluid { background-color: yellow; width: calc(50% - 250px); }
<div id="wrapper"> <div id="center"> This is fixed width in the centre </div> <div id="left" class="fluid"> This is fluid width on the left </div> <div id="right" class="fluid"> This is fluid width on the right </div> </div>
Jika Anda mengubah lebar
#center
elemen, maka Anda perlu memperbarui properti lebar.fluid
menjadi:width: calc(50% - [half of center width]px);
sumber