สอง divs หนึ่งความกว้างคงที่อีกอันที่เหลือ


99

ฉันมีคอนเทนเนอร์ div สองอัน

ในขณะที่ความกว้างหนึ่งต้องมีความกว้างเฉพาะ แต่ฉันก็ต้องปรับมันดังนั้น div อื่นจึงใช้พื้นที่ที่เหลือ มีวิธีใดบ้างที่ฉันสามารถทำได้?

.left {
    float: left;
    width: 83%;
    display: table-cell;
    vertical-align: middle;
    min-height: 50px;
    margin-right: 10px;
    overflow: auto;
}

.right {
    float: right;
    width: 16%;
    text-align: right;
    display: table-cell;
    vertical-align: middle;
    min-height: 50px;
    height: 100%;
    overflow: auto;
}
<div class="left"></div>
<div class="right"></div> <!-- needs to be 250px -->


4
อย่าใช้แฮ็กที่มีอายุหลายสิบปีสำหรับเบราว์เซอร์โบราณ เลื่อนลงเพื่อดูโซลูชัน Flexbox ที่ทันสมัย
Evgeny

1
ก่อนที่คุณจะติดตามลิงก์ของ Evgeny ให้พิจารณาเบราว์เซอร์ที่ผู้ใช้ของคุณใช้งานจริงแทนที่จะเป็นเบราว์เซอร์ที่คุณต้องการ Flexbox จะไม่แสดงผลอย่างสวยงามบน IE 9 ของศาสตราจารย์ของคุณ: caniuse.com/#feat=flexbox
duhaime

@duhaime IE9 มีการใช้งานทั่วโลก 0.13%
Evgeny

ดังนั้น 1 ใน 1,000 ผู้ใช้ ...
duhaime

คำตอบ:


127

ดู: http://jsfiddle.net/SpSjL/ (ปรับความกว้างของเบราว์เซอร์)

HTML:

<div class="right"></div>
<div class="left"></div>

CSS:

.left {
    overflow: hidden;
    min-height: 50px;
    border: 2px dashed #f0f;
}

.right {
    float: right;
    width: 250px;
    min-height: 50px;
    margin-left: 10px;
    border: 2px dashed #00f;
}

คุณสามารถทำได้ด้วยdisplay: tableซึ่งโดยปกติจะเป็นแนวทางที่ดีกว่า: ฉันจะวางองค์ประกอบอินพุตในบรรทัดเดียวกับป้ายกำกับได้อย่างไร


4
มันใช้ไม่ได้กับฉัน ทางซ้ายจะมีความกว้าง 100% และทางขวาคือ 250px สองบรรทัด :(
หมี

19
คุณต้องสลับลำดับของdivs เช่นในคำตอบของฉันและการสาธิตของฉัน rightแล้วleft.
สามสิบดอท

1
โดยรวมแล้วสิ่งนี้ใช้ได้กับฉัน แต่บางครั้งเมื่อฉันมีข้อความใน div ด้านซ้ายแทนที่จะตัดไปที่บรรทัดถัดไป (และมีช่องว่าง) มันจะถูกตัดออกทางด้านขวา (โดยที่ div ด้านขวาเริ่มต้น) ฉันจะตัดข้อความใน div ด้านซ้ายได้อย่างไร
Guy

1
DIV แบบไม่ลอยเติมเต็มความกว้าง เป็นความคิดที่ไม่ดีเมื่อเนื้อหาสูงกว่า DIV แบบลอยหรือข้อความยาวเกินไป
netAction

51

มันเป็น 2017 และวิธีที่ดีที่สุดที่จะทำคือการใช้ flexbox ซึ่งเป็นIE10 + เข้ากันได้

.box {
  display: flex;
}

.left {
  flex: 1;  /* grow */
  border: 1px dashed #f0f;
}

.right {
  flex: 0 0 250px; /* do not grow, do not shrink, start at 250px */
  border: 1px dashed #00f;
}
<div class="box">
  <div class="left">Left</div>
  <div class="right">Right 250px</div>
</div>


1
ความคิดเห็นของคุณเกี่ยวกับคำถามช่วยให้ฉันไม่ต้องพยายามสนับสนุน IE6 ขอบคุณ!
Mike Davlantes

สิ่งนี้ดีเช่นกัน แต่ calc () ดีกว่า flex มากเนื่องจากเข้ากันได้กับ IE9 และ Chrome 26
Don Dilanga

นี้ทำงานได้ดีสำหรับฉัน. ไม่จำเป็นต้องกำหนดความกว้าง. right
rotaercz

1
มันฆ่าฉันใน 2017/2018/2019 เรายังคงได้รับความคิดเห็นตามแนวของ BEWARE OF IE 9
Mike Devenney

คุณสามารถตั้งค่าความกว้างของ div ที่ถูกต้องเป็นอัตโนมัติได้เช่นกันเช่น "flex: 0 0 auto;"
dijoe

43

คุณสามารถใช้ฟังก์ชัน calc () ของ CSS

การสาธิต: http://jsfiddle.net/A8zLY/543/

<div class="left"></div>
<div class="right"></div>

.left {
height:200px;
width:calc(100% - 200px);
background:blue;
float:left;
}

.right {
width:200px;
height:200px;
background:red;
float:right;   
}

หวังว่านี่จะช่วยคุณได้ !!


ขอบคุณสำหรับคำแนะนำ. ฉันตรวจสอบความเข้ากันได้ของเบราว์เซอร์แล้วและถือว่าสูงสำหรับการใช้งานที่เสถียร
Farside

1
ควรเลือกคำตอบนี้เป็นคำตอบที่ดีที่สุดเพราะในคำตอบนี้แท็ก DIV จะไม่ถูกสลับเหมือนในคำตอบที่ดีที่สุด
Don Dilanga

14

หากคุณสามารถพลิกคำสั่งในซอร์สโค้ดได้คุณสามารถทำได้ดังนี้:

HTML:

<div class="right"></div> // needs to be 250px    
<div class="left"></div>

CSS:

.right {
  width: 250px;
  float: right;
}   

ตัวอย่าง: http://jsfiddle.net/blineberry/VHcPT/

เพิ่มคอนเทนเนอร์และคุณสามารถทำได้ด้วยลำดับซอร์สโค้ดปัจจุบันของคุณและการกำหนดตำแหน่งที่แน่นอน:

HTML:

<div id="container">
  <div class="left"></div>
  <div class="right"></div>
</div>

CSS:

#container {
  /* set a width %, ems, px, whatever */
  position: relative;
}

