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

CSS Flexbox

CSS Flexbox Model ถูกสร้างขึ้นเพื่อปรับปรุง CSS Box Model ที่สร้างขึ้น โมเดล Flexbox ยังคงมีองค์ประกอบหลักของ Box Model (ระยะขอบ ช่องว่างภายใน เส้นขอบ และเนื้อหา) แต่ให้ความยืดหยุ่นในการเติมพื้นที่ว่างให้ดีที่สุดด้วยลูกของคอนเทนเนอร์/พาเรนต์

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

ต่อไปนี้เป็นรหัสเริ่มต้นสำหรับการสาธิตโมเดล flexbox พื้นฐาน – โปรดปฏิบัติตามในขณะที่เราพูดถึง flexbox!

<!DOCTYPE html>
  <head>
    <title>Flexbox</title>
    <style>
       * {
        	box-sizing: border-box;
        	font-family: 'Roboto'
       }
      .parent-container {
        	height: 700px;
        	background: green;
        	width: 700px;
        	padding: 20px;
      }
      .child-item {
        	height: 200px;
        	width: 200px;
        	margin: 0px;
        	padding: 20px;
      }
      .child-item:first-child {
        background: orange;
      }
      
      .child-item.one {
        background: purple;
      }
      .child-item.two {
        background: aliceblue;
      }
      .child-item.three {
        background: grey;
      }
      .child-item.four {
        background: pink;
      }
      .child-item.five {
        background: yellowgreen;
      }
      .child-item.six {
        background: red;
      }
      .child-item.seven {
        background: blanchedalmond;
      }
      .child-item.eight {
        background: white;
      }
      .child-item.nine {
        background: lightblue;
      }
      .child-item.nine {
        background: darkred;
      }
      .child-item:last-child {
        background: yellow;
      }

	</style>
 </head>
 <body>
  	<div class="parent-container">
		<div class="child-item">Lisa Simpson</div>
        	<div class="child-item one">Bart Simpson</div>
        	<div class="child-item two">Maggie Simpson</div>
        	<div class="child-item three">Homer Simpson</div>
        	<div class="child-item four">Marge Simpson</div>
        	<div class="child-item five">Grampa Simpson</div>
        	<div class="child-item six">Santa's Little Helper</div>
        	<div class="child-item seven">Apu Nahasapeemapetilon</div>
        	<div class="child-item eight">Moe Szyslak</div>
        	<div class="child-item nine">Ned Flanders</div>
        	<div class="child-item ten">Snowball II</div>
    </div>

	<script src="" async defer></script>
 </body>
</html>

คุณสมบัติของคอนเทนเนอร์หลัก (Flexbox)

จอแสดงผล:ดิ้น

คุณสมบัติการแสดงผลมีค่าหลายค่าที่เราสามารถใช้เพื่อวางตำแหน่งคอนเทนเนอร์ของเราบนหน้าจอ คุณอาจเคยเห็น block, inline-block, none, hidden, inline แล้ว แต่สิ่งที่เราจะเน้นในตอนนี้เรียกว่า flex .

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

เมื่อเราเพิ่ม display: flex ในคอนเทนเนอร์หลัก คุณสมบัติถูกกำหนดให้กับคอนเทนเนอร์นั้นและคอนเทนเนอร์นั้นเพียงอย่างเดียว - ไฟล์ย่อยจะไม่สืบทอดคุณสมบัติ (อย่างไรก็ตาม พวกเขาสามารถใช้คุณสมบัติสำหรับคอนเทนเนอร์ของตนเองที่จะส่งผลกระทบต่อ ของพวกเขา เด็ก).

คุณสมบัตินี้เปิดคุณสมบัติอื่น ๆ ทุกประเภทที่เราสามารถใช้ได้ที่เราไม่สามารถทำได้มาก่อน:flex-direction , justify-content , align-items , align-self , flex-wrap และ flex-flow .

