2015-01-05 3 views
3

У меня есть 2 дочерних divs, вложенных в родительский div в строке столбца: родительский столбец, а дети - это строки. enter image description hereКак сделать дочерний div прокручиваемым, когда он превышает родительскую высоту?

Верхний дочерний div имеет переменную высоту, но гарантированно будет меньше высоты родительского div.

Нижний дочерний div также имеет переменную высоту. В некоторых случаях высота дочерних divs сделает нижний дочерний div выше родителя. В этом случае мне нужно сделать прокрутку нижнего div. Обратите внимание: я хочу, чтобы прокручивался только нижний div, а не весь родительский div.

Как с этим справиться?

Смотрите приложенный jsfiddle для случая, например: http://jsfiddle.net/0yxnaywu/5/

HTML:

<div class="parent"> 
    <div class="child1"> 
     hello world filler 
    </div> 
    <div class="child2"> 
     this div should overflow and scroll down 
    </div> 
</div> 

CSS:

.parent { 
    width: 50px; 
    height: 100px; 
    border: 1px solid black; 
} 

.child1 { 
    background-color: red; 
} 

.child2 { 
    background-color: blue; 
} 
+0

вам нужно будет добавить скроллер для родительского HTTP: // jsfiddle.net/0yxnaywu/1/ –

+0

Таким образом, это позволяет прокручивать весь родительский div, я бы хотел прокрутить только нижний дочерний div. – user2066880

+0

Не положительно, но я думаю, вам придется использовать некоторые javascript. Переполнение работает только тогда, когда вы даете ему значение для переполнения, когда оно больше. Ваша ценность относительно того, насколько велика верхняя часть, которую, я думаю, вам нужно будет захватить, чтобы затем вычислить. –

ответ

3

Переполнение работает только тогда, когда вы даете ему значение для переполнения, когда оно больше. Ваше значение относительно того, насколько велика вершина, поэтому с помощью jQuery возьмите это значение, а затем вычтите из родителя.

$(document).ready(function() { 
    $(".child2").css("max-height", ($(".parent").height()-$(".child1").height())); 
}); 

и добавить overflow «s детям

.child1 { 
    background-color: red; 
    overflow: hidden; 
} 

.child2 { 
    background-color: blue; 
    overflow: auto; 
} 

http://jsfiddle.net/m9goxrbk/

+0

Имеет смысл! Интересно, возможно ли это без Javascript, но, тем не менее, я думаю, что это решение элегантно. Благодарю. – user2066880

1

Использование overflow свойство:

.parent { 
    width: 50px; 
    height: 100px; 
    border: 1px solid black; 
    overflow: auto; 
} 

jsFiddle

EDIT:

если вы хотите только второй DIV будет прокручивать, вам необходимо изменить его высоту 30px так child1 и child2 будет точно соответствовать родителю height и добавить overflow недвижимость там:

.parent { 
    width: 50px; 
    height: 100px; 
    border: 1px solid black; 
} 

.child1 { 
    height: 70px; 
    background-color: red; 
} 

.child2 { 
    height: 30px; 
    background-color: blue; 
    overflow: auto; 
} 

jsFiddle

+2

Они хотят, чтобы только дочерний div 2 стал прокручиваемым, а не родителем. –

0

Поскольку этот пост до сих пор рейтинг очень высоко в Google, я хотел бы опубликовать лучшее решение с использованием Flexbox. На самом деле это очень просто. Использование дисплея: сгибать, Flex-направление: колонки и переполнения: скрытый для родителей и перелива-у: авто для ребенка.

.wrapper { 
    display: flex; 
    flex-direction: column; 
    overflow: hidden; 
} 

.scrollable-child { 
    overflow-y: auto; 
} 

Вот ручка: https://codepen.io/pawelsas/pen/vdwjpj

Смежные вопросы