Предотвращение переполнения HTML-таблицы содержащим div - PullRequest
1 голос
/ 14 июня 2019

Моя цель - создать макет с фиксированной областью вверху, а затем таблицу (с полосами прокрутки) в оставшейся доступной области.Я упростил это для того, чтобы задать этот вопрос.

Я пытался сделать это, используя div определенного размера (в этом примере 300x300 пикселей), показанный в примере как голубой, он содержиттаблица с двумя строками, верхняя из которых содержит заголовок, а вторая содержит div, который, в свою очередь, содержит таблицу с данными, которые я хочу прокрутить.

table {border-collapse: collapse;}
table,th,td {border: 1px solid gray;}
table.nowrap {white-space: nowrap;}
<html>
    <body>
        <div style="width:300px; height:300px; background-color: cyan;">
            <table>
                <tr style="height:40px;background-color: lightblue;">
                    <td>This is the static header</td>
                </tr>
                <tr>
                    <td>
                        <div style='width:100%; height:100%; overflow:scroll;'>
                            <table class='nowrap'>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                                <tr><td>An item in the table</td><td>An item in the table</td><td>An item in the table</td></tr>
                            </table>
                        </div>
                    </td>
                </tr>
            </table>
        </div>
    </body>
    </html>

Если вы запустите это, он показывает следующее, но я не понимаю, почему.Высота / ширина 100%, поэтому не должен ли он наследовать размер от родителя?

Shows full table

Если я изменю строку

*От 1019 *

до

<div style='width:300px; height:260px; overflow:scroll;'>

Затем отображается прокручиваемая таблица в пределах div .., что является правильным (или, по крайней мере, тем, что я хочу).Но я не буду знать точный размер, так как экран создается динамически, в разных браузерах и т. Д.

How I want it to appear

Итак, если я укажуТочная ширина div (в пределах td), а не в процентах, работает нормально - может ли это быть размер от другого родителя, а не от внешнего div?

1 Ответ

1 голос
/ 14 июня 2019

Есть много лучших способов, чем использовать таблицу, чтобы сделать это, но я подхожу к вашему методу.

Это весь HTML-код, который даст желаемый результат (просто прочитайте комментарии, чтобы увидеть изменения):

<html>

    <head>
        <title>Table</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            table {
                border-collapse: collapse;
            }

            table,
            th,
            td {
                border: 1px solid gray;
            }

            table.nowrap {
                white-space: nowrap;
            }
        </style>
    </head>

    <body>

        <!-- Added position:relative to the div -->
        <div style="width:300px;position: relative;height:300px;background-color: cyan;">

            <!-- Change the table position to absolute and make its width and height 100% of the parent's -->
            <table style="position: absolute;width: 100%;height: 100%;">
                <tbody>
                    <tr style="height:40px;background-color: lightblue;">
                        <td>This is the static header</td>
                    </tr>
                    <tr>
                         <!-- Added position:relative to the cell so the div will fit to it -->
                        <td style="position: relative;">
                            <!-- Make the div position absolute and position it to the top of the cell -->
                            <div style="position: absolute;top: 0;width:100%;height:100%;overflow:auto;">
                                <!--Set width and height to 100% so it will always fill the div-->
                                <table class="nowrap" style="width:100%;height:100%">
                                    <tbody>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                        <tr>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                            <td>An item in the table</td>
                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...