ฉันจะจัดองค์ประกอบของ div ให้ถูกต้องได้อย่างไร


352

เนื้อหาของเอกสาร html ของฉันประกอบด้วย 3 องค์ประกอบปุ่มแบบฟอร์มและพื้นที่วาดภาพ ฉันต้องการให้ปุ่มและแบบฟอร์มจัดตำแหน่งชิดขวาและพื้นที่จัดตำแหน่งอยู่ชิดซ้าย ปัญหาคือเมื่อฉันพยายามจัดองค์ประกอบสององค์ประกอบแรกพวกเขาไม่ได้ติดตามกันอีกต่อไปและแทนที่จะอยู่ถัดจากกันในแนวนอนหรือไม่รหัสที่ฉันมีจนถึงตอนนี้ฉันต้องการให้แบบฟอร์มติดตามหลังจากปุ่มด้านขวา ไม่มีที่ว่างในระหว่าง

#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>

คำตอบ:


338

คุณสามารถทำให้ div ที่มีทั้งรูปแบบและปุ่มแล้วให้ลอย div float: right;ไปทางขวาโดยการตั้งค่า


ไม่เคยคิดว่าฉันจะใช้ลอย ฉันลองแล้วmargin-left: auto;แต่นั่นไม่ได้ผลซึ่งทำให้ฉันประหลาดใจเพราะองค์ประกอบที่ฉันพยายามจัดชิดขวานั้นสัมพันธ์กัน
DFSFOT

463

ลอยก็โอเค แต่มีปัญหากับ ie6 และ 7

ฉันต้องการที่จะใช้margin-left:auto; margin-right:0;ใน div ภายใน


6
@ShellNinja ทำไม ฉันรู้ว่า0ถูกต้อง แต่เป็น 0px ... เถียงประเด็นของคุณเพื่อให้เราเรียนรู้บางสิ่งบางอย่าง
pstanton

29
การปล่อยหน่วยให้เบราว์เซอร์ข้ามการคำนวณบางอย่างในการแสดงผลการปรับปรุงนี้ หากเป็นศูนย์ทำไมทรัพยากรสิ้นเปลืองในการคำนวณเลย์เอาต์ตามหน่วย? ศูนย์คือศูนย์โดยไม่คำนึงถึงหน่วย ... ใครจะคิดว่าตรรกะนี้จะถูกสร้างขึ้นในเบราว์เซอร์ในขณะนี้ ลิงก์
ShellNinja

7
ไม่เห็นด้วย แต่ฉันสงสัยว่ามันส่งผลกระทบกับประสิทธิภาพมาก แก้ไข
pstanton

24
ฉันไม่สามารถทำให้มันทำงานได้ div ก็ยังคงอยู่เหมือนเดิม คุณสามารถให้ซอหรือ html / css บางบรรทัดได้หรือไม่?
Griddo

21
ตรวจสอบให้แน่ใจว่าองค์ประกอบของคุณมีdisplay: block;
derek_duncan

203

คำตอบเก่า ๆ การอัปเดต: ใช้ flexbox ตอนนี้ใช้ได้กับเบราว์เซอร์ทั้งหมดแล้ว

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

และคุณสามารถได้รับแม้แต่นักเล่นเพียง:

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

และนักเล่น:

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


4
มันใช้งานได้ แต่เมื่อหน้าจอเล็กลงแทนที่จะวางซ้อนพวกเขาจะแคบลงจริงๆ
jean d'arme

6
คุณต้องเพิ่มคิวรี่มีเดียเพื่อเปลี่ยนทิศทางแบบยืดหยุ่นจากแถวหนึ่งไปอีกคอลัมน์ที่จุดแตกหักที่คุณกำหนด คุณอาจต้องการเปลี่ยนหรือลบเนื้อหาที่จัดชิดขอบในตัวอย่างนี้มิฉะนั้นสิ่งต่างๆจะยืดขึ้นและลงแทนที่จะเป็นซ้ายและขวา
Michael Bushe

สิ่งนี้ใช้ได้สำหรับฉัน คำตอบก่อนหน้าไม่ได้ ใช้ "มันวาว"
โรเจอร์

30

