Форум программистов, компьютерный форум, киберфорум
HTML, CSS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902

Модальная форма. Как сделать прокрутку при превышении 100% ?

27.02.2018, 12:08. Показов 5498. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: открыть форму модально, центрировать ее по горизонтали и вертикали, а при превышении высоты экрана чтобы на ней, а не на всем экране появлялась полоса прокрутки.

В интернете нашел следующий способ:

HTML5
1
2
3
4
5
6
7
8
9
<div id = modal-background>
  <div id = modal-form>
    <div id= container>
      <h1> Надпись 1 </h1><h1> Надпись 2 </h1><h1> Надпись 3 </h1><h1> Надпись 4 </h1>
       <h1> Надпись 5 </h1><h1> Надпись 1 </h1><h1> Надпись 2 </h1><h1> Надпись 3 </h1>
       <h1> Надпись 4 </h1><h1> Надпись 5 </h1>
    </div>
   </div>
  </div>
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#modal-background
{
    padding: 0px 50px 0px 50px;
    text-align: center;
    white-space: nowrap;
    height: 100%;
    background-color: rgba(100, 100, 100, 0.4)
}
    
#modal-background:after
{
  display: inline-block;
  vertical-align: middle;
  width: 0;
  height: 100%;
  content: '';
  
}
    
#modal-form
{     
  display: inline-block;
  vertical-align: middle;
 
  max-height: 100%;
  //overflow-y: scroll;
  background-color: green;
  
}
        
#container
{
  max-height: 100%;
  overflow-y: scroll;
 
  margin: 50px;
  padding: 10px;
 
  background-color: white;
 
  text-align: left;
  white-space: normal;
}
https://codepen.io/dimoff66/pen/zRMPWp

Данный способ справляется с центрированиями, но прокручивается все равно весь экран, хотя прокручиваться должен только белый #container с содержимым.

Подскажите пожалуйста как исправить этот вариант или предложите другой способ, возможно без вспомогательной #modal-form.

Заранее большое спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2018, 12:08
Ответы с готовыми решениями:

Модальная форма появляется при создании приложения
В приложении множество модальных форм, но вдруг одна из них стала появлятся при создании приложения. Отображается она за главной формой....

есть модальная форма, если при Ajax отправке она не прошла валидацию, то ее(форму) не надо закрывать
есть модальная форма, если при Ajax отправке она не прошла валидацию, то ее(форму) не надо закрывать а например вывезти в модальной форме...

Как сделать автоматическую прокрутку страницы при открытии
Что и куда надо прописать, чтобы при открытии определенных страниц на сайте шло автоматическое прокручивание (идеально - с задержкой в...

24
Эксперт HTML/CSS
 Аватар для Fedor92
2964 / 2621 / 1068
Регистрация: 15.12.2012
Сообщений: 10,091
Записей в блоге: 11
27.02.2018, 12:14
Самое топорное решение:
CSS
1
2
3
#container{
height:200px;
}
Скролл то вы отобразили, а высоту блока кто указывать будет?
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2380 / 1740 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
27.02.2018, 12:16
Условие появления скролла это ограничение по ширине или высоте, ограничьте container по max-height и скролл будет появляться
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
27.02.2018, 12:52  [ТС]
AlexZaw, Контейнер ограничен, как явствует из css