.left {
  position: absolute;
  top: 0;
  left: 0;
  right: 250px;
}

.right {
  position: absolute;
  background: red;
  width: 250px;
  top: 0;
  right: 0;
}

นี่.leftdiv ได้รับการตั้งค่าโดยปริยายความกว้างจากtop, leftและรูปแบบที่ช่วยให้สามารถเติมช่องว่างที่เหลืออยู่ในright#container

ตัวอย่าง: http://jsfiddle.net/blineberry/VHcPT/3/


ตัวอย่าง FIrst ดูเหมือนจะใช้ไม่ได้จริง . left div ใน jsFiddle คือความกว้างเต็มของหน้าจอ ถ้า div ทั้งสองมีความสูงเท่ากันก็ถือว่าดีมาก แต่ในกรณีนี้ให้เพิ่ม padding 5px ไปที่. left แล้วคุณจะเห็น
user3413723

1
วิธีที่สองใช้ได้ผลดีสำหรับฉัน อัจฉริยะ!
user3413723

6

หากคุณสามารถห่อไว้ในภาชนะได้<div>คุณสามารถใช้การวางตำแหน่งเพื่อทำให้ด้านซ้าย<div>ทอดสมอได้left:0;right:250pxโปรดดูการสาธิตนี้ ตอนนี้ฉันจะบอกว่าสิ่งนี้จะใช้ไม่ได้ใน IE6 เนื่องจากมีเพียงมุมเดียวเท่านั้นที่<div>สามารถวางตำแหน่งได้อย่างสมบูรณ์บนหน้าเว็บ ( ดูคำอธิบายทั้งหมดที่นี่ )


3

1- มี div wrapper ตั้งค่า padding และ margin ตามที่คุณต้องการ
2- ทำให้ด้านซ้ายแบ่งตามความกว้างที่คุณต้องการและทำให้มันลอยไปทางซ้าย
3- กำหนดระยะขอบ div ด้านขวาให้เท่ากับความกว้างด้านซ้าย

.left
{
    ***width:300px;***
    float: left;
    overflow:hidden;

}

.right
{
    overflow: visible;
    ***margin-left:300px;***
}



<div class="wrapper">
    <div class="left">
        ...
    </div>

    <div class="right" >
        ...
    </div>

</div>

หวังว่านี่จะเหมาะกับคุณ!



1

ตั้งค่าทางขวาของคุณเป็นความกว้างที่ระบุแล้วลอยทางด้านซ้ายของคุณเพียงตั้งค่าระยะขอบขวาเป็น 250px

.left {
vertical-align: middle;
min-height: 50px;
margin-right: 250px;
overflow: auto

}

.right {
width:250px;
text-align: right;
display: table-cell;
vertical-align: middle;
min-height: 50px;
height: 100%;
overflow: auto
}

ฆ่าประเภทการแสดงผลใน. right และตรวจสอบให้แน่ใจว่าคุณไม่มีการตั้งค่าที่ชัดเจนในทุกที่ที่จะมีผลต่อ. left
meteorainer

คุณมี div wrapper ชนิดใดบ้าง? มีบางอย่างออนไลน์ที่ฉันสามารถไปตรวจสอบได้หรือเป็นแบบท้องถิ่นทั้งหมด
meteorainer

มันเป็นแบบท้องถิ่นอย่างสมบูรณ์ขอผมลองใส่ jsfiddle
หมี

ฮ่า ๆ คุณถอดลูกลอยออกแล้ว: ถูกต้อง นอกจากนี้อย่าลืมคำนึงถึงความกว้างของเส้นขอบด้วยดังนั้นหากคุณจะปล่อยให้ความกว้างนั้นลบความกว้างออกจากความกว้างของ div อันใดอันหนึ่ง
meteorainer

0

หากคุณต้องการโซลูชันข้ามเบราว์เซอร์คุณสามารถใช้แนวทางของฉันที่ชัดเจนและง่ายดาย

.left{
        position: absolute;
        height: 150px;
        width:150px;
        background: red;
        overflow: hidden;
        float:left;
}
.right{
        position:relative;
        height: 150px;
        width:100%;
        background: red;
        margin-left:150px;
        background: green;
        float:right;
}

-1

ใช้วิธีง่ายๆนี้สามารถช่วยคุณได้

<table width="100%">
    <tr>
         <td width="200">fix width</td>
         <td><div>ha ha, this is the rest!</div></td>
    </tr>
</table>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.