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

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

27.02.2018, 12:08. Показов 5463. Ответов 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
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,091
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
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,091
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
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,091
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
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,091
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
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,091
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru