Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

3 วิธีในการแสดงสอง divs เคียงข้างกัน (float, flexbox, CSS grid)

3 วิธีที่คุณใช้ CSS เพื่อวางองค์ประกอบ HTML div เคียงข้างกัน

(คลิกเพื่อข้ามไปยังแต่ละส่วน)

  • วิธีการลอย
  • วิธีเฟล็กซ์บ็อกซ์
  • วิธีกริด CSS

วิธีการลอย

ในวิธี float เราจะใช้มาร์กอัป HTML ต่อไปนี้:

<div class="float-container">

  <div class="float-child">
    <div class="green">Float Column 1</div>
  </div>
  
  <div class="float-child">
    <div class="blue">Float Column 2</div>
  </div>
  
</div>

.float-container เป็นเพียงองค์ประกอบหลักที่มีทั้ง .float-child องค์ประกอบ

เพื่อให้ได้ div เคียงข้างกัน เราจะใช้กฎ CSS ต่อไปนี้:

.float-container {
    border: 3px solid #fff;
    padding: 20px;
}

.float-child {
    width: 50%;
    float: left;
    padding: 20px;
    border: 2px solid red;
}  

รหัสผลลัพธ์จะมีลักษณะดังนี้:

3 วิธีในการแสดงสอง divs เคียงข้างกัน (float, flexbox, CSS grid)

ฉันได้เพิ่มเส้นขอบและช่องว่างภายในให้กับ div เพื่อให้คุณเห็นว่าเกิดอะไรขึ้นได้ง่ายขึ้น ขอบสีขาวทึบที่หนากว่าด้านนอกคือ .float-container div ซึ่งมีช่องว่างภายใน 20px

แล้วแต่ละ .float-child องค์ประกอบมีขอบสีแดงที่บางกว่าและมีช่องว่างภายในเพิ่มเติม จากนั้นบล็อคสีจริงเป็นองค์ประกอบย่อยของ .float-child องค์ประกอบ (คุณจะเห็นเหตุผลในอีกสักครู่)

ในการวางตำแหน่ง divs เคียงข้างกัน เราใช้ float คุณสมบัติที่จะลอยแต่ละ .float-child องค์ประกอบทางซ้าย

เนื่องจากทั้งคู่ลอยไปทางซ้าย จึงจะแสดงเคียงข้างกันหากมีที่ว่างเพียงพอสำหรับทั้งคู่ เหมาะสมเพราะเรามี .float-child . สองตัว divs แต่ละรายการมีความกว้าง 50%

และช่องว่างระหว่าง div จะถูกสร้างขึ้นโดยการเพิ่มช่องว่างภายในในแต่ละ .float-child div ซึ่งจะมีบล็อคสี

เพิ่มช่องว่างระหว่างคอลัมน์โดยการซ้อนแต่ละคอลัมน์ใน div ภายนอก

บล็อคสีต้องมี div ภายนอก (.float-child ) เพื่อเพิ่มพื้นที่และให้บล็อคทั้งสองข้างชิดกัน

จะเป็นอย่างไรถ้าเรามีเพียง .float-child divs โดยไม่มีช่องว่างภายใน และพยายามเพิ่มช่องว่างโดยใส่ margin-right ค่าในบล็อคแรกแบบนี้?

HTML:

<div class="float-container">

  <div class="float-child green">
    Float Column 1
  </div>
  
  <div class="float-child blue">
    Float Column 2
  </div>
  
</div>

CSS:

.float-child.green {
    margin-right: 20px;
}

ในกรณีนี้ ทั้ง .float-child องค์ประกอบจะใช้พื้นที่ 50% ของความกว้างทั้งหมด แต่องค์ประกอบสีเขียวตัวแรกจะมีระยะขอบ 20px ด้วย

ซึ่งหมายความว่าทั้งสองบล็อกจะใช้ความกว้าง 50% + 20px + 50% จะมีความกว้างมากกว่า 100% 20px ซึ่งหมายความว่าไม่มีที่ว่างเพียงพอสำหรับทั้งคู่ที่จะอยู่เคียงข้างกัน

