ทำไมความกว้างจึงพังทลายในองค์ประกอบเด็กที่มีความกว้างเป็นเปอร์เซ็นต์ใน IE7?
เมื่อพูดถึงการออกแบบเว็บ CSS เป็นเครื่องมือที่ทรงพลังสำหรับการจัดการเลย์เอาต์ อย่างไรก็ตาม บางครั้งนักพัฒนาอาจพบกับพฤติกรรมที่ไม่คาดคิด โดยเฉพาะกับเบราว์เซอร์เก่า ๆ เช่น Internet Explorer 7 (IE7) ปัญหาทั่วไปเกิดขึ้นเมื่อองค์ประกอบเด็กที่ใช้ความกว้างแบบเปอร์เซ็นต์พังทลายเป็นความกว้างศูนย์ภายในพ่อแม่ที่มีการจัดตำแหน่งอย่างแน่นอน สิ่งนี้อาจทำให้รู้สึกหงุดหงิดเมื่อทุกอย่างดูเหมือนจะทำงานได้อย่างสมบูรณ์ในเบราว์เซอร์สมัยใหม่ เช่น Firefox หรือ Safari
เข้าใจปัญหา
สถานการณ์
ในกรณีนี้ นักพมี div
ที่มีการจัดตำแหน่งอย่างแน่นอนซึ่งประกอบด้วยองค์ประกอบเด็กหลายตัว หนึ่งในองค์ประกอบ div
เด็กเฉพาะตัวถูกจัดตำแหน่งสัมพันธ์และได้รับการกำหนดความกว้างเป็นเปอร์เซ็นต์ อย่างไรก็ตาม หลังจากการทดสอบเลย์เอาต์ พวกเขาสังเกตเห็นว่า div
เด็กพังทลายไปเป็น 0 width
ใน IE7 ทำให้มันมองไม่เห็น ขณะเดียวกันกลับปรากฏอย่างถูกต้องในเบราว์เซอร์ที่ทันสมัยกว่า
ประเด็นที่ทำให้สับสน
- ทำไมความกว้างเปอร์เซ็นต์จึงพังทลายในสถานการณ์นี้?
- มีวิธีแก้ไขง่าย ๆ นอกจากการเปลี่ยนเป็นความกว้างพิกเซลหรือไม่?
- ข้อกำหนด CSS พูดถึงพฤติกรรมนี้ว่าอย่างไร?
วิธีการแก้ไข: กำหนดความกว้างของพ่อแม่
เพื่อหลีกเลี่ยงความกว้างพังทลาย การเข้าใจความต้องการเฉพาะของ IE7 เป็นสิ่งสำคัญ วิธีการแก้ไขอยู่ที่ div
พ่อแม่ที่ประกอบด้วยองค์ประกอบเด็กของคุณ
ความต้องการ:
- กำหนดความกว้าง:
div
พ่อแม่ที่มีการจัดตำแหน่งอย่างแน่นอนต้องมีความกว้างที่กำหนด — ตั้งแต่ระบุเป็นพิกเซลหรือในรูปแบบเปอร์เซ็นต์
ทำไมสิ่งนี้จึงสำคัญใน IE7
ใน Internet Explorer 7 เครื่องยนต์การเรนเดอร์จะทำงานแตกต่างไปจากเบราว์เซอร์ที่ทันสมัยโดยเฉพาะ:
- ไม่มีความกว้างที่กำหนด: เมื่อ
div
พ่อแม่ไม่มีความกว้างที่ตั้งไว้ IE7 จะไม่รู้วิธีคำนวณความกว้างแบบเปอร์เซ็นต์สำหรับองค์ประกอบเด็ก ซึ่งนำไปสู่การพังทลายโดยอัตโนมัติเพื่อเป็น0 width
- มีความกว้างที่กำหนด: โดยการกำหนดความกว้างเฉพาะให้กับพ่อแม่ คุณจะสร้างจุดอ้างอิงสำหรับ
div
เด็ก ทำให้เบราว์เซอร์สามารถคำนวณความกว้างได้อย่างถูกต้องตามเปอร์เซ็นต์ที่คุณกำหนดไว้
ตัวอย่างการนำไปใช้
นี่คือวิธีที่คุณสามารถนำทางการแก้ไขใน CSS:
.parent {
position: absolute;
width: 500px; /* หรือความกว้างเฉพาะอื่น ๆ */
}
.child {
position: relative;
width: 50%; /* นี่จะทำงานเมื่อพ่อแม่มีความกว้างที่กำหนด */
}
วิธีแก้ไขทางเลือก
หากการกำหนดความกว้างสำหรับพ่อแม่ไม่สามารถทำได้สำหรับการออกแบบของคุณ นี่คือแนวทางทางเลือกที่คุณสามารถพิจารณา:
- ใช้ความกว้างพิกเซล: แม้จะไม่ยืดหยุ่นเท่าไร แต่การเปลี่ยนไปใช้ความกว้างพิกเซลสำหรับองค์ประกอบเด็กก็เป็นวิธีการที่รับประกันได้ในการรักษาการมองเห็น
- เปลี่ยนการจัดตำแหน่งสัมพันธ์: เปลี่ยน
div
พ่อแม่จากการจัดตำแหน่งอย่างแน่นอนเป็นการจัดตำแหน่งสัมพันธ์ ในกรณีนี้ ความกว้างเปอร์เซ็นต์บนองค์ประกอบเด็กจะทำงานได้โดยไม่มีปัญหา
อ้างอิงถึงข้อกำหนด CSS
สำหรับผู้ที่สนใจในด้านเทคนิค พฤติกรรมนี้มีความสัมพันธ์กับวิธีที่ CSS กำหนดการจัดตำแหน่งและขนาดขององค์ประกอบ โดยเฉพาะกฎ โมเดลกล่อง CSS ที่ระบุว่าความกว้างแบบเปอร์เซ็นต์คำนวณจากความกว้างของพ่อแม่ ในกรณีที่ไม่มีความกว้างที่กำหนด เบราว์เซอร์อาจเริ่มต้นด้วยการเรนเดอร์องค์ประกอบอย่างไม่ถูกต้อง โดยเฉพาะในกรณีของเบราว์เซอร์เก่าเช่น IE7
สรุป
การนำทางปัญหาเลย์เอาต์ในเบราว์เซอร์เก่าเช่น IE7 อาจเป็นเรื่องท้าทาย ข้อสรุปที่สำคัญที่นี่คือการตรวจสอบให้แน่ใจว่าคุณมีความกว้างที่กำหนดสำหรับองค์ประกอบพ่อแม่ที่จัดตำแหน่งอย่างแน่นอนเมื่อใช้งานความกว้างแบบเปอร์เซ็นต์สำหรับองค์ประกอบเด็ก โดยการปฏิบัติตามแนวทางนี้ คุณสามารถหลีกเลี่ยงความกว้างพังทลายและรับประกันลักษณะที่สอดคล้องกันในเบราว์เซอร์ต่าง ๆ
ด้วยการเข้าใจรายละเอียดของพฤติกรรมเบราว์เซอร์และการใช้ CSS อย่างมีประสิทธิภาพ คุณสามารถสร้างเลย์เอาต์ที่แข็งแกร่งซึ่งทำงานได้ดีในทุกแพลตฟอร์ม