คำตอบอื่น ๆ สำหรับคำถามนี้ไม่ค่อยดีนักเนื่องจากfloat:rightสามารถออกไปข้างนอกกอง div (ล้น: บางครั้งอาจซ่อนอยู่สำหรับผู้ปกครองอาจช่วย) และmargin-left: auto, margin-right: 0สำหรับฉันไม่ได้ทำงานใน div ซ้อนกันที่ซับซ้อน (ฉันไม่ได้ตรวจสอบสาเหตุ)

ผมเคยคิดออกว่าสำหรับองค์ประกอบบางtext-align: rightงานสมมติว่างานนี้เมื่อองค์ประกอบและผู้ปกครองทั้งสองหรือinlineinline-block

หมายเหตุ: text-alignคุณสมบัติ CSS อธิบายถึงวิธีการจัดแนวเนื้อหาเช่นข้อความในองค์ประกอบบล็อกหลัก text-alignไม่ควบคุมการจัดตำแหน่งขององค์ประกอบบล็อกเองเฉพาะเนื้อหาอินไลน์

ตัวอย่าง:

<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>

นี่คือ JS ซอ



15

หากคุณมีหลาย divs ที่คุณต้องการจัดเรียงแบบเคียงข้างกันที่ด้านขวาสุดของ div parent ตั้งtext-align: right;บน div parent


15

คุณสามารถใช้flexboxกับการflex-growที่จะผลักดันองค์ประกอบสุดท้ายไปทางขวา

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

1
โดยส่วนตัวฉันรู้สึกว่านี่เป็นคำตอบที่ถูกต้องสำหรับปี 2020: P
Mike Kellogg

2

หากคุณไม่จำเป็นต้องรองรับ IE9 และด้านล่างคุณสามารถใช้ flexbox เพื่อแก้ไขปัญหานี้: codepen

นอกจากนี้ยังมีข้อบกพร่องเล็กน้อยใน IE10 และ 11 ( รองรับ flexbox ) แต่ไม่มีในตัวอย่างนี้

คุณแนวตั้งสามารถปรับ<button>และโดยการตัดพวกเขาในภาชนะที่มี<form> flex-direction: columnลำดับแหล่งที่มาขององค์ประกอบจะเป็นลำดับที่แสดงจากบนลงล่างดังนั้นฉันจึงเรียงลำดับใหม่

flex-direction: rowจากนั้นคุณสามารถจัดรูปแบบแนวนอนและปุ่มภาชนะที่มีผ้าใบห่อไว้ในภาชนะที่มี ลำดับแหล่งที่มาขององค์ประกอบอีกครั้งจะเป็นลำดับที่แสดงจากซ้ายไปขวาดังนั้นฉันจึงเรียงลำดับใหม่

นอกจากนี้สิ่งนี้จะกำหนดให้คุณลบกฎทั้งหมดpositionและfloatสไตล์ออกจากโค้ดที่ลิงก์ในคำถาม

นี่คือเวอร์ชัน HTML ที่ถูกลดทอนลงใน codepen ที่ลิงก์ด้านบน

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

และนี่คือ CSS ที่เกี่ยวข้อง

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

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

1

คำตอบง่ายๆอยู่ที่นี่:

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

0

คุณสามารถใช้ padding-left: 60% (สำหรับอดีต) เพื่อจัดเนื้อหาของคุณไปทางขวาและห่อเนื้อหาพร้อมกันใน container ที่ตอบสนอง (ฉันต้องการ navbar ในกรณีของฉัน) เพื่อให้แน่ใจว่ามันทำงานได้ในทุกตัวอย่าง



-13

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่คุณใช้ไม่<div id=xyz align="right">ถูกต้องใช่ไหม

คุณสามารถแทนที่ขวาด้วยซ้ายกึ่งกลางและจัดชิดขอบ

ทำงานบนเว็บไซต์ของฉัน :)


21
โปรดอย่าใช้แอตทริบิวต์ HTML เพื่อจัดรูปแบบหน้าของคุณ นั่นคือสิ่งที่ CSS ทำขึ้นมา ในความเป็นจริงalignแอตทริบิวต์ที่ถูกเลิกใช้ในขณะนี้
ฮันนา

4
... และด้วยเหตุผลสำหรับคำถามเช่นนี้และความต้องการที่จะตอบเนื่องจากวิธีการแบบเก่าไม่ทำงานอีกต่อไป
vapcguy

ohohoh ลบมาก))
Nessi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.