Подтвердить что ты не робот

Div с полосой прокрутки внутри div с позицией: фиксированная

У меня есть div с позицией: fixed, который является моим контейнером div для некоторых меню. Я установил его сверху: 0px, bottom: 0px, чтобы всегда заполнять область просмотра. Внутри этого div я хочу иметь еще 2 divs, нижний из которых содержит много строк и имеет переполнение: auto. Я ожидал бы, что он будет содержаться в контейнере div, но если их слишком много, он просто расширяется за пределами фиксированного div. Ниже приведен мой код и скриншот, чтобы уточнить:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>MyPlan</title>
    <meta name="X-UA-COMPATIBLE" value="IE=8" />
    <style type="text/css">
        #outerfixed { position:fixed;  width:200px;  background-color:blue; padding:5px; top:0px; bottom:30px;}
        #innerstatic1 { width:100%; background-color:yellow; height:100px;}
        #innerstatic2 { overflow:auto; background-color:red; width:100%;}
    </style>
</head>
<body>
    <div id="outerfixed">
        <h3>OUTERFIXED</h3>
        <div id="innerstatic1">
            <h3>INNERSTATIC1</h3>
        </div>
        <div id="innerstatic2">
            <h3>INNERSTATIC2</h3>
            line<br />
                        ...lots of lines
            line<br />
        </div>
    </div>
</body>
</html>

alt text

Есть ли у меня способ сделать это? Опять же, я хочу, чтобы # innerstatic2 правильно содержался в #outerfixed и получал полосы прокрутки, если он больше, чем пространство, в котором оно находится внутри #outerfixed.

Я знаю, что есть некоторые возможности взломать это, также исправляя # innerstatic2, но мне бы очень хотелось, чтобы он находился внутри потока внутри #outerfixed, если это возможно, так что, если я буду перемещать #outerfixed где-то, появится внутренний элемент с ним.

EDIT: Я знаю, что могу установить переполнение: auto на #outerfixed и получить полосу прокрутки на всем протяжении, но я специально хочу прокрутку только на # innerstatic2, это сетка, и я хочу прокручивать только сетку.

Кто-нибудь? Возможно ли это?

4b9b3361

Ответ 1

Для этого существует двухэтапное решение, но оно имеет что-то вроде стоимости:

  • Добавьте overflow-y: scroll; в css для #innerstatic2.
  • определить height (или max-height) для #innerstatic2, иначе он не будет переполняться, он просто будет увеличивать свою высоту (по умолчанию для div есть height: auto).


Отредактировано, потому что иногда я просто не могу остановиться.

Я опубликовал демо на jsbin, чтобы показать реализацию jQuery, которая рассчитает для вас height ( он не обобщен, поэтому он будет работать только с вашим текущим html).

(function($) {
  $.fn.innerstaticHeight = function() {
        var heightOfOuterfixed = $('#outerfixed').height(),
        offset = $('#innerstatic2').offset(),
        topOfInnerstatic2 = offset.top,
        potentialHeight = heightOfOuterfixed - topOfInnerstatic2;

        $('#innerstatic2').css('height',potentialHeight);
  }
})(jQuery);

$(document).ready(
    function() {
        $('#innerstatic2').innerstaticHeight();
    }
);

Ответ 2

Я решил это, предоставив абсолютное положение ul и высоте 100%

ul {
  overflow-y: scroll;
  position: absolute;
  height: 100%;
}

проверьте этот FIDDLE

Ответ 3

overflow-y:scroll;

И добавьте это для устройств iOS. Это дает лучшую прокрутку, используя прикосновение. Переполнение-y нужно прокрутить! по соображениям безопасности. автоматическая работа для некоторых людей. или, по крайней мере, это то, что я слышал.

-webkit-overflow-scrolling: touch;

Ответ 4

вы должны установить высоту для наружной и максимальной высоты для innerstatic2

см. это может быть полезно DEMO

Ответ 5

Это контейнер-контейнер, который должен быть с атрибутом overflow: auto. В этом случае #outerfixed div

Ответ 6

Единственный способ, которым я рисую, - установить innerstatic2 в абсолютное положение (так что вы можете использовать верх и низ для его размера по отношению к внешнему виду), затем внутри innerstatic2 создайте другой div, в который вы вставляете свой текст. Затем вы даете innerstatic2 "переполнение: авто"; индикация. Недостатком этого метода является то, что innerstatic2 не движется вниз, когда innerstatic1 растет, поскольку он должен быть абсолютно. Если ему нужно двигаться, это должно быть "position: relative", но тогда вам нужно установить для него фиксированную высоту. Поэтому в любом случае вам нужно согласиться на компромисс.

Как только все браузеры поддерживают новые функции CSS3, такие как поддержка вычислений, будут доступны более эффективные варианты без этих недостатков.

Ответ 7

Не идеальный, но это должно дать вам 90% пути

<div style="position:fixed; bottom:1px; left:5em; height: 20em; width:20em; background-color:blue;">
        <div style ="width:15em; background-color: green;">
                Title
        </div>
        <div style ="background-color:yellow; max-height:80%; width:15em; overflow:auto;">
                <div style="height:100em; background-color:red; width:10em;">
                        scroll<br/>
                        scroll<br/>
                        scroll<br/>
                </div>  
        </div>  
</div>