Форум программистов, компьютерный форум, киберфорум
HTML, CSS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/56: Рейтинг темы: голосов - 56, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 30.11.2013
Сообщений: 15

Модальное окно формы с затемнением заднего фона

03.03.2016, 16:26. Показов 10912. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем!
Возникла такая проблема. Создаю форму авторизации в виде модального окна. Хочу сделать так, чтобы когда появлялась форма, то остальной фон затемнялся. Для затемнения использую div-блок с position: fixed; c прозрачностью, меньшей единицы и z-index'ом равным 100. У самого модального окна я поставил z-index: 200, надеясь, что он унаследуется всеми вложенными div-ами, из которых я собирал модальное окно и все они будут лежать "выше" затемнения, значит не будут "затемняться". Но это не помогло. Часть составных блоков формы затемнилась, часть - осталось светлыми.

Скриншоты проблемы:
del-- форма без затемнения
del -- форма с затемнением(затемнение "залазит" один из внутренних блоков формы, что смотрится некрасиво.

Код верстки:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<body>
  <center><button onclick="show('block');">Авторизироваться</button></center>
  
  <!-- Блок для затемнения -->
  <div id="TB_overlay"></div>
  
  <!-- Блок для формы -->
  <div id="div_form">
    <div id="div_header">Авторизация</div>
    <div id="div_body"> </div>
    <div id="content">
       <table>
       <tr><td class = "cl1">Логин:</td> <td><input type="text" size="25" /></td></tr>
       <tr><td class = "cl1">Почта:</td> <td><input type="text" size="25" /></td></tr>
       <tr><td class = "cl1">Пароль:</td> <td><input type="text" size="25" /></td></tr>
       <tr><td class = "cl1">Пароль(повторно):</td> <td><input type="text" size="25" /></td></tr>
       </table>   
       <a href="#" class="button_Ok">Ок</a>
       <a href="#" class="button_Ok">Отмена</a>
    </div>
  </div>
 
</body>
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*Для полей ввода данных*/
input[type=text], input[type=password], textarea { 
 border: 1px solid #777;
}
input {
 vertical-align: middle;
}
input[type=password]:hover, input[type=text]:hover{ 
 background: #ffffe1; 
 border: 1px dashed #555;
}
input[type=password]:focus, input[type=text]:focus, textarea:focus { 
 background: #f8f8f8; 
 border: 1px solid #999;
}
 
 
/*Для таблицы форматирования*/
table {
border-collapse: collapse; 
border-width: 0px;
z-index: 200;
}
 
td {border: 0px solid grey; align: rigth;z-index: 100;}
 
.cl1{text-align: right;z-index: 200;}
 
/*Для затемнения всего, кроме формы*/
#TB_overlay {
    display: none; 
    //opacity: 0.8; 
    position: fixed; 
    left: 0; 
    right: 0; 
    top: 0; 
    bottom: 0; 
    padding: 16px; 
    background-color: rgba(1, 1, 1, 0.8); 
    z-index: 100; 
    overflow: auto; 
}
 
/*Для создания формов блоков*/
#div_form {
display: none;
border-radius: 10px 10px 10px 10px;
margin: auto;
margin-top: auto;
width: 400px;
height: 232px;
position: fixed;
top: 50%;
left: 50%;
 margin-top: -110px;
 margin-left: -200px;
 box-shadow: 0 0 15px 3px #000;
 z-index: 200;
}
 
#div_header {
  //border: 1px solid black;
  height: 20px;
  border-radius: 10px 10px 0px 0px;
  background: linear-gradient(to top, #aaa, #fff);
  padding: 5px;
  text-align: center;
  z-index: 200;
}
 
#div_body {
  border: 1px solid black;
  height: 200px;
  border-radius: 0px 0px 10px 10px;
  background: #000; 
  opacity: 0.5;
  z-index: 200;
}
 
#content{
  position: relative;
  top: -190px;
  left: 10px; 
  z-index: 200;
}
 
