Làm thế nào để tôi căn chỉnh các yếu tố div?


351

Phần thân của tài liệu html của tôi bao gồm 3 phần tử, một nút, một biểu mẫu và một khung vẽ. Tôi muốn nút và biểu mẫu được căn phải và khung vẽ ở bên trái. Vấn đề là khi tôi cố gắng căn chỉnh hai yếu tố đầu tiên, chúng không còn theo dõi nhau nữa và thay vào đó nằm cạnh nhau theo chiều ngang?, Đây là mã tôi có, tôi muốn biểu mẫu theo dõi trực tiếp sau nút bên phải không có khoảng trống ở giữa.

#cTask {
  background-color: lightgreen;
}

#button {
  position: relative;
  float: right;
}

#addEventForm {
  position: relative;
  float: right;
  border: 2px solid #003B62;
  font-family: verdana;
  background-color: #B5CFE0;
  padding-left: 10px;
}
<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
  <script type="text/javascript" src="timeline.js"></script>
  <link rel="stylesheet" href="master.css" type="text/css" media="screen" />
</head>

<body bgcolor="000" TEXT="FFFFFF">
  <div id="button">
    <button onclick="showForm()" type="button" id="cTask">
        Create Task
    </button>
  </div>
  <div id="addEventForm">
    <form>
      <p><label>Customer name: <input></label></p>
      <p><label>Telephone: <input type=tel></label></p>
      <p><label>E-mail address: <input type=email></label></p>
    </form>
  </div>
  <div>
    <canvas id="myBoard" width="1000" height="600">
      <p>Your browser doesn't support canvas.</p>
    </canvas>
  </div>
</body>
</html>

Câu trả lời:


338

Bạn có thể tạo một div chứa cả biểu mẫu và nút, sau đó làm cho div nổi sang phải bằng cách cài đặt float: right;.


Không bao giờ nghĩ rằng tôi đang sử dụng float. Tôi đã thử margin-left: auto;nhưng điều đó không làm tôi ngạc nhiên vì yếu tố tôi đang cố gắng sắp xếp bên phải là tương đối.
DFSFOT

461

phao là ok, nhưng có vấn đề với eg6 & 7.

Tôi muốn sử dụng margin-left:auto; margin-right:0;trên div bên trong.


6
@ShellNinja tại sao? Tôi biết 0là hợp lệ, tuy nhiên 0px cũng vậy ... hãy tranh luận quan điểm của bạn để chúng tôi học được điều gì đó.
pstanton 17/03/2016

29
Rời khỏi đơn vị cho phép trình duyệt bỏ qua các tính toán nhất định để hiển thị hiệu suất cải thiện này. Nếu không, tại sao lại lãng phí tài nguyên tính toán bố cục dựa trên một đơn vị? Không là 0 bất kể đơn vị nào ... Mọi người sẽ nghĩ logic này sẽ được tích hợp vào trình duyệt ngay bây giờ. liên kết
ShellNinja

7
không thể không đồng ý nhưng tôi nghi ngờ nó ảnh hưởng đến hiệu suất nhiều. biên tập.
pstanton

24
Tôi không thể làm việc này được, div vẫn thẳng hàng. Bạn có thể cung cấp một fiddle hoặc một số (nhiều) dòng html / css không?
Griddo

21
Đảm bảo yếu tố của bạn códisplay: block;
derek_duncan

202

Câu trả lời cũ. Một bản cập nhật: sử dụng flexbox, khá nhiều công việc hiện có trong tất cả các trình duyệt.

<div style="display: flex; justify-content: flex-end">
  <div>I'm on the right</div>
</div>

Và bạn có thể nhận được thậm chí fancier, chỉ đơn giản là:

<div style="display: flex; justify-content: space-around">
  <div>Left</div>
  <div>Right</div>
</div>

Và người hâm mộ:

<div style="display: flex; justify-content: space-around">
   <div>Left</div>
   <div>Middle</div>
  <div>Right</div>
</div>


4
nó hoạt động, nhưng khi màn hình trở nên nhỏ thay vì xếp chồng, chúng chỉ bị thu hẹp thực sự
jean

6
Bạn cần thêm một truy vấn phương tiện để thay đổi hướng flex từ hàng sang cột tại điểm ngắt bạn xác định. Bạn có thể muốn thay đổi hoặc xóa nội dung biện minh của mình trong ví dụ này nếu không mọi thứ sẽ kéo dài lên xuống thay vì trái và phải.
Michael Bushe

Điều này làm việc cho tôi. Câu trả lời trước thì không. Sử dụng "sáng bóng".
Roger

30

