Как настроить дочерний элемент div для отображения полос прокрутки только тогда, когда это требуется для параметров родительского процента div - PullRequest
0 голосов
/ 12 июля 2010

Я имею дело с довольно стандартной (или я так думал) страницей.Я хотел бы, чтобы ширина страницы определялась тегом <body> и стилем верхнего уровня .page, который я определил в моей CSS.Мой сайт имеет левую панель навигации, которая ВСЕГДА определенной ширины.Область «контента» растягивается вместе со страницей и должна определяться оставшимся пространством, которое занимает экран пользователя.

Я хотел бы показать полосы прокрутки на контенте, который не "сохраняет мир" с моей шириной плавающей области.Например, недавно я натолкнулся на ряд подэлементов, для которых нужны полосы прокрутки, чтобы страница не растягивалась в вечность.

Вот простое изображение того, как все выглядит, когда полосы прокрутки не нужны:alt text

Вот как это выглядит, когда мой суб-контент шире, чем страница: alt text

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

Я приложил HTML, который использовал для создания этого экрана, потому что я не могНе думаю, что лучший способ описать мой подход:

<html>
<head>
    <style type="text/css">
        body
        {
            background-color: gray;             
        }

        .page /* page is always centered on screen */
        {
            background-color: white;
            width: 90%; 
            margin-left: auto;
            margin-right: auto;
            padding: 10px;
        }

        .nav-pane /* navigation pane is always 100px */
        {
            width: 100px;
            height: 100%;
            background-color: green;
        }

        .nav-pane > div
        {
            width: 100px;
        }

        .content-pane /* content pane should size with page */
        {
            background-color: yellow;
            margin: 10px;         
        }

        .content-pane > div /* !!! SHOULD NOT STRETCH !!! */
        {
            position: relative;
            overflow: auto;
            background-color: blue;
            padding: 10px;
            margin: 10px;
            color: white;
        }

        .content-pane > div > *
        {
            clear: both;
        }

        .content /* content div holds tables, images, paragraphs, etc.. */
        {
            background-color: red;
            float: left;
            margin-bottom: 20px;
        }

        #small /* one is small */
        {
            width: 200px;
        }

        #big /* one is BIG! */
        {
            width: 4000px;
        }
    </style>
</head>
<body>
    <div class="page">
        <table width="100%" style="border: solid black">
            <tr>
                <td class="nav-pane">
                    <div>
                        I am the nav-pane
                    </div>
                </td>
                <td class="content-pane">
                    <div>
                        I am the content pane

                        <h2>I am a heading</h2>
                        <div class="content">
                            <div id="small">Scrollbar not needed</div>
                        </div>

                        <h2>I too am a heading</h2>
                        <div class="content">
                            <div id="big">I require a scroll bar to keep this page pretty... :(</div>
                        </div>
                    </div>
                </td>
            </tr>
        </table>
    </div>
</body>
</html>

Возможно ли то, что я пытаюсь сделать, даже без использования javascript?

Заранее спасибо за любую информацию ...

1 Ответ

2 голосов
/ 12 июля 2010

Добавление к вашему стилю table a table-layout: fixed должно достичь того, чего, я полагаю, вы хотите. Добавьте его либо встроенным (как вы уже делаете), либо как часть вашего css (что я бы посчитал лучшим способом).

Объяснение: Ваша проблема заключается в том, что div находится в table, который по умолчанию ячейка таблицы расширяется, чтобы соответствовать ее содержимому. Установка таблицы таким образом, чтобы она оставалась фиксированного размера с помощью свойства table-layout, предотвращает увеличение размера таблицы. Конечно, полоса прокрутки, которая из этого выйдет, будет на table, а не на div.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...