Странное поведение границ в Chrome при расширении разделов строк таблицы

У меня есть таблица с раскрывающимися/сворачивающимися элементами div в td. При расширении в IE9 все ок, а вот в Google Chrome (версия 16.0.912.75m) получаю неожиданные сплошные границы в разных местах. Кажется, что colspan=3 tr имеет к этому какое-то отношение, так как над ними и под ними появляются сплошные границы. Кроме того, значения ширины div, по-видимому, влияют на это: поведение меняется при выборе для них других значений.

См. ниже html. Я добавил 4 скрин-принта: начальный вид, развернуть строку 1, развернуть строку 2, развернуть оба. Что вызывает это странное поведение и как я могу его предотвратить?

initial«строка1 строка2 расширенаоба раскрыты

<html>
<head>
    <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
    <title>Example</title>
    <style type="text/css">
        table {
            border: solid black 1pt;
            border-collapse: collapse;
            padding: 0;
            border-spacing: 0;
        }

        th {
            background: rgb(255, 255, 153);
            border-style: solid;
            border-color: black;
            border-width: 1pt;
            padding: 0cm 5pt;
            color: black;
            font-family: Verdana;
                font-size: 10pt;
            font-style: normal;
            vertical-align: top;
        }
        td {
            border-style: dotted dotted none none;
            border-color: black;
            border-width: 1pt;
            padding: 0cm 5pt;
            color: black;
            font-style: normal;
            font-family: Verdana;
                font-size: 10pt;
            vertical-align: top;
            margin-bottom: 4.5pt;
            margin-top: 0pt;
        }

        div.QUAL {
            margin-left:4pt;
            font-size: 90%;
        }

        input.buttonQUAL {
            color: blue;
            background: white;
            border: none;
            margin-left:0pt;
            margin-top: 0px;
            margin-bottom: 0px;
            font-size: 100%;
        }

        div.listQUALdesc {
            color: black;
            background: white;
            font-size: 100%;
        }
    </style>
    <script type="text/javascript" language="javascript">
        //expand and collapse functions based on id
        function toggleMe(a){
            var e = document.getElementById(a);
            if(!e) return true;
            if( e.style.display == "none")
                {
                e.style.display = "block"
                }
            else    {
                e.style.display = "none"
                }
            return true;
        };

        function expandByIdStart(IdStart){
            var divs = document.getElementsByTagName('div');
            for (var i=0; i<divs.length; i++) {
                if (divs[i].id.match("^"+IdStart) == IdStart) { 
                    divs[i].style.display = "block";
                }
            }
            return true;
        }

        function collapseByIdStart(IdStart){
            var divs = document.getElementsByTagName('div');
            for (var i=0; i<divs.length; i++) {
                if (divs[i].id.match("^"+IdStart) == IdStart) { 
                    divs[i].style.display = "none";
                }
            }
            return true;
        }
    </script>
</head>
<body>
    <p/>
    <table style='table-layout:fixed word-break:break-all'>
        <col width="70"><col width="70"><col width="70">
        <thead><tr><th>Col1</th><th>Col2</th><th>Col3</th></tr></thead>
        <tbody>
            <tr>
                <td>
                    <input
                        type="button"
                        class="buttonQUAL"
                        onclick="toggleMe('row1'); return true;"
                        onMouseOver="this.style.cursor='hand'"
                        value="row1"/>
                </td>
                <td>text1
                    <div id="row1" class="listQUALdesc" style="width:100; display:none">
                        text2
                    </div>
                </td>
                <td></td>
            </tr>
            <tr>
                <td><div class="QUAL">xxx</div></td>
                <td>text3</td>
                <td></td>
            </tr>
            <tr>
                <td colspan="3">Start</td>
            </tr>
            <tr>
                <td>
                    <input
                        type="button"
                        class="buttonQUAL"
                        onclick="toggleMe('row2'); return true;"
                        onMouseOver="this.style.cursor='hand'"
                        value="row2"/>
                    <div id="row2" class="QUAL" style="display:none;width:65">
                        text5<br/>
                    </div>
                </td>
                <td>text4</td>
                <td></td>
            </tr>
            <tr>
                <td colspan="3">End</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

person Maestro13    schedule 15.01.2012    source источник
comment
Хорошо, я смог решить эту проблему - добавление ‹!doctype html› устранило странное поведение. Но я все еще задаюсь вопросом, что именно происходит.   -  person Maestro13    schedule 16.01.2012
comment
И добавление ‹!doctype html› не является полным решением, поскольку оно создает другие проблемы, когда я применяю его к более крупному html, над которым я работаю, который имеет подтаблицы в div: размер шрифта для них уменьшается на (очевидно ) 25% - почему так происходит? Примечание: при необходимости я создам для этого еще один вопрос, добавляя скриншоты.   -  person Maestro13    schedule 16.01.2012


Ответы (1)


См. комментарии - добавление ‹ !doctype html > частично решает проблему

Дополнение

В Интернете можно найти некоторые проблемы, которые указывают на ошибку в Chrome и Safari (которые используют webkit), например следующие: webkit-colspan-table-border-bug.

Кажется, что использование colspan и bottom-border в сочетании с border-collapse: Collapse приводит к проблемам с отображением границ, как и в моем примере.

person Maestro13    schedule 24.02.2012