Căn chỉnh các phần tử <div> cạnh nhau


127

Tôi biết đây là một câu hỏi khá đơn giản, nhưng tôi không thể tìm ra nó cho cuộc sống của tôi. Tôi có hai liên kết mà tôi đã áp dụng một hình ảnh nền. Đây là những gì nó hiện tại trông giống như (xin lỗi cho bóng tối, chỉ là một bản phác thảo thô của một nút):

nhập mô tả hình ảnh ở đây

Tuy nhiên, tôi muốn hai nút đó nằm cạnh nhau. Tôi thực sự không thể tìm ra những gì cần phải được thực hiện với sự liên kết.

Đây là HTML

<div id="dB"}>
    <a href="http://notareallink.com" title="Download" id="buyButton">Download</a> 
</div>
<div id="gB">
    <a href="#" title="Gallery" onclick="$j('#galleryDiv').toggle('slow');return false;" id="galleryButton">Gallery</a>     
</div>

Đây là CSS

#buyButton {
    background: url("assets/buy.png") 0 0 no-repeat;
    display:block;
    height:80px;
    width:232px;
     text-indent:-9999px;
}
#buyButton:hover{
width: 232px;
height: 80px;
background-position: -232px 0;
}
#buyButton:active {
width: 232px;
height: 80px;
background-position: -464px 0;
}

#galleryButton {
    background: url("images/galleryButton.png") 0 0 no-repeat;
    display:block;
    height:80px;
    width:230px;
     text-indent:-9999px;
}
#galleryButton:hover{
width: 230px;
height: 80px;
background-position: -230px 0;
}
#galleryButton:active {
width: 230px;
height: 80px;
background-position: -460px 0;
}

5
Điều đầu tiên xuất hiện trong đầu chỉ bằng cách đọc tiêu đề làfloat:left;
JCOC611

2
@ JCOC611: Áp dụng float:left;cho cả hai divđã làm điều đó một cách hoàn hảo. Bạn có thể gửi bình luận của bạn như là một câu trả lời? Cảm ơn!
sudo rm -rf

1
Và thứ hai là display: inline-block;nhưng nó ít được hỗ trợ hơn ...
JV

1
float: còn lại bên trong một container sẽ hoạt động, nhưng tôi sẽ thử sử dụng hai thẻ <span> thay vì <div> s cho các nút.
shiftycow

Như đã đề cập, thêm float: left; vào #buyButton và #galleryButton, sau đó thêm một yếu tố khác rõ ràng: cả hai; để xóa nổi. Tại sao sử dụng div (phần tử khối) để bọc <a>?
ludesign

Câu trả lời:


154

Áp dụng float:left;cho cả hai div của bạn nên làm cho chúng đứng cạnh nhau.


Tôi có nhầm không, hay có clear:both;cần phải đi vào đó ở đâu đó không? Tôi chưa bao giờ là người hiểu biết CSS nhưng có vẻ điển hình khi tôi thấy phao để thấy rõ ràng.
Brad Christie

4
clear:bothsẽ làm chính xác điều ngược lại. "Các phần tử sau phần tử nổi sẽ chảy xung quanh nó. Để tránh điều này, hãy sử dụng thuộc tính rõ ràng."
JCOC611

@ JCOC611: Ah, vậy rõ ràng thường theo sau khi bạn muốn một khả năng nổi tạm thời? Có ý nghĩa. Cảm ơn vì bài học. ;-)
Brad Christie

7
Chỉ cần "rõ ràng", (thật kinh khủng, tôi biết), bạn sẽ cần sử dụng <br style="clear: both;" />nếu bạn có một div thứ ba mà bạn muốn bên dưới hai cái được căn chỉnh.
Tass

3
@Tass bạn chỉ cần có div thứ ba của mình như thế này: <div style="clear: both;">...</div>(không cần br)
intrepidis

136

Hãy coi chừng float: left🤔

Có rất nhiều cách để sắp xếp các yếu tố cạnh nhau.

Dưới đây là những cách phổ biến nhất để đạt được hai yếu tố song song

Bản trình diễn: Xem / chỉnh sửa tất cả các ví dụ dưới đây trên Codepen


Phong cách cơ bản cho tất cả các ví dụ dưới đây

Một số kiểu css cơ bản cho parentchildcác thành phần trong các ví dụ sau:

.parent {
  background: mediumpurple;
  padding: 1rem;
}
.child {
  border: 1px solid indigo;
  padding: 1rem;
}

phao: trái

Sử dụng floatgiải pháp của tôi có ảnh hưởng ngoài ý muốn trên các yếu tố khác. (Gợi ý: Bạn có thể cần phải sử dụng một clearfix .)

html

<div class='parent'>
  <div class='child float-left-child'>A</div>
  <div class='child float-left-child'>B</div>
</div>

css

.float-left-child {
  float: left;
}

hiển thị: khối nội tuyến

html

<div class='parent'>
  <div class='child inline-block-child'>A</div>
  <div class='child inline-block-child'>B</div>
</div>

css

.inline-block-child {
  display: inline-block;
}

Lưu ý : khoảng trắng giữa hai phần tử con này có thể được loại bỏ, bằng cách xóa khoảng trắng giữa các thẻ div:

display: inline-block (không có khoảng trắng)

html

<div class='parent'>
  <div class='child inline-block-child'>A</div><div class='child inline-block-child'>B</div>
</div>

css

.inline-block-child {
  display: inline-block;
}

hiển thị: flex

html

<div class='parent flex-parent'>
  <div class='child flex-child'>A</div>
  <div class='child flex-child'>B</div>
</div>

css

.flex-parent {
  display: flex;
}
.flex-child {
  flex: 1;
}

hiển thị: nội tuyến-flex

html

<div class='parent inline-flex-parent'>
  <div class='child'>A</div>
  <div class='child'>B</div>
</div>

css

.inline-flex-parent {
  display: inline-flex;
}

hiển thị: lưới

html

<div class='parent grid-parent'>
  <div class='child'>A</div>
  <div class='child'>B</div>
</div>

css

.grid-parent {
  display: grid;
  grid-template-columns: 1fr 1fr
}


2
Vâng, nhưng tôi nghe nói rằng việc sử dụng inline-blockcó một số vấn đề tương thích. Ngoài ra, bất kỳ lợi thế để sử dụng hơn float?
sudo rm -rf

1
Có, inline-blocklà mới hơn, do đó trình duyệt sà lan của bạn có thể chưa hỗ trợ nó (mặc dù có nhiều thuộc tính dành riêng cho trình duyệt và cũng có cách giải quyết cho việc này). Ưu điểm là phần tử chứa sẽ bao bọc các phần tử; với floatbạn sẽ phải thêm css vào phần tử cha.
Beau Smith

12

giữ cho nó đơn giản

<div align="center">
<div style="display: inline-block"> <img src="img1.png"> </div>
<div style="display: inline-block"> <img src="img2.png"> </div>
</div>
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.