2017-01-17 9 views
1

Я пытаюсь создать Модальное окно, которое распространяется по всему приложению на веб-странице.CSS Modal Window Проблема внутри нескольких divs

Приложение состоит из углублений верхнего уровня вложенных друг за другом. Например: панели> панель> панель-деталь> карта> содержимое карты

Я хочу создать Модальный компонент для каждой карты, но все они должны охватывать приложение.

Требование enter image description here

Actual enter image description here

Ниже мой CSS:

.modal { 
    display: none; 
    position: fixed; 
    z-index: 1; 
    padding-top: 100px; 
    left: 0; 
    top: 0; 
    width: 100%; 
    height: 100%; 
    overflow: auto; 
    background-color: rgb(0,0,0); 
} 

/* Modal Content */ 
.modal-content { 
    background-color: #fefefe; 
    margin: auto; 
    padding: 20px; 
    border: 1px solid #888; 
    width: 80%; 
} 

Мой HTML Структура для модального:

<div class="modal"> 
    <div class="modal-content"> 
    <p>Card 1 Modal</p> 
    </div> 
</div> 

Рассмотрите элемент с class = "modal", завернутый в вложенные div.

Как написать мой CSS, чтобы модальная карта 1 отображалась по всему приложению?

Было бы неплохо поставить модальный компонент вне вложенных divs?

+0

может быть, вы могли бы установить 'позицию: наследовать;' для модального –

+0

потому что положение модальных является абсолютным. –

+0

@MohammadAghayari нет. Это 'fixed' – Turnip

ответ

1

Если вы хотите отобразить что-то в качестве модального, это означает, что нужно использовать position: absolute, а эффект поместить тень на все остальные divs я сделал с помощью функции RGBA, которая является общим цветом rgb и непрозрачностью.

Взгляните на этот пример:

.container{ 
 
    display: flex; 
 
    position: relative; 
 
    justify-content: center; 
 
    flex-direction: row; 
 
    height: 300px; 
 
    width: 100%; 
 
} 
 

 
.content1{ 
 
    display: flex; 
 
    background-color: blue; 
 
    flex: 1; 
 
    height: 100%; 
 
} 
 

 
.content2{ 
 
    display: flex; 
 
    background-color: red; 
 
    flex: 1; 
 
    height: 100%; 
 
} 
 

 
.content3{ 
 
    display: flex; 
 
    background-color: green; 
 
    flex: 1; 
 
    height: 100%; 
 
} 
 

 
.modal { 
 
\t display: flex; 
 
\t position: absolute; 
 
\t justify-content: center; 
 
\t left: 0; 
 
\t top: 0; 
 
\t width: 100%; 
 
\t height: 100%; 
 
\t overflow: auto; 
 
\t background-color: rgba(0,0,0, 0.5); 
 
} 
 

 
/* Modal Content */ 
 
.modal-content { 
 
\t align-self: center; 
 
\t background-color: red; 
 
\t margin: 50px; 
 
\t border: 1px solid #888; 
 
\t width: 80%; 
 
\t height: 100px; 
 
} 
 

 
#other { 
 
    display: inline-block; 
 
    width: 100px; 
 
    height: 100px; 
 
    background-color: black; 
 
    margin: 50px; 
 
}
<div> 
 
<div class="container"> 
 
    <div class="content1"> 
 
    </div> 
 
    <div class="content2"> 
 
    </div> 
 
    <div class="content3"> 
 
    </div> 
 
    <div class="modal"> 
 
\t <div class="modal-content"> 
 
\t <p>Card 1 Modal</p> 
 
\t </div> 
 
    </div> 
 
</div> 
 
<div id="other"> 
 
    something else 
 
</div> 
 
</div>

+0

Извините, это не работало в моем случае –

+0

Почему? В этом случае мне что-то не хватает. Может быть, вам нужно вызвать этот div, когда вы нажмете на конкретный div, не так ли? –

+0

Вот как это выглядит. https://s30.postimg.org/dkd4mxr5d/Example.png –

0

Это не должно быть необходимым принять модальные дивы за пределами вложенными дивы, если их positionfixed является:

#container { 
 
    width: 100%; 
 
    height: 100%; 
 
    display: flex; 
 
    flex-direction: row; 
 
    justify-content: space-around; 
 
} 
 

 
.card { 
 
    margin-top: 30px; 
 
    background-color: rebeccapurple; 
 
    height: 300px; 
 
    border: 1px solid black; 
 
    width: 30%; 
 
} 
 

 
.modal { 
 
    display: none; 
 
    position: fixed; 
 
    z-index: 1; 
 
    padding-top: 100px; 
 
    left: 0; 
 
    top: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    overflow: auto; 
 
/*  background-color: rgb(0,0,0); */ 
 
} 
 

 
.modal-open { 
 
    display: block; 
 
} 
 

 
/* Modal Content */ 
 
.modal-content { 
 
    background-color: #fefefe; 
 
    margin: auto; 
 
    padding: 20px; 
 
    border: 1px solid #888; 
 
    width: 80%; 
 
}
<div id="container"> 
 
    <div class="card"> 
 
    <div class="modal"> 
 
     <div class="modal-content"> 
 
     <p>Card 1 Modal</p> 
 
     </div> 
 
    </div> 
 
    </div> 
 
    <div class="card"> 
 
    <div class="modal"> 
 
     <div class="modal-content"> 
 
     <p>Card 2 Modal</p> 
 
     </div> 
 
    </div> 
 
    </div> 
 
    <div class="card"> 
 
    <div class="modal modal-open"> 
 
     <div class="modal-content"> 
 
     <p>Card 3 Modal</p> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

0

Попробуйте этот стиль. Я исправлю проблему.

https://jsfiddle.net/12q1y6y7/1/

.modal { 
    position: fixed; 
    z-index: 1; 
    padding-top: 100px; 
    left: 0; 
    top: 0; 
    width: 100%; 
    overflow: auto; 
    background-color: rgba(0,0,0, 0.5); 
    position:inherit; 
} 

/* Modal Content */ 
.modal-content { 
    background-color: #fefefe; 
    margin: auto; 
    padding: 20px; 
    border: 1px solid #888; 
    width: 80%; 
} 

.third { 
    width: 30%; 
    height: 200px; 
    float: left; 
    border: 1px solid red; 
    postition: relative; 
} 
+0

Спасибо, mohammad, но дважды написал свойство position; так же хороша, как и запись позиции: inherit; однажды –

+0

это не сработало ... мой родительский контейнер модального окна имеет абсолютное позиционирование, –

+0

Вы проверили ссылку? –