ในฐานะผู้เขียนโค้ดและโปรแกรมเมอร์ในการสร้าง CSS Flexbox และ CSS Grid เรามักไม่พิจารณา CSS Clearfix CSS Flexbox และ Grid แก้ไขตำแหน่งขององค์ประกอบได้ดีขึ้นเล็กน้อย (และง่ายกว่าเล็กน้อย!) กว่าการใช้ floats
อย่างไรก็ตาม เราทุกคนควรตระหนักถึงสิ่งนี้สำหรับบางกรณีที่เรากำลังทำงานกับโค้ดดั้งเดิมที่ใช้ float และไม่มีเวลาหรือเงินที่จะเปลี่ยนไปใช้การจัดการ codebase ที่ทันสมัยกว่า
ในบทความนี้ เราจะสำรวจการแฮ็ก clearfix และหารือเกี่ยวกับ display:flow-root เป็นการแทนที่โซลูชัน clearfix ที่ใหม่กว่า
โฟลตคืออะไร
เพื่อเป็นการเตือนความจำ ลอย คุณสมบัติโดยทั่วไปจะนำองค์ประกอบที่คุณต้องการลอยและวางไว้ทางด้านซ้ายหรือด้านขวาของคอนเทนเนอร์:
<!DOCTYPE html> <html lang="en> <head> <title>CSS Clearfix</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> body { background-color: grey; } ul { max-width: 800px; width: 100%; background: lightblue; border: 5px double black; padding: 20px; } img { width: 300px; margin: 20px; } li { list-style: none; float: left; } </style> </head> <body> <!-- https://unsplash.com/photos/2PPjq7I3bs4 --> <ul> <li> <img src="https://images.unsplash.com/photo-1567268377583-d1aaf9ccfc22?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=3300&q=80" /> </li> <!-- https://unsplash.com/photos/vYhBeZ_G_xE --> <li> <img src="https://images.unsplash.com/photo-1592283338081-beb63fa6a156?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1850&q=80" /> </li> <!-- https://unsplash.com/photos/7UduWMpT618 --> <li> <img src="https://images.unsplash.com/photo-1583513702439-2e611c58e93d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=3298&q=80" /> </li> <!-- https://unsplash.com/photos/Ah_QC2v2alE --> <li> <img src="https://images.unsplash.com/photo-1552944150-6dd1180e5999?ixlib=rb-1.2.1&auto=format&fit=crop&w=1850&q=80" /> </li> <!-- https://unsplash.com/photos/T-0EW-SEbsE --> <li> <img src="https://images.unsplash.com/photo-1548199973-03cce0bbc87b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2250&q=80" /> </li> </ul> <p>Here is a sample paragraph element. Something is wrong about where I am in the layout. What else is wrong with the layout?</p> </body> </html>
ขณะนี้มีภาพบางส่วนที่ควรจะเป็น <ul>
คอนเทนเนอร์ที่มีพื้นหลังสีฟ้าอ่อน แต่ภาพเหล่านั้นสูงกว่าองค์ประกอบอื่นๆ ของ <ul>
. ส่งผลให้มีน้ำล้นที่ไม่ล้างทุ่นลอยและยุบระยะขอบแนวนอน
นี่คือสาเหตุที่คอนเทนเนอร์สีฟ้าอ่อนสั้นมาก เหตุใดจึงมีการวางทุ่นลอยไว้ในที่ที่มันอยู่ และเหตุใดเราจึงมีองค์ประกอบย่อหน้าเคียงข้างกับองค์ประกอบโฟลต นี่เป็นค่าเริ่มต้นเมื่อใช้ float กับองค์ประกอบย่อยที่สูงกว่าคอนเทนเนอร์หลัก
การแก้ไข
วิธีแก้ปัญหาแรกที่เป็นไปได้คือสิ่งที่เรียกว่า clearfix hack . แฮ็คนี้แทรกเนื้อหาว่างบางส่วนหลังคอนเทนเนอร์หลักเพื่อขยายเพื่อรวมองค์ประกอบแบบลอย เราจะใช้ pseudo-element ::after เพื่อให้บรรลุสิ่งนี้:
<!DOCTYPE html> <html lang="en> <head> <title>CSS Clearfix</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> body { background-color: grey; } ul { max-width: 800px; width: 100%; background: lightblue; border: 5px double black; padding: 20px; } img { width: 300px; } li { list-style: none; float: left; margin: 20px; } .clearfix-hack::after { content: " "; clear: both; display: table; } </style> </head> <body> <!-- https://unsplash.com/photos/2PPjq7I3bs4 --> <ul> <li> <img src="https://images.unsplash.com/photo-1567268377583-d1aaf9ccfc22?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=3300&q=80" /> </li> <!-- https://unsplash.com/photos/vYhBeZ_G_xE --> <li> <img src="https://images.unsplash.com/photo-1592283338081-beb63fa6a156?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1850&q=80" /> </li> <!-- https://unsplash.com/photos/7UduWMpT618 --> <li> <img src="https://images.unsplash.com/photo-1583513702439-2e611c58e93d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=3298&q=80" /> </li> <!-- https://unsplash.com/photos/Ah_QC2v2alE --> <li> <img src="https://images.unsplash.com/photo-1552944150-6dd1180e5999?ixlib=rb-1.2.1&auto=format&fit=crop&w=1850&q=80" /> </li> <!-- https://unsplash.com/photos/T-0EW-SEbsE --> <li> <img src="https://images.unsplash.com/photo-1548199973-03cce0bbc87b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2250&q=80" /> </li> </ul> <p>Here is a sample paragraph element. Something is wrong about where I am in the layout. What else is wrong with the layout?</p> </body> </html>
นอกเหนือจากระยะขอบเล็กน้อย ฉันได้เพิ่มใน <li>
เพื่อให้การเว้นวรรคดีขึ้น สิ่งที่เพิ่มเข้ามาคือ .clearfix-hack::after
ตัวเลือก ต้องใช้คุณสมบัติสามประการ:เนื้อหา แสดง และชัดเจน
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
สตริงว่างใช้ค่าของคุณสมบัติเนื้อหา เรากำลังย้ายเส้นขอบขององค์ประกอบด้านล่างจุดสิ้นสุดของ ทั้งสอง ประเภทของลอยในคุณสมบัติที่ชัดเจนและเรากำลังตั้งค่าการแสดงผลของเราเป็น block
หรือ table
เพื่อนำเสนอข้อมูล/รูปภาพในหน้า
ส่งผลให้สามารถแสดงรูปภาพภายในคอนเทนเนอร์และแท็ก
ด้านล่างได้
นี่คือจุดจบของ Clearfix หรือไม่
ด้วยการถือกำเนิดของ Flexbox และ Grid ความต้องการ clearfix จะหายไป มากยิ่งขึ้นด้วยวิธีการใหม่ในการจัดการ clearfix ใน CSS:
.clearfix-hack { display: flow-root }
แทนที่ .clearfix-hack::after
ตัวเลือกด้วยรหัสด้านบน มีอะไรเปลี่ยนแปลงไหม
ทำการแฮ็ก clearfix ให้เราและทำให้โค้ดของเราอ่านง่ายยิ่งขึ้น
display: flow-root
บทสรุป
เราได้พูดคุยถึงสองวิธีที่แตกต่างกันในการแก้ไขจุดบกพร่องที่สร้างขึ้นเมื่อเราเพิ่มคุณสมบัติ float ให้กับองค์ประกอบย่อย:การแฮ็ก clearfix และการใช้ display: flow-root
. เป็นไปได้มากกว่าที่คุณจะใช้การแฮ็กเหล่านี้กับโค้ดเดิมเท่านั้น และไม่ใช้กับโค้ดใดๆ ที่คุณสร้างขึ้นตั้งแต่เริ่มต้นจริงๆ เนื่องจากการสร้าง Flexbox และ Grid