เรียกใช้ตัวแก้ไขโค้ดด้านบน ตอนนี้ คุณควรเห็นคอนเทนเนอร์สีเขียวขนาดใหญ่ คอนเทนเนอร์หลัก และคอนเทนเนอร์ขนาดเล็ก 11 รายการ คอนเทนเนอร์ย่อย ภายในพาเรนต์

การวางแนวของคอนเทนเนอร์ย่อยอยู่ด้านบนของกันและกันเนื่องจากค่าเริ่มต้นคือ display: block . ถ้าจำกันได้เมื่อเราใช้ display: block คอนเทนเนอร์จะกินพื้นที่ทั้งแถวที่มีอยู่ ค่าเริ่มต้นของระยะขอบจะขยายเป็นความกว้างของคอนเทนเนอร์หลัก ส่งผลให้คอนเทนเนอร์ย่อยทั้งสองอยู่ทับกัน

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

ในทางตรงกันข้าม การใช้ display: flex ช่วยให้เราจัดตำแหน่งคอนเทนเนอร์ย่อยได้อย่างง่ายดายในแบบที่เราชอบในคอนเทนเนอร์หลัก โดยไม่ต้องใช้คุณสมบัติของกล่องรุ่นเก่า เช่น ลอยและการจัดแนวแนวตั้ง

ลองเพิ่ม display: flex กับ CSS ในแท็กรูปแบบในตัวแก้ไขโค้ดเพื่อให้ CSS ของคอนเทนเนอร์หลักมีลักษณะดังนี้:

.parent-container {
height: 700px;
background: green;
width: 700px;
padding: 20px;
display: flex;

กำลังเพิ่ม display: flex ไปที่ .parent-container จะส่งผลให้ทิศทางของภาชนะลูกเปลี่ยนไป เมื่อคุณกด คุณควรเห็นคอนเทนเนอร์ย่อยอยู่เคียงข้างกัน

โดยใช้ display: flex แทนที่จะ display: block , ระยะขอบเริ่มต้นถูกตั้งค่าเป็น 0 จากนั้นเราสามารถจัดการมันได้ตามที่เห็นสมควร!

ทิศทางการโค้งงอ

คุณสมบัติ flex-direction ตั้งค่าแกนหลักของคอนเทนเนอร์ของเรา การตั้งค่าเริ่มต้นในคอนเทนเนอร์แบบยืดหยุ่นคือ แถว เมื่อตั้งค่าคอนเทนเนอร์หลักด้วย display: flex คุณไม่จำเป็นต้องกำหนดทิศทางแบบยืดหยุ่น เว้นแต่คุณต้องการให้เนื้อหาของคุณอยู่ในคอลัมน์

แกนหลักในทิศทางเริ่มต้นคือซ้ายไปขวา และแกนตัดจากบนลงล่าง ดังที่แสดงที่นี่:

CSS Flexbox

มาลองเพิ่ม flex-direction: column . กัน ไปที่ .parent-container . ของเรา ในโปรแกรมแก้ไขโค้ดด้านบน จะเกิดอะไรขึ้นเมื่อคุณกด?

ดูเหมือนว่าแกนจะพลิกเมื่อเราเปลี่ยน flex-direction ไปที่คอลัมน์:อะไรเป็นแกนหลักของเรากลายเป็นแกนไขว้ แล้วอะไรคือแกนไขว้ของเรากลายเป็นแกนหลัก ดังที่แสดงด้านล่าง:

CSS Flexbox

เป็นผลให้ลูก ๆ ของเราตู้คอนเทนเนอร์ในตัวอย่างของเราพลิกขวานของพวกเขา! ดังนั้นตอนนี้ภาชนะลูกจึงอยู่ด้านบนของกันและกันอีกครั้ง

สิ่งสำคัญที่สุดที่ต้องจำเกี่ยวกับ flex-direction คือทิศทางของแกนหลักสอดคล้องกับค่าของ flex-direction . ของคุณ คุณสมบัติ (คอลัมน์จากบนลงล่าง แถวจากซ้ายไปขวา)

Justify-content เกี่ยวข้องกับระยะห่างบนแกนหลัก และ align-ites เกี่ยวข้องกับระยะห่างรอบแกนไขว้ เราจะพูดถึงคุณสมบัติเหล่านั้นในภายหลัง

มีความเป็นไปได้อีกสองประการสำหรับทิศทางการโค้งงอ:row-reverse และ column-reverse . คุณสมบัติเหล่านี้คล้ายกับแถวและคอลัมน์มาก แต่ flex-items เรียงจากขวาไปซ้ายในกรณีของแถวกลับและล่างขึ้นบนสำหรับคอลัมน์ย้อนกลับ

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

flex-wrap

จนถึงตอนนี้ เราได้เรียนรู้วิธี display: flex ส่งผลต่อคอนเทนเนอร์ย่อยของพาเรนต์ และวิธีจัดการโฟลว์ของคอนเทนเนอร์ย่อยเหล่านั้นในแถวหรือในคอลัมน์ เกิดอะไรขึ้นถ้าขนาดของผู้ปกครองหมดห้อง? เกิดอะไรขึ้น? และเราจะแก้ไขได้อย่างไร?

คำตอบมาในรูปแบบของคุณสมบัติที่เรียกว่า flex-wrap . โดยค่าเริ่มต้น flex-wrap ถูกตั้งค่าเป็น nowrap . ซึ่งหมายความว่าคอนเทนเนอร์ย่อยสามารถล้นคอนเทนเนอร์หลัก ทำให้เกิดปัญหาเลย์เอาต์ที่ไม่ต้องการ มาลองเพิ่ม flex-wrap: wrap . กัน; ไปที่ .parent-container และดูว่าเกิดอะไรขึ้น:

CSS Flexbox

เลย์เอาต์ของคอนเทนเนอร์ที่นี่ดูดีกว่ามาก Flex-wrap จะนำส่วนประกอบย่อยทั้งหมดมาวางเคียงข้างกันจนกว่าจะถึงความกว้างของคอนเทนเนอร์หลัก จากนั้นจึงย้ายไปยังแถวถัดไปเพื่อเพิ่มคอนเทนเนอร์ย่อยเพิ่มเติมเพื่อทำซ้ำกระบวนการจนกว่าจะแสดงคอนเทนเนอร์ทั้งหมด

Flex-wrap มีคุณสมบัติสามแบบ:nowrap, wrap และ wrap-reverse wrap-reverse เหมือนกับ wrap ยกเว้นว่ามันไหลจากล่างขึ้นบนแทนที่จะเป็นบนลงล่าง

Flex-flow

Flex-flow เป็นชวเลขสำหรับ flex-direction และ flex-wrap . ไวยากรณ์คือ flex-flow: column wrap หากคุณต้องการให้ flex-direction ของคุณเป็นคอลัมน์ และ flex-wrap ของคุณถูกห่อ flex-flow: row nowrap เป็นค่าเริ่มต้น

ปรับเนื้อหา

คุณสมบัติเนื้อหา justify เกี่ยวข้องกับการจัดแนวตามแกนหลักของคอนเทนเนอร์หลัก ช่วยในการแจกจ่าย flex-items . ของคุณ ข้ามแกนหลักโดยที่คุณไม่ต้องคำนวณพื้นที่ที่ต้องการ ค่าคุณสมบัติ 6 ค่าที่ใช้บ่อยที่สุดสำหรับ justify-content คือ flex-start (ค่าเริ่มต้น), flex-end , center , space-around , space-between และ space-evenly .

เริ่มต้นแบบยืดหยุ่น:

CSS Flexbox

ปลายโค้ง:

CSS Flexbox

ศูนย์:

CSS Flexbox

เว้นวรรค:

CSS Flexbox

ช่องว่างระหว่าง:

CSS Flexbox

เว้นวรรคเท่าๆ กัน:

CSS Flexbox

จัดตำแหน่งรายการ

ความแตกต่างที่ใหญ่ที่สุดระหว่าง align-items และ justify-content นอกจากแกนที่แจกจ่ายคอนเทนเนอร์ย่อยแล้ว ยังเป็นค่าเริ่มต้นอีกด้วย ขอเตือนว่าเมื่อเราใช้ flex-direction ค่าเริ่มต้นสำหรับ justify-content คือ flex-start . นั่นไม่ใช่กรณีของ align-items . ค่าเริ่มต้นคือการยืด

เพื่อให้เห็นภาพ ให้กลับไปที่ตัวแก้ไขโค้ดที่ด้านบนของหน้าและนำความกว้างและความสูงออกจาก .child-container . เรามี display: flex . แล้ว และ flex-direction ชุด. มาสลับไปมาระหว่าง flex-direction: row และ flex-direction: column เพื่อดูว่าคอนเทนเนอร์ทำงานอย่างไรโดยไม่มีข้อจำกัดใดๆ เปรียบเทียบกับสิ่งที่คุณคาดหวังได้อย่างไร

ไม่มี align-items ชุดกฎ คอนเทนเนอร์ย่อยขยายขนาดของคอนเทนเนอร์หลักบนแกนไขว้ อย่างไรก็ตาม หากเราตั้งค่า align-items คุณสมบัติบนคอนเทนเนอร์หลัก ขนาดของคอนเทนเนอร์ย่อยจะปรับโดยอัตโนมัติตามขนาดของเนื้อหา บวกกับช่องว่างภายในและเส้นขอบที่คุณมี

จัดตำแหน่งรายการ:ยืด

CSS Flexbox

จัดตำแหน่งรายการ:กึ่งกลาง

CSS Flexbox

คุณสมบัติอื่นๆ ทั้งหมดที่เราดำเนินการสำหรับ justify-content ใช้ที่นี่กับ align-items และหมายถึงสิ่งเดียวกัน ยกเว้นว่าเราเพิ่งเปลี่ยนแกนที่เราอยู่

คุณสมบัติของตู้คอนเทนเนอร์ย่อย (รายการแบบยืดหยุ่น)

สั่งซื้อ

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

จัดตำแหน่งตัวเอง

align-self อนุญาตให้มีการจัดตำแหน่งเริ่มต้นหรือชุดที่กำหนดโดย align-items จะถูกแทนที่ จำไว้ว่า align-self ใช้ได้ก็ต่อเมื่อพาเรนต์เองเป็น display: flex . ค่าสำหรับ align-self สามารถ flex-start , flex-end , พื้นฐานหรือยืด



บทสรุป

ในบทช่วยสอนนี้ เราได้กล่าวถึงพื้นฐานของโมเดลกล่องแบบยืดหยุ่น เราค้นพบว่า flexbox เกี่ยวข้องกับความสัมพันธ์ระหว่างคอนเทนเนอร์หลักและคอนเทนเนอร์รอง คุณสมบัติ flexbox ของพาเรนต์ส่งผลโดยตรงต่อการเคลื่อนไหวของคอนเทนเนอร์ย่อยในพื้นที่ว่างของพาเรนต์

เราใช้ flex-direction , justify-content , align-items และ flex-wrap เพื่อควบคุมตำแหน่งของเด็กในผู้ปกครองและเราใช้คำสั่งและ align-self กับลูกเพื่อแทนที่ค่าเริ่มต้นหรือกฎบางอย่างที่วางไว้บนพาเรนต์

โปรดใช้ตัวแก้ไขโค้ดที่นี่เพื่อเล่นกับคุณสมบัติเหล่านี้เพื่อให้คุณสามารถฝึกฝนได้ คุณกำลังก้าวไปสู่การเป็นผู้เชี่ยวชาญ flexbox!