จากนั้นบล็อกสีน้ำเงินอันที่สองจะห่อไปที่แถวถัดไปใต้บล็อกแรก และลอยไปทางซ้ายที่นั่น:

3 วิธีในการแสดงสอง divs เคียงข้างกัน (float, flexbox, CSS grid)

คุณสามารถลองปรับแต่งความกว้างเพื่อให้เป็น 48% หรือตัวเลขอื่นที่น้อยกว่า 50% เพื่อให้พอดีกับพวกเขา แต่มันจะไม่แน่ชัด

นั่นเป็นเหตุผลที่ฉันชอบห่อบล็อกในชุด div ด้านนอกที่ความกว้าง 50% โดยมีช่องว่างภายในเพื่อเพิ่มช่องว่างระหว่าง div

ทุกวันนี้ มันง่ายกว่าที่จะใช้วิธีการอื่นที่ใหม่กว่าใน CSS เพื่อวาง div เคียงข้างกัน แทนที่จะใช้ float

มาดูหนึ่งในวิธีเหล่านี้กัน:วิธีเฟล็กซ์บ็อกซ์!

วิธี Flexbox

ด้วย flexbox เราสามารถใช้วิธีที่ง่ายกว่าในการจัดองค์ประกอบ div ทั้งสองของเรา

HTML:

<div class="flex-container">

  <div class="flex-child magenta">
    Flex Column 1
  </div>
  
  <div class="flex-child green">
    Flex Column 2
  </div>
  
</div>

CSS:

.flex-container {
    display: flex;
}

.flex-child {
    flex: 1;
    border: 2px solid yellow;
}  

.flex-child:first-child {
    margin-right: 20px;
} 

ด้วย flexbox เราได้ตั้งค่า display: flex บนพาเรนต์ .flex-container องค์ประกอบ. สิ่งนี้จะเปิด flexbox

จากนั้นในแต่ละ .flex-child เรากำลังตั้งค่า flex: 1 . ตัวเลขนี้เหมือนกับอัตราส่วนเปรียบเทียบความกว้างของเด็กแต่ละคนในองค์ประกอบ parent flex

เนื่องจากเหมือนกัน พื้นที่ว่างจึงถูกแบ่งเท่าๆ กัน และเนื่องจากเรามีองค์ประกอบย่อยสององค์ประกอบ แต่ละองค์ประกอบจึงใช้พื้นที่ 50%

โค้ดผลลัพธ์จะมีลักษณะดังนี้:

3 วิธีในการแสดงสอง divs เคียงข้างกัน (float, flexbox, CSS grid)

เพิ่มช่องว่างระหว่าง div โดยใช้ระยะขอบ และยังคงพอดี!

สังเกตว่าเราได้เพิ่มพื้นที่โดยเพิ่ม margin-right: 20px เป็นเพียง .flex-child . ตัวแรก องค์ประกอบ. อย่างไรก็ตาม flexbox นั้นฉลาดพอที่จะพิจารณา 20px พิเศษนั้นเมื่อแบ่งความกว้างที่เหลือออก

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

นี่เป็นเหตุผลสำคัญข้อหนึ่งที่ฉันชอบ flexbox

อย่างไรก็ตาม หากคุณมีองค์ประกอบหลายรายการที่ต้องการจัดวางในตารางแบบตอบสนอง คุณก็ไม่ทราบเสมอไปว่าต้องเพิ่มช่องว่างระหว่างองค์ประกอบไว้ที่ใด

ในกรณีของเรา หากเราต้องการซ้อนสอง div ไว้ใต้อีกอันสำหรับมือถือ เราจะต้องนำ margin-right ออก คุณสมบัติสำหรับความกว้างมือถือ

หรือคุณสามารถเพิ่มองค์ประกอบภายนอกเพิ่มเติมพร้อมช่องว่างภายในสำหรับ .flex-child . แต่ละรายการ คล้ายกับที่เราทำกับวิธี float