CSS
1
2
3
#container
{
  max-height: 100%;
тем не менее этот max-height не работает и высота #container беззастенчиво превышает высоту родительского блока.
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2380 / 1740 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
27.02.2018, 13:55
renat_dmitriev, Почитайте про процентые размеры, они высчитываются от размеров родителя с жестко заданными размерами, если у родителя размеры указаны так же в процентах, берется родитель родителя и т.д. до тега html.
Где у вас указаны жесткие размеры?
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
27.02.2018, 14:54  [ТС]
AlexZaw, Я немного недопонимаю о чем вы говорите. Никаких жестких процентов нигде нет.

Есть #modal-background, который создает фон - занимая 100% высоты.
Есть #modal-form, который я так понимаю используется для центрирования по вертикали - он также занимает 100% высоты от родителя, то есть равен по высоте родителю
И теперь есть наше видимо модальное окно #container, у которого высота жестко не должна указываться, он растягивается в зависимости от контента, и единственное условие, что если из-за длинного контента высота этого элемента превысит высоту родительского окна, то он не должен увеличиться в размерах, вызывая появление полосы прокрутки у родителя, а должен вместо этого обзавестись собственной полосой прокрутки.

Поэтому высчитывать тут нечего.
0
Эксперт HTML/CSS
 Аватар для Fedor92
2964 / 2621 / 1068
Регистрация: 15.12.2012
Сообщений: 10,091
Записей в блоге: 11
27.02.2018, 15:00
Цитата Сообщение от renat_dmitriev Посмотреть сообщение
Я немного недопонимаю о чем вы говорите. Никаких жестких процентов нигде нет.
О Боги! Жёстко заданный размер - это размер заданный в px(смотрите мой первый пост)! Никто Вам не говорил про жёстко заданные проценты - Вам говорили про жёстко заданные размеры! Для Вашего случая высота родителя заданая в процентах не подойдёт... Так понятно?
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
27.02.2018, 15:22  [ТС]
О, Боги ! Сколько же раз нужно написать, что никакого жестко заданного размеры быть не может, так как верстка адаптивная, экран может быть высотой 200 пикселей или 800 пикселей и единственное требование к модальному окну - чтобы оно не вылезало за пределы экрана. Так понятно?

Добавлено через 5 минут
AlexZaw, Жестких размеров нет. Экран может быть разной высоты и корневой элемент всегда определен как 100%. Значит ли это что моя задача нерешаема?
0
Эксперт HTML/CSS
 Аватар для Fedor92
2964 / 2621 / 1068
Регистрация: 15.12.2012
Сообщений: 10,091
Записей в блоге: 11
27.02.2018, 15:27
Цитата Сообщение от renat_dmitriev Посмотреть сообщение
О, Боги !
Всё-всё молчу... Лучше чаю выпейте или лучше отдохните, погуляйте - подышите свежим воздушком...
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
27.02.2018, 15:38  [ТС]
Fedor92,

Не по теме:

Я очень ценил этот ресурс за отсутствие на нем истеричек. Впервые за много месяцев сталкиваюсь с хамством, видимо посещал раньше не те разделы. Если мои сообщения вызывают у вас какое-то напряжение, будьте светом самому себе - я останусь в темноте. Благодарю за понимание. ;)

0
Эксперт HTML/CSS
 Аватар для Fedor92
2964 / 2621 / 1068
Регистрация: 15.12.2012
Сообщений: 10,091
Записей в блоге: 11
27.02.2018, 16:35
Хамство? Где? Я Вам лишь предложил отдохнуть немного...
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2380 / 1740 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
27.02.2018, 16:49
Лучший ответ Сообщение было отмечено renat_dmitriev как решение

Решение

Смотрите, для container у вас задана max-height:100%, что означает что его максимальная высота будет 100% от родителя
(<div id = modal-form>)
Максимальная высота modal-form равна 100% от высоты его родителя (<div id = modal-background>).
Высота modal-background равна 100%; от его родителя (body)
Высота body у нас нигде не указана, значит ищем высоту у родителя body - html.
Высота html нигде не указана, значит вычисляется по высоте его детей, а именно высота html равна высоте body, высота которого равна высоте его единственного ребенка modal-background.
Высота modal-background вычисляется из высоты его ребенка modal-form.
Высота modal-form вычисляется из высоты его ребенка container + маржины и паддинги.
Итого имеем - Конечную высоту container, который и задает высоты всему остальному. Вот такой вот круговорот.