Các câu trả lời khác cho câu hỏi này không tốt lắm vì float:rightcó thể đi ra ngoài div cha (tràn: ẩn cho cha mẹ đôi khi có thể giúp đỡ) và margin-left: auto, margin-right: 0đối với tôi đã không làm việc trong các div lồng nhau phức tạp (tôi không điều tra lý do tại sao).

Tôi đã tìm ra rằng đối với một số yếu tố text-align: righthoạt động, giả sử công trình này khi các yếu tố và phụ huynh đều inlinehay inline-block.

Lưu ý: thuộc tính text-alignCSS mô tả cách nội dung nội tuyến như văn bản được căn chỉnh trong thành phần khối chính của nó. text-alignkhông kiểm soát sự liên kết của chính các thành phần khối, chỉ nội dung nội tuyến của chúng.

Một ví dụ:

<div style="display: block; width: 80%; min-width: 400px; background-color: #caa;">
    <div style="display: block; width: 100%">
        I'm parent
    </div>
    <div style="display: inline-block; text-align: right; width: 100%">
        Caption for parent
    </div>
</div>

Đây là một Fiddle JS .



15

Nếu bạn có nhiều div mà bạn muốn căn chỉnh cạnh nhau ở cuối bên phải của div cha, hãy đặt text-align: right;trên div cha.


14

Bạn có thể sử dụng flexboxvới flex-growđể đẩy phần tử cuối cùng sang phải.

<div style="display: flex;">
  <div style="flex-grow: 1;">Left</div>
  <div>Right</div>
</div>

1
Cá nhân tôi cảm thấy đây là câu trả lời đúng cho năm 2020: P
Mike Kellogg

2

Nếu bạn không phải hỗ trợ IE9 trở xuống, bạn có thể sử dụng flexbox để giải quyết vấn đề này: codepen

Cũng có một vài lỗi với IE10 và 11 ( hỗ trợ flexbox ), nhưng chúng không có trong ví dụ này

Bạn có thể căn chỉnh theo chiều dọc <button><form>bằng cách gói chúng trong một thùng chứa vớiflex-direction: column . Thứ tự nguồn của các phần tử sẽ là thứ tự chúng được hiển thị từ trên xuống dưới để tôi sắp xếp lại chúng.

Sau đó, bạn có thể căn chỉnh theo chiều ngang của biểu mẫu & nút chứa với khung vẽ bằng cách gói chúng trong một thùng chứa với flex-direction: row . Một lần nữa, thứ tự nguồn của các phần tử sẽ là thứ tự chúng được hiển thị từ trái sang phải để tôi sắp xếp lại chúng.

Ngoài ra, điều này sẽ yêu cầu bạn loại bỏ tất cả positionfloatquy tắc kiểu từ mã được liên kết trong câu hỏi.

Đây là phiên bản rút gọn của HTML trong codepen được liên kết ở trên.

<div id="mainContainer">
  <div>
    <canvas></canvas>
  </div>
  <div id="formContainer">
    <div id="addEventForm"> 
      <form></form>
    </div>
    <div id="button">
      <button></button>
    </div>
  </div>
</div>

Và đây là CSS có liên quan

#mainContainer {
  display: flex;
  flex-direction: row;
} 

#formContainer {
  display: flex;
  flex-direction: column;
}

1

Câu trả lời đơn giản là đây:

<div style="text-align: right;">
    anything:
    <select id="locality-dropdown" name="locality" class="cls" style="width: 200px; height: 28px; overflow:auto;">
    </select>
</div>

0

Bạn chỉ có thể sử dụng padding-left: 60% (ví dụ) để căn chỉnh nội dung của bạn sang phải và đồng thời bọc nội dung trong thùng chứa đáp ứng (tôi yêu cầu thanh điều hướng trong trường hợp của tôi) để đảm bảo nó hoạt động trong tất cả các ví dụ.


0

Nếu bạn đang sử dụng bootstrap, thì:

<div class="pull-right"></div>

Tôi nghĩ bạn có ý đó <div class="text-right"></div>.
Alex Barker

1
anil không sai, lớp "pull-right" dẫn đến "float: right;" (đã thử nghiệm với Bootstrap 3.4.1)
Fabian Horlacher

-13

Tôi biết đây là một bài viết cũ nhưng bạn không thể sử dụng <div id=xyz align="right"> cho đúng.

Bạn chỉ có thể thay thế bên phải với trái, trung tâm và biện minh.

Làm việc trên trang web của tôi :)


21
Vui lòng không sử dụng các thuộc tính HTML để định dạng trang của bạn. Đó là những gì CSS được tạo ra. Trong thực tế, alignthuộc tính hiện không được chấp nhận .
Hanna

4
... và do đó lý do cho một câu hỏi như thế này và sự cần thiết phải trả lời, vì các phương pháp cũ không còn hoạt động.
vapcguy

ohohoh, rất nhiều tiêu cực))
Nessi
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.