/*Для кнопок*/
a.button_Ok {
  position: relative;
  display: inline-block;
  font-size: 90%;
  font-weight: 700;
  color: rgb(209,209,217);
  margin-top: 20px;
  margin-left: 70px;
  text-decoration: none;
  text-shadow: 0 -1px 2px rgba(0,0,0,.2);
  padding: .5em 1em;
  outline: none;
  border-radius: 3px;
  background: linear-gradient(rgb(110,112,120), rgb(81,81,86)) rgb(110,112,120);
  box-shadow:
   0 1px rgba(255,255,255,.2) inset,
   0 3px 5px rgba(0,1,6,.5),
   0 0 1px 1px rgba(0,1,6,.2);
  transition: .2s ease-in-out;
}
a.button_Ok:hover:not(:active) {
  background: linear-gradient(rgb(126,126,134), rgb(70,71,76)) rgb(126,126,134);
}
a.button_Ok:active {
  top: 1px;
  background: linear-gradient(rgb(76,77,82), rgb(56,57,62)) rgb(76,77,82);
  box-shadow:
   0 0 1px rgba(0,0,0,.5) inset,
   0 2px 3px rgba(0,0,0,.5) inset,
   0 1px 1px rgba(255,255,255,.1);
}
JavaScript
1
2
3
4
function show(state){ 
    document.getElementById('div_form').style.display = state;             
    document.getElementById('TB_overlay').style.display = state;              
}
https://jsfiddle.net/gn1fzktu/1/

Будьте добры, подскажите пожалуйста в чём мои ошибки, наставьте на путь истинный!

CSS-код блоков, из которых состоит форма-окно:
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
/*Для создания формов блоков*/
#div_form {
display: none;
border-radius: 10px 10px 10px 10px;
margin: auto;
margin-top: auto;
width: 400px;
height: 232px;
position: fixed;
top: 50%;
left: 50%;
 margin-top: -110px;
 margin-left: -200px;
 box-shadow: 0 0 15px 3px #000;
 z-index: 200;
}
 
#div_header {
  //border: 1px solid black;
  height: 20px;
  border-radius: 10px 10px 0px 0px;
  background: linear-gradient(to top, #aaa, #fff);
  padding: 5px;
  text-align: center;
  z-index: 200;
}
 
#div_body {
  border: 1px solid black;
  height: 200px;
  border-radius: 0px 0px 10px 10px;
  background: #000; 
  opacity: 0.5;
  z-index: 200;
}
 
#content{
  position: relative;
  top: -190px;
  left: 10px; 
  z-index: 200;
}
CSS-код блока затемнения:
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
#TB_overlay {
    display: none; 
    //opacity: 0.8; 
    position: fixed; 
    left: 0; 
    right: 0; 
    top: 0; 
    bottom: 0; 
    padding: 16px; 
    background-color: rgba(1, 1, 1, 0.8); 
    z-index: 100; 
    overflow: auto; 
}
Миниатюры
Модальное окно формы с затемнением заднего фона   Модальное окно формы с затемнением заднего фона  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2016, 16:26
Ответы с готовыми решениями:

Модальное окно (прокрутка заднего фона)
Добрый день уважаемые форумчане, необходим Ваш совет. Использую вот это модальное окно...

Для заднего фона использовал фото,но оно все не влезло в окно
Можно ли как то задать размер страницы как и размер фотографии. Спасибо.Я только делаю первый шаги в HTML.

Добавление заднего "двойного" заднего фона
Здравствуйте. Каким образом можно сверстать данный фон? Нужно что-бы фон позиционировал по центру и на нём можно было размещать какие...

2
261 / 236 / 161
Регистрация: 10.12.2011
Сообщений: 513
04.03.2016, 15:07
Подправил немного стилизацию. Но есть пару замечаний

Ну могу точно сказать что прописывать z-index: 200 всем дочерним элементам блока - необязательно, есть такое понятие как наследование. Если задали родителю 200 то всё что вложено в него будет находится на одном уровне с родителем

Как пример с z-index можно поиграться тут(либо на codepen): http://www.w3schools.com/cssre... css_zindex

Достаточно часто вижу в стилизации перебивание одного и того же правила. Например:

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
#div_form {
.....
margin: auto;      <-- данные две строчки можно было не писать
margin-top: auto; <--
....
position: fixed;
top: 50%;
left: 50%;
 margin-top: -110px; <-- так как вы их перебиваете здесь
 margin-left: -200px;
.....
background: rgba(128, 128, 128,0.6); <-- добавил цвет посветлее
}
Лучше opacity уберите, используйте rgba и background-color.

Убрал лишние правила для ячеек в таблице(Вы не поверите, но без них оно довольно таки себе нормально живет )

Более того, получается что Вы ячейки опускаете ниже самой таблицы

CSS
1
2
3
4
5
6
7
8
9
10
11
table {
border-collapse: collapse; 
border-width: 0px;
z-index: 200; <-- убрал
}
 
td {
  border: 0px solid grey; <-- убрал
  align: rigth;
  z-index: 100; <-- убрал
}
Собственно дальше разберитесь сами, там осталось буквально пара исправлений. А в целом у Вас отлично получилось

Исправленный вариант:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*Для полей ввода данных*/
input[type=text], input[type=password], textarea { 
 border: 1px solid #777;
}
input {
 vertical-align: middle;
}
input[type=password]:hover, input[type=text]:hover{ 
 background: #ffffe1; 
 border: 1px dashed #555;
}
input[type=password]:focus, input[type=text]:focus, textarea:focus { 
 background: #f8f8f8; 
 border: 1px solid #999;
}
 
 
/*Для таблицы форматирования*/
table {
  border-collapse: collapse; 
  border-width: 0px;
}
 
.cl1{text-align: right;}
 
/*Для затемнения всего, кроме формы*/
#TB_overlay {
    display: none; 
    position: fixed; 
    left: 0; 
    right: 0; 
    top: 0; 
    bottom: 0; 
    background-color: rgba(1, 1, 1, 0.8); 
    z-index: 100; 
    overflow: auto; 
}
 
/*Для создания формов блоков*/
#div_form {
display: none;
border-radius: 10px 10px 10px 10px;
width: 400px;
height: 232px;
position: fixed;
top: 50%;
left: 50%;
 margin-top: -110px;
 margin-left: -200px;
 box-shadow: 0 0 15px 3px #000;
 background: rgba(128, 128, 128,0.6);
 z-index: 200;
}
 
#div_header {
  height: 20px;
  border-radius: 10px 10px 0px 0px;
  background: linear-gradient(to top, #aaa, #fff);
  padding: 5px;
  text-align: center;
}
 
#div_body {
  border: 1px solid black;
  height: 200px;
  border-radius: 0px 0px 10px 10px;
}
 
#content{
  position: relative;
  top: -170px;
  left: 10px; 
}
 
/*Для кнопок*/
a.button_Ok {
  position: relative;
  display: inline-block;
  font-size: 90%;
  font-weight: 700;
  color: rgb(209,209,217);
  margin-top: 20px;
  margin-left: 70px;
  text-decoration: none;
  text-shadow: 0 -1px 2px rgba(0,0,0,.2);
  padding: .5em 1em;
  outline: none;
  border-radius: 3px;
  background: linear-gradient(rgb(110,112,120), rgb(81,81,86)) rgb(110,112,120);
  box-shadow:
   0 1px rgba(255,255,255,.2) inset,
   0 3px 5px rgba(0,1,6,.5),
   0 0 1px 1px rgba(0,1,6,.2);
  transition: .2s ease-in-out;
}
a.button_Ok:hover:not(:active) {
  background: linear-gradient(rgb(126,126,134), rgb(70,71,76)) rgb(126,126,134);
}
a.button_Ok:active {
  top: 1px;
  background: linear-gradient(rgb(76,77,82), rgb(56,57,62)) rgb(76,77,82);
  box-shadow:
   0 0 1px rgba(0,0,0,.5) inset,
   0 2px 3px rgba(0,0,0,.5) inset,
   0 1px 1px rgba(255,255,255,.1);
}
1
1 / 1 / 0
Регистрация: 30.11.2013
Сообщений: 15
04.03.2016, 18:58  [ТС]
Cпасибо Вам огромное за развернутый ответ и подробные замечания!
Прикрепил ваш исправленный код стилей и всё заработало так, как хотелось изначально)
Буду разбираться в тонкостях. Еще раз спасибо Вам!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.03.2016, 18:58
Помогаю со студенческими работами здесь

Модальное окно вперед главной формы
Нужно вывести форму модальным окном перед тем, как пользователь увидит главное окно программы. void __fastcall...

Модальное окно формы обратной связи
Доброго времени суток. Вот такая проблема есть. Есть форма отправки данных на e-mail. Расположена она в модальном окне на js. То есть...

Отправка данных из формы в модальное окно на bootstrap
Все день добрый! Может кто знает, есть форма с полем input и кнопкой sibmit как открыть модальное окно на bootstrap и туда передать...

Модальное окно bootstrap после отправки формы
Здравствуйте, подскажите с решением, после отправки формы должно появляться модальное окно, оно появляется но буквальна на миг и пропадает,...

Форма обратной связи в всплывающем окне с затемнением фона
Здравствуйте, есть люди которые могут помочь с формой обратной связи, там должно быть всего два пункта: 1)Ваше имя 2)Ваш номер...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru