2016-08-03 10 views
1

Я стилизация неупорядоченного списка, структура которогоКак получить полосу прокрутки для отображения на моем DIV и в то же время центрировать ее на экране?

<div class="select-styled active">Arizona</div><ul class="select-options" style="display: block;"><li rel="">Select State</li><li rel="3526">Alabama</li><li rel="3556">Alaska</li><li rel="3547">Arizona</li><li rel="3510">Arkansas</li><li rel="3542">California</li>…<li rel="3554">Wyoming</li></ul></div> 

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

<div id="profileContainer"> 
<div class="profileField address"> 
<div class="select-styled active">Arizona</div><ul class="select-options" style="display: block;"><li rel="">Select State</li><li rel="3526">Alabama</li><li rel="3556">Alaska</li><li rel="3547">Arizona</li><li rel="3510">Arkansas</li><li rel="3542">California</li>…<li rel="3554">Wyoming</li></ul></div> 
</div> 
</div> 

с этим стилем

#profileContainer { 
    border-radius: 25px; 
    background: #ffffff; 
    padding: 10px; 
    width: 100%; 
    max-width: 720px; 
    display: inline-block; 
    position: fixed; 
    top: 50%; 
    left: 50%; 
    -webkit-transform: translate(-50%, -50%); 
    transform: translate(-50%, -50%); 
} 

Но теперь нет никакого способа для прокрутки. Вот мой JSFiddle - https://jsfiddle.net/d2r50gc1/. Как я могу центрировать мои объекты в центре экрана, а также иметь полосу прокрутки в неупорядоченном списке, чтобы я мог видеть все элементы?

+0

Найти другой метод центрирующую? Является ли меню ** предполагаемым ** застрявшим в середине страницы независимо? Возможно, 'абсолютный', а не' фиксированный .... но ваша обертка рушится в любом случае. –

+0

Я изменил значение с «фиксированного» на «абсолютное», и хотя теперь я могу прокручивать, весь экран прокручивается, а не только DIV, где мне нужна полоса прокрутки - https://jsfiddle.net/ d2r50gc1/1 /. –

+0

@Mike Теперь я понимаю, прочитав ваш комментарий, что вы, похоже, хотите, чтобы div прокручивал внутренне. Я думаю, вы обнаружите, что мой ответ - это более удобное для пользователя решение и прокрутка всего содержащего div. – JBartus

ответ

0

Я думаю, что я сделал то, что вы хотите: https://jsfiddle.net/d2r50gc1/11/

Все что вам нужно сделать, это применить несколько стилей к неупорядоченному списку:

ul.select-options { 
    max-height: 15em; 
    overflow-y: scroll; 
    overflow-x: hidden; 
} 

С помощью em (или rem) единиц вместо из px вы сохраняете поддержку для пользователей, которые решили изменить размер шрифта, который я отметил, что вы проявили интерес к комментариям другого ответа. Вы можете изменить это значение 15em, которое является произвольно выбранным множителем для любого числа, как вы сочтете нужным. Вы также можете использовать rem вместо em, но вам придется принять это решение самостоятельно, в зависимости от вашего окончательного желаемого варианта использования. Если вы измените определение padding, также используя em или rem, вы можете использовать математику, чтобы установить размер, чтобы всегда показывать определенное количество элементов в раскрывающемся списке.

+0

Yup, taht был именно тем, что я искал. Благодаря! –

0

Я только что обновил свой jsfiddle

Вам просто нужно добавить высоту и переполнение вашего #profileContainer

Update

Надеюсь, это поможет вам.

+0

Невозможно добавить фиксированную высоту, так как в контейнере будет переменное количество элементов, и я не хочу постоянно настраивать фиксированную высоту (также когда пользователи настраивают размер шрифта, который будет завинчивать отображение другие элементы). Я скорректировал скрипку с помощью наложения - https://jsfiddle.net/d2r50gc1/4/, но меню по-прежнему не выходит за пределы контейнера со строкой прокрутки. –

0

Адрес JSFiddle в соответствии с вашими требованиями.

.select { 
    overflow: auto; 
    overflow-x: hidden; 
    overflow-y: scroll; 
    -webkit-transform: translateX(calc(50% + 110px)); 
    transform: translateX(calc(50% + 110px)); 
} 

Описание

Я добавил переполнению к классу .select, а затем использовали преобразование его в центр. Надеюсь, это соответствует вашим потребностям.

0

Добавление второго ответа теперь, когда я думаю, что понимаю, о чем вы просите. Я искренне призываю вас сначала рассмотреть мой другой ответ, я думаю, вы найдете его намного лучшим вариантом.

Прокрутка div.profileField Fiddle: https://jsfiddle.net/d2r50gc1/12/

Достигнутые с помощью следующего CSS:

div.profileField { 
    width: 100%; 
    height: 100%; 
    overflow-y: scroll; 
    overflow-x: hidden; 
    box-sizing: border-box; 
} 
0

Вы пытаетесь чего-то достиг, как этот

.select-options{ height:60%; overflow-x: hidden;} Add this properties in same class 

Demo

+0

У вас есть полоса прокрутки на контейнере, но мне нужна полоса прокрутки только на элементе (DIV с состояниями) в его расширенной форме. Я попытался добавить «переполнение: прокрутка»; к предполагаемому элементу, но не отображается полоса прокрутки - https://jsfiddle.net/d2r50gc1/13/. –