Имейте фиксированную позицию div, которая должна прокручиваться, если содержимое переполняется
У меня есть на самом деле две проблемы, но сначала разрешаю первичную проблему, так как я считаю, что другой проще адресовать.
У меня есть фиксированная позиция div в левой части прокрутки для меню. Правая сторона - это стандартный div, который прокручивается правильно. Проблема заключается в том, что когда порт просмотра браузера слишком мал, чтобы видеть все меню, нет способа получить его, чтобы прокрутить, что я могу найти (по крайней мере, не с css). Я пытался использовать разные переполнения в css, но ничто не делает прокрутку div. В div, который содержит меню, задано значение min-height: 100% и позиция: fixed.. оба атрибута, которые мне нужно сохранить.
div, содержащий меню, находится внутри другого div-оболочки, который установлен абсолютно и высота установлена на 100%.
Как я могу заставить его прокручивать по вертикали, если содержимое слишком высокое для div?
Это приводит меня к другой проблеме, что я не хочу показывать полосу прокрутки.. но я думаю, что у меня уже есть ответ на этот вопрос (только она пока не работает, потому что я не могу получить div для прокрутки для начала).
Любые решения? Возможно, нужен javascript? (о котором я мало знаю)
Пример скрипта JS
и соответствующий код, вызывающий проблему (поскольку размещение всего этого здесь слишком долгое):
.fixed-content {
min-height:100%;
position:fixed;
overflow-y:scroll;
overflow-x:hidden;
}
Также попытался добавить высоту: 100%, а просто посмотреть, была ли это проблема, но она не работала ни..., ни фиксированная высота, например 600 пикселей.
Ответы
Ответ 1
Проблема с использованием height:100%
состоит в том, что это будет 100% страницы вместо 100% окна (как вы, вероятно, ожидаете). Это вызовет проблему, которую вы видите, потому что нефиксированный контент достаточно длинный, чтобы включать фиксированный контент с высотой 100% без полосы прокрутки. Браузер не знает/не заботится о том, что вы не можете прокрутить эту полосу вниз, чтобы увидеть ее
Вы можете использовать fixed
, чтобы выполнить то, что вы пытаетесь сделать.
.fixed-content {
top: 0;
bottom:0;
position:fixed;
overflow-y:scroll;
overflow-x:hidden;
}
Эта вилка вашей скрипки показывает мое исправление:http://jsfiddle.net/strider820/84AsW/1/
Ответ 2
Вот оба исправления.
Во-первых, в отношении фиксированной боковой панели вам нужно дать ей высоту для переполнения:
Код HTML:
<div id="sidebar">Menu</div>
<div id="content">Text</div>
Код CSS:
body {font:76%/150% Arial, Helvetica, sans-serif; color:#666; width:100%; height:100%;}
#sidebar {position:fixed; top:0; left:0; width:20%; height:100%; background:#EEE; overflow:auto;}
#content {width:80%; padding-left:20%;}
@media screen and (max-height:200px){
#sidebar {color:blue; font-size:50%;}
}
Живой пример:
http://jsfiddle.net/RWxGX/3/
Невозможно НЕ получить полосу прокрутки, если ваш контент переполняет высоту div. Поэтому я добавил медиа-запрос для высоты экрана. Возможно, вы можете настроить свои стили для размеров короткого экрана, чтобы прокрутка не появлялась.
Cheers,
Игнасио
Ответ 3
Оставить ответ для любого, кто хочет сделать что-то подобное, но в горизонтальном направлении, как я и хотел.
Тонкая настройка @strider820 ответа, подобного приведенному ниже, сделает волшебство:
.fixed-content { //comments showing what I replaced.
left:0; //top: 0;
right:0; //bottom:0;
position:fixed;
overflow-y:hidden; //overflow-y:scroll;
overflow-x:auto; //overflow-x:hidden;
}
Вот оно. Также проверьте этот комментарий, где @train объяснил, используя overflow:auto
вместо overflow:scroll
.
Ответ 4
Вообще говоря, фиксированный участок должен быть установлен со свойствами width
, height
и top
, bottom
, иначе он не будет распознавать его размер и положение.
Если используемый ящик является прямым потомком для тела и имеет соседей, то имеет смысл проверить свойства z-index
и top, left
, поскольку они могут перекрывать друг друга, что может повлиять на наведение мыши при прокрутке содержимого.
Вот решение для поля содержимого (прямого потомка тега body
), которое обычно используется вместе с мобильной навигацией.
.fixed-content {
position: fixed;
top: 0;
bottom:0;
width: 100vw; /* viewport width */
height: 100vh; /* viewport height */
overflow-y: scroll;
overflow-x: hidden;
}
Надеюсь, это кому-нибудь поможет. Спасибо!