Hai divs cạnh nhau - Hiển thị chất lỏng


222

Tôi đang cố gắng đặt hai div cạnh nhau và sử dụng CSS sau cho nó.

#left {
  float: left;
  width: 65%;
  overflow: hidden;
}

#right {
  overflow: hidden;
}

HTML rất đơn giản, hai div trái và phải trong div bao bọc.

<div id="wrapper">
  <div id="left">Left side div</div>
  <div id="right">Right side div</div>
</div>

Tôi đã cố gắng rất nhiều lần để tìm kiếm một cách tốt hơn trên StackOverflow và các trang web khác, nhưng không thể tìm thấy sự trợ giúp chính xác.

Vì vậy, mã hoạt động tốt ngay từ cái nhìn đầu tiên. Vấn đề là ở chỗ, div bên trái sẽ tự động đệm / lề khi tôi tăng chiều rộng bằng (%). Vì vậy, ở độ rộng 65%, div bên trái có một số phần đệm hoặc lề và không được căn chỉnh hoàn hảo với div bên phải, tôi đã cố gắng đệm / lề 0 nhưng không gặp may. Thứ hai, nếu tôi phóng to trang, div bên phải trượt bên dưới div bên trái, Nó giống như không hiển thị chất lỏng.

Lưu ý: Tôi xin lỗi, tôi đã tìm kiếm rất nhiều. Câu hỏi này đã được hỏi nhiều lần nhưng những câu trả lời đó không giúp tôi. Tôi đã giải thích vấn đề là gì trong trường hợp của tôi.

Tôi hy vọng có một sửa chữa cho điều đó.

Cảm ơn bạn.

EDIT: Xin lỗi, tôi gặp sự cố HTML, Có hai div "hộp" ở cả bên trái và bên phải, Họ có phần đệm theo%, Vì vậy, bên trái hiển thị nhiều phần đệm hơn vì chiều rộng lớn hơn. Xin lỗi, CSS ở trên hoạt động hoàn hảo, hiển thị chất lỏng và đã sửa, Xin lỗi vì đã hỏi sai ...


1
Có hai hộp div? Hộp div là gì? Câu hỏi này không rõ ràng.
john ktejik

Câu trả lời:


251

Thay vào đó, hãy thử một hệ thống như thế này:

.container {
  width: 80%;
  height: 200px;
  background: aqua;
  margin: auto;
  padding: 10px;
}

.one {
  width: 15%;
  height: 200px;
  background: red;
  float: left;
}

.two {
  margin-left: 15%;
  height: 200px;
  background: black;
}
<section class="container">
  <div class="one"></div>
  <div class="two"></div>
</section>

Bạn chỉ cần thả nổi một div nếu bạn sử dụng lề trái ở bên kia bằng với chiều rộng của div đầu tiên. Điều này sẽ hoạt động bất kể thu phóng là gì và sẽ không có vấn đề về pixel phụ.


1
Điều đó không có ích gì, hiện tại chế độ phóng to đã được sửa, nó nói đã được sửa, nhưng div bên phải hiện đang trượt xuống và cố định tại vị trí đó
Waleed

Bạn có thể đã làm hỏng một cái gì đó, kiểm tra mã của bạn hoặc cho tôi biết liên kết đến jsFiddle và nhìn vào nó.
dezman

aww người đàn ông, tôi xin lỗi. Các div đã được sửa bởi CSS ở trên mà tôi đã đưa ra, nó chỉ là div "hộp" ở cả bên trái và bên phải, có phần đệm và lề theo%, bởi vì div bên phải ngắn, tại sao, nó có phần đệm và lề. Xin lỗi ...
Waleed

Không nên <section>là một <div>thay thế?
jvriesem

218

Điều này thật dễ dàng với một flexbox:

#wrapper {
  display: flex;
}

#left {
  flex: 0 0 65%;
}

#right {
  flex: 1;
}
<div id="wrapper">
  <div id="left">Left side div</div>
  <div id="right">Right side div</div>
</div>


5
Đẹp, flexbox chắc chắn là con đường để đi
Julian Soro

4
Theo trang web này, flex nên hoạt động trên 94% trình duyệt. caniuse.com/#search=flex
Adrian

8
@JoostS không phải là 94% các trình duyệt khác nhau có sẵn (vì nó luôn hoạt động trên chrome, Mozilla, IE, v.v.), không phải nó hoạt động 94% bất kể trình duyệt nào?
Joe

6
Hiện tại nó đứng ở mức 97 +%. Về cơ bản, tôi muốn nói rằng nếu bạn không cần nhắm mục tiêu IE8, hãy sử dụng flexbox, trong trường hợp này và các mục khác. Các giải pháp Flexbox hầu như luôn thanh lịch hơn và dễ dàng hơn để lý do.
Alan Thomas

6
Nếu bạn có một trang web hiện tại, đừng bao giờ chia sẻ trình duyệt, hãy xem nhật ký lưu lượng truy cập của riêng bạn. Trên hầu hết các trang web của tôi, IE8 chỉ chiếm khoảng 0,01% lưu lượng truy cập. Tuy nhiên ... Tôi đã thấy các trang web cụ thể nơi khán giả là người dùng trong các tập đoàn, chính phủ hoặc tổ chức phi lợi nhuận sử dụng nhiều phần mềm cũ, và sau đó việc sử dụng trình duyệt IE cũ có thể cao đáng ngạc nhiên.
cazort

95

Sử dụng CSS này cho trang web hiện tại của tôi. Nó hoạt động hoàn hảo!

#sides{
margin:0;
}
#left{
float:left;
width:75%;
overflow:hidden;
}
#right{
float:left;
width:25%;
overflow:hidden;
} 

49
Vui mừng khi biết bạn đã tìm thấy và chấp nhận câu trả lời của riêng bạn, nhưng #sides là gì? Nó không có trong câu hỏi ban đầu của bạn.
JMD

2
Sử dụng float: left trên cả hai đứa trẻ (#right) sẽ giết chiều cao của div cha (#wrapper). Vì vậy, giải pháp này phụ thuộc vào yêu cầu. Tốt hơn là chỉ thả nổi một đứa trẻ. (# Còn lại trong trường hợp của bạn)
Rahul Gandhi

8

Đây là câu trả lời của tôi cho những người đang Googling:

CSS:

.column {
    float: left;
    width: 50%;
}

/* Clear floats after the columns */
.container:after {
    content: "";
    display: table;
    clear: both;
}

Đây là HTML:

<div class="container">
    <div class="column"></div>
    <div class="column"></div>
</div>

3

Làm cho cả hai div như thế này. Điều này sẽ sắp xếp cả hai div bên cạnh nhau.

.my-class {
  display : inline-flex;
} 

1

#sides{
margin:0;
}
#left{
float:left;
width:75%;
overflow:hidden;
}
#right{
float:left;
width:25%;
overflow:hidden;
} 
<h1 id="left">Left Side</h1>
<h1 id="right">Right Side</h1>
<!-- It Works!-->


Lý do cho tràn: ẩn là gì? Điều đó dường như không cần thiết ...
Honza

0
   <div style="height:50rem; width:100%; margin: auto;">
    <div style="height:50rem; width:20%; margin-left:4%; margin- 
    right:0%; float:left; background-color: black;">

    </div>
    <div style="height:50rem; width:20%; margin-left:4%; margin- 
    right:0%; float:left;  background-color: black;">

    </div>
    <div style="height:50rem; width:20%; margin-left:4%; margin- 
    right:0%; float:left;  background-color: black;">

    </div>
    <div style="height:50rem; width:20%; margin-left:4%; margin- 
    right:0%; float:left;  background-color: black;">

    </div>
   </div>

lề phải không cần thiết mặc dù.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.