มันไม่ได้ใช้งานง่าย 100% แต่ก็ยังใช้งานได้ หากคุณต้องการสร้างเลย์เอาต์ที่ตอบสนองที่ซับซ้อนมากขึ้นด้วย flexbox คุณจะต้องคำนึงถึงสิ่งนี้

มาดูวิธีการใหม่ล่าสุดที่คุณสามารถใช้เพื่อวาง div แบบเคียงข้างกัน:ตาราง CSS

วิธีการกริด CSS

และนี่คือวิธีที่คุณสามารถวาง div ทั้งสองแบบเคียงข้างกัน โดยใช้ตาราง CSS:

HTML:

<div class="grid-container">

    <div class="grid-child purple">
        Grid Column 1
    </div>

    <div class="grid-child green">
        Grid Column 2
    </div>
  
</div>

CSS:

.grid-container {
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-gap: 20px;
}

และนี่คือลักษณะของโค้ด:

3 วิธีในการแสดงสอง divs เคียงข้างกัน (float, flexbox, CSS grid)

การเปลี่ยนแปลงครั้งใหญ่อย่างหนึ่งของกริดคือคุณต้องกำหนดว่าเทมเพลตกริดจะหน้าตาเป็นอย่างไรก่อน หมายถึงจำนวนคอลัมน์และ/หรือแถวที่คุณต้องการในเลย์เอาต์ของคุณ

ในกรณีของเรา เราต้องการสองคอลัมน์ที่มีความกว้างเท่ากัน ดังนั้นในพาเรนต์ .grid-container องค์ประกอบ เราเปิดกริดด้วย display: grid . จากนั้นเราเพิ่มจำนวนคอลัมน์ที่เราต้องการในเลย์เอาต์ด้วย grid-template-columns ทรัพย์สิน

เราต้องการสองคอลัมน์ที่มีความกว้างเท่ากัน ดังนั้นเราจึงตั้งค่าเป็น 1fr 1fr . สิ่งนี้บอกให้เบราว์เซอร์สร้างเค้าโครงสองคอลัมน์ และแต่ละคอลัมน์ใช้ 1fr (fr =หน่วยเศษส่วน) ของช่องว่าง

หน่วย fr เป็นอัตราส่วนของแต่ละคอลัมน์ต่อคอลัมน์อื่น คล้ายกับ flex: 1 กฎที่เราใช้ในวิธีเฟล็กซ์บ็อกซ์ ตั้งค่าคอลัมน์เป็น 1fr 1fr หมายความว่าแต่ละคอลัมน์จะใช้พื้นที่เท่ากัน

การเพิ่มช่องว่างระหว่างรายการกริดด้วยคุณสมบัติ grid-gap>

ข้อดีอย่างหนึ่งของการใช้กริด CSS คือคุณไม่จำเป็นต้องใช้ช่องว่างภายในหรือระยะขอบเพื่อเพิ่มช่องว่างระหว่างรายการกริด

คุณสามารถใช้ grid-gap (หรือ gap ในเบราว์เซอร์ที่ใหม่กว่า) เพื่อเพิ่มพื้นที่ในเทมเพลตกริดของคุณโดยอัตโนมัติ

เราได้ตั้งค่า grid-gap ถึง 20px ดังนั้นเบราว์เซอร์จะรู้ว่าต้องเพิ่มพื้นที่ว่างระหว่างรายการทั้งหมด 20px ไม่ว่าจะเป็นแบบเคียงข้างกันหรือวางซ้อนกัน

และคุณอาจสังเกตเห็นว่าคุณสมบัติ CSS ทั้งหมดสำหรับกริดถูกตั้งค่าไว้ที่ .grid-container พาเรนต์ องค์ประกอบ. เราไม่จำเป็นต้องเขียน CSS ใดๆ ให้กับลูก .grid-child องค์ประกอบ!