IE8 แยกคอลัมน์ออกจาก tbody

ฉันมีปัญหาในการแสดงหลายตารางในหน้าเดียว

รหัสตารางค่อนข้างง่าย CSS กำหนดความกว้างของแต่ละ td ด้วย % และ table-layout คือ fixed

ดูเหมือนว่าปัญหาจะเกิดขึ้นเนื่องจากตารางแรกมีจำนวนคอลัมน์ X จำนวนคอลัมน์ แต่ตารางที่สองมีจำนวน X + 3 ซึ่งทำให้คอลัมน์สุดท้ายถูกแยกออกจากเนื้อหาของตาราง

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อตรวจสอบ DOM ฉันจะเห็นว่าคอลัมน์สุดท้ายทางด้านขวานั้นมีอยู่ภายนอกเนื้อหาของตาราง (ในการออกแบบ) แต่มีอยู่ภายในเนื้อหาของตารางในโค้ด

ป้อนคำอธิบายรูปภาพที่นี่

ถ้าฉันลบ table-layout:fixed ออกจาก css ตารางจะทับซ้อนกัน แต่จะใช้สีพื้นหลัง CSS ที่ถูกต้อง ฯลฯ กับคอลัมน์สุดท้าย สิ่งนี้จะเกิดขึ้นเช่นกันหากฉันปล่อยเค้าโครงตารางไว้เหมือนเดิม แต่ลบแอตทริบิวต์ width:100% ออก ดูเหมือนว่าอาจเป็นปัญหาที่ต้องรักษาความกว้างของตารางคงที่ไว้ตลอดทั้งตารางตั้งแต่ตารางแรก

ฉันเชื่อว่านี่อาจเกี่ยวข้องอย่างยิ่งกับ คำตอบ SO นี้

ป้อนคำอธิบายรูปภาพที่นี่

มีความคิดอะไรบ้าง?

<div>
    <table>
        // th elements
        <tbody>
            <tr>
               <td>1</td>
            </td>
        </tbody>
    </table>
</div>
<div>
    <table>
        // th elements
        <tbody>
            <tr>
               <td>1</td>
               <td>2</td>
            </tr>
        </tbody>
    </table>
</div>

person RonnyKnoxville    schedule 07.01.2015    source แหล่งที่มา
comment
@chovy โครงการนี้สำหรับองค์กรขนาดใหญ่ ฉันคิดว่าการแก้ไขปัญหาของฉันอาจจะง่ายกว่าการอัพเกรดเครื่องของบริษัททั้งหมด   -  person RonnyKnoxville    schedule 07.01.2015
comment
คุณสามารถสร้าง jsfiddle ด้วยข้อมูลบางส่วนได้ ... เพื่อให้ผู้คนสามารถเล่นได้ ...   -  person Mihai Iorga    schedule 07.01.2015
comment
วิธีคิดแบบเก่า เอเวอร์กรีนตอนนี้ ไม่มีอะไรอีกแล้ว. ฉันไม่สนหรอกถ้า ‹ IE11 ไม่ทำงาน   -  person chovy    schedule 07.01.2015
comment
ความมั่นคงของชาติมากกว่าวิธีคิดแบบเก่า   -  person RonnyKnoxville    schedule 29.01.2015


คำตอบ (1)


วิธีแก้ปัญหานี้เป็นสิ่งที่ฉันคาดหวังไว้

ปรากฎว่า IE (และเบราว์เซอร์อื่นๆ) จะใช้เค้าโครงตารางทั้งหมดโดยยึดตามแถวแรกของตารางแรก

ดังนั้น หากคุณมีหลายตารางในหนึ่งหน้าซึ่งมีจำนวนคอลัมน์ต่างกัน คุณอาจตกอยู่ในสถานการณ์ที่คอลัมน์พิเศษเหลือค้างอยู่ที่ส่วนท้ายของตารางเหมือนอย่างของฉัน

บางคนแนะนำให้ใช้แอตทริบิวต์ colgroup และ col ที่อยู่เหนือ thead แต่ฉันพบว่าวิธีนี้ใช้ไม่ได้สำหรับฉัน

แต่ฉันสร้าง thead ที่ซ่อนอยู่เหนือต้นฉบับของฉันแทน โดยมีจำนวนคอลัมน์สูงสุดที่ต้องการ

    <thead>
        <tr hidden="hidden">
            <th span="1"></th>
            <th span="3"></th>
            <th span="3"></th>
            <th span="3"></th>
            <th span="1"></th>
            <th span="2"></th>
        </tr>
    </thead>
    <thead>
        // My actual table headers
    </thead>
person RonnyKnoxville    schedule 07.01.2015