Цитата Сообщение от renat_dmitriev Посмотреть сообщение
так как верстка адаптивная
Адаптацию можно сделать через медиазапросы, вы же делаете резиновую верстку, которая, скорее всего, будет плохо выглядеть на маленьких экранах

Цитата Сообщение от renat_dmitriev Посмотреть сообщение
Значит ли это что моя задача нерешаема?
Нет не значит, просто решается она немного другим образом, если никто не подскажет решение, то попозже скину вариант
1
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
27.02.2018, 16:55  [ТС]
Все, я понял свою проблему...В теме был просто кусок моей страницы, в реальном проекте у контейнера стояло свойство display: table, а свойство overflow-y как выяснилось работает только для блочных элементов. Изменение свойства display на inline-block привело к появлению полосы прокрутки.

Никаких жестко заданных в пикселях размеров не потребовалось.
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
27.02.2018, 17:01
del
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
27.02.2018, 17:05  [ТС]
AlexZaw,

Цитата Сообщение от AlexZaw Посмотреть сообщение
Высота body у нас нигде не указана, значит ищем высоту у родителя body - html.
Ну так в этом случае достаточно поставить в css

CSS
1
body,html(height: 100%}
и все прекрасно работает без необходимости искать дополнительные способы.

Хоть проблема в реальном проекте была в другом, как описал сообщением выше, тем не менее спасибо за информацию - запомню на будущее.
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2380 / 1740 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
27.02.2018, 17:13
Хм, в этом примере нигде не было указано display-table, но тем не менее не работало так как надо.
Впрочем рад что в итоге у вас все заработало, но все-таки советую разобраться как работают размеры в процентах.
Как вы думаете какой размер будет у блока .in в следующем примере?
HTML5
1
2
3
<div class="out">
  <div class="in"></div>
</div>
CSS
1
2
3
4
5
6
7
8
9
10
.out{
  height: 300px;
  outline: 1px solid black;  
}
.in{
  width: 400px;
  outline: 1px solid red;
  padding-top: 50%;
 
}
0
392 / 294 / 121
Регистрация: 26.08.2016
Сообщений: 902
27.02.2018, 18:07  [ТС]
Цитата Сообщение от AlexZaw Посмотреть сообщение
Хм, в этом примере нигде не было указано display-table, но тем не менее не работало так как надо.
Для этого примера правильный ответ: добавить в css

CSS
1
body,html(height: 100%}
0
26 / 36 / 15
Регистрация: 15.01.2017
Сообщений: 311
27.02.2018, 18:09
а, что вам мешает в (vh) или (vw) - это тоже жесть... делов то...
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2380 / 1740 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
27.02.2018, 18:17
Цитата Сообщение от renat_dmitriev Посмотреть сообщение
Для этого примера правильный ответ: добавить в css
Этого, к сожалению, недостаточно
Ну да не будем, главное что задачку решили
0
26 / 36 / 15
Регистрация: 15.01.2017
Сообщений: 311
27.02.2018, 18:31
подложку формы размер в 102.5% отступ ей в право -2.5% ... и полоса прокрутки уйдет в минус с экрана... и укажи икон "крути"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2018, 18:31
Помогаю со студенческими работами здесь

Как сделать горизонтальную прокрутку при нажатии на стрелки?
Вот к примеру сайт http://www.freshness.hu, на главной странице фото можно прокручивать горизонтально нажатием на стрелки. Мне нужна такая...

Модальная форма
как сделать форму модальной чтобы можно была работать с обеими формами?

Модальная форма
Ввожу вот это а оно вибивает ошибку Unit1.cpp(38): E2451 Undefined symbol 'Form2' Unit1.cpp(44): E2451 Undefined symbol 'Form2' ...

Не модальная форма в модальной
Подскажите, можно ли как-нибудь открыть не модальную форму поверх модальной, не делая ее модальной?

Самая модальная форма)
Добрый день. Возникла необходимость реализовать в базе окно, которое ВСЕГДА было бы поверх всех остальных. То есть в базе есть главная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru