โซลูชัน CSS clearfix ด้านล่างแต่ละรายการมีประโยชน์ของตัวเองทั้งนี้ขึ้นอยู่กับการออกแบบที่กำลังผลิต
clearfix มีแอปพลิเคชั่นที่มีประโยชน์ แต่มันถูกใช้เป็นแฮ็ก ก่อนที่คุณจะใช้ clearfix โซลูชัน css ที่ทันสมัยเหล่านี้อาจมีประโยชน์:
โซลูชั่น Clearfix ที่ทันสมัย
คอนเทนเนอร์ด้วย overflow: auto;
วิธีที่ง่ายที่สุดในการล้างองค์ประกอบลอยที่ใช้สไตล์overflow: auto
ในองค์ประกอบที่มี วิธีนี้ใช้ได้กับเบราว์เซอร์สมัยใหม่ทุกตัว
<div style="overflow: auto;">
<img
style="float: right;"
src="path/to/floated-element.png"
width="500"
height="500"
>
<p>Your content here…</p>
</div>
ข้อเสียอย่างเดียวการใช้มาร์จิ้นและแพ็ดกิ้งร่วมกับองค์ประกอบภายนอกบางอย่างอาจทำให้แถบเลื่อนปรากฏขึ้น แต่สามารถแก้ไขได้โดยการวางมาร์จิ้นและแพ็ดดิ้งสำหรับองค์ประกอบหลักที่มีองค์ประกอบอื่น
การใช้ 'โอเวอร์โฟลว์: ซ่อนอยู่' ยังเป็นโซลูชันที่ชัดเจน แต่จะไม่มีแถบเลื่อน แต่การใช้hidden
จะครอบตัดเนื้อหาใด ๆ ที่อยู่นอกตำแหน่งขององค์ประกอบที่มี
หมายเหตุ:องค์ประกอบที่ลอยเป็นimg
แท็กในตัวอย่างนี้ แต่อาจเป็นองค์ประกอบ html ใด ๆ
Clearfix โหลดใหม่
Thierry Koblentz บน CSSMojo เขียน: Reloaded clearfix มากล่าสุด เขาตั้งข้อสังเกตว่าโดยการลดการสนับสนุน oldIE โซลูชันสามารถทำให้ง่ายขึ้นสำหรับคำสั่ง css เดียว นอกจากนี้การใช้display: block
(แทนdisplay: table
) อนุญาตให้ระยะขอบยุบอย่างถูกต้องเมื่อองค์ประกอบที่มี clearfix เป็นพี่น้อง
.container::after {
content: "";
display: block;
clear: both;
}
นี่เป็นเวอร์ชั่นล่าสุดของ clearfix
⋮
⋮
โซลูชั่น Clearfix ที่เก่ากว่า
โซลูชันด้านล่างไม่จำเป็นสำหรับเบราว์เซอร์รุ่นใหม่ แต่อาจมีประโยชน์สำหรับการกำหนดเป้าหมายเบราว์เซอร์รุ่นเก่า
โปรดทราบว่าการแก้ปัญหาเหล่านี้ขึ้นอยู่กับข้อบกพร่องของเบราว์เซอร์และดังนั้นจึงควรใช้เฉพาะในกรณีที่ไม่มีวิธีการแก้ปัญหาข้างต้นทำงานให้คุณ
พวกเขาจะถูกระบุไว้ในลำดับตามลำดับ
"Beat That ClearFix", clearfix สำหรับเบราว์เซอร์รุ่นใหม่
Thierry Koblentz 'ของCSS Mojoได้ชี้ให้เห็นว่าเมื่อกำหนดเป้าหมายเบราว์เซอร์ที่ทันสมัยตอนนี้เราสามารถวางzoom
และ::before
ทรัพย์สิน / ค่าและเพียงใช้:
.container::after {
content: "";
display: table;
clear: both;
}
วิธีนี้ไม่รองรับ IE 6/7 …โดยเจตนา!
Thierry ยังเสนอ: " คำเตือน : ถ้าคุณเริ่มโครงการใหม่ตั้งแต่เริ่มต้นให้ไปหามัน แต่อย่าสลับเทคนิคนี้กับที่คุณมีอยู่ตอนนี้เพราะแม้ว่าคุณจะไม่สนับสนุน oldie กฎที่มีอยู่ของคุณก็ป้องกันไว้ การยุบขอบ "
Micro Clearfix
วิธีการแก้ปัญหา clearfix ล่าสุดและนำมาใช้ทั่วโลกที่ไมโคร Clearfix โดยนิโคลัสกัลลาเกอร์
การสนับสนุนที่ทราบ: Firefox 3.5+, Safari 4+, Chrome, Opera 9+, IE 6+
.container::before, .container::after {
content: "";
display: table;
}
.container::after {
clear: both;
}
.container {
zoom: 1;
}
คุณสมบัติล้น
วิธีการพื้นฐานนี้เป็นที่ต้องการสำหรับกรณีปกติเมื่อเนื้อหาที่ถูกจัดตำแหน่งจะไม่แสดงนอกขอบเขตของคอนเทนเนอร์
http://www.quirksmode.org/css/clearing.html
- อธิบายวิธีแก้ไขปัญหาทั่วไปที่เกี่ยวข้องกับเทคนิคนี้ ได้แก่ การตั้งค่าwidth: 100%
บนคอนเทนเนอร์
.container {
overflow: hidden;
display: inline-block;
display: block;
}
แทนที่จะใช้display
คุณสมบัติการชุด "haslayout" สำหรับ IE คุณสมบัติอื่น ๆ ที่สามารถใช้สำหรับการเรียก "haslayout" สำหรับองค์ประกอบ
.container {
overflow: hidden;
zoom: 1;
display: block;
}
อีกวิธีในการล้างข้อมูลลอยโดยใช้overflow
คุณสมบัตินี้คือการใช้การขีดเส้นใต้แฮ็ค IE จะใช้ค่านำหน้าด้วยขีดล่างเบราว์เซอร์อื่นจะไม่ zoom
คุณสมบัติเป็นต้นเหตุhaslayoutใน IE:
.container {
overflow: hidden;
_overflow: visible; /* for IE */
_zoom: 1; /* for IE */
}
ในขณะที่ใช้งานได้ ... มันไม่เหมาะที่จะใช้แฮ็ก
PIE: วิธีการหักล้างอย่างง่าย
เมธอด "การล้างค่าแบบง่าย" รุ่นเก่านี้มีข้อได้เปรียบในการอนุญาตให้องค์ประกอบต่างๆวางตำแหน่งอยู่นอกขอบเขตของคอนเทนเนอร์
โซลูชันนี้ค่อนข้างเก่า แต่คุณสามารถเรียนรู้ทั้งหมดเกี่ยวกับการหักล้างตำแหน่งอย่างง่ายได้ทุกอย่าง: http://www.positioniseverything.net/easyclearing.html
องค์ประกอบที่ใช้คุณสมบัติ "ล้าง"
วิธีแก้ปัญหาที่รวดเร็วและสกปรก (พร้อมข้อเสียบางประการ) เมื่อคุณตบบางอย่างเข้าด้วยกัน:
<br style="clear: both" /> <!-- So dirty! -->
ข้อเสีย
- มันไม่ตอบสนองและอาจไม่ให้ผลที่ต้องการหากรูปแบบเค้าโครงเปลี่ยนไปตามการสืบค้นของสื่อ ทางออกใน CSS บริสุทธิ์นั้นเหมาะกว่า
- มันเพิ่มมาร์กอัป html โดยไม่จำเป็นต้องเพิ่มค่าความหมายใด ๆ
- มันต้องการคำจำกัดความแบบอินไลน์และวิธีแก้ปัญหาสำหรับแต่ละอินสแตนซ์แทนที่จะอ้างอิงคลาสกับโซลูชันเดียวของ "clearfix" ใน css และการอ้างอิงคลาสใน HTML
- มันทำให้รหัสยากที่จะทำงานกับคนอื่นเพราะพวกเขาอาจจะต้องเขียน hacks เพิ่มเติมเพื่อหลีกเลี่ยงมัน
- ในอนาคตเมื่อคุณต้องการ / ต้องการใช้โซลูชันการแก้ไขปัญหาที่ชัดเจนอื่นคุณจะไม่ต้องย้อนกลับและลบ
<br style="clear: both" />
แท็กทุกอันที่ทิ้งขยะไว้รอบ ๆ มาร์กอัพ