我需要在我的网站上添加一个this w3school example之类的模式框。
一切正常,除非模态的内容变得非常“高”(例如,要显示很多行)。
我一直在尝试在此处插入overflow:auto
以使其可滚动,但是我没有成功,并且在这种情况下无法关闭模式。
我想一种方法是在内容太高时将约束设置在modal-content
顶部,以使其停留在页面顶部,但我真不知道如何。
这里有一些代码可以让您了解我的问题:
// Get the modal
var modal = document.getElementById('myModal');
// Get the button that opens the modal
var btn = document.getElementById("myBtn");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
body {font-family: Arial, Helvetica, sans-serif;}
/* The Modal (background) */
.modal {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
-webkit-animation-name: fadeIn; /* Fade in the background */
-webkit-animation-duration: 0.4s;
animation-name: fadeIn;
animation-duration: 0.4s
}
/* Modal Content */
.modal-content {
position: fixed;
bottom: 0;
background-color: #fefefe;
width: 100%;
-webkit-animation-name: slideIn;
-webkit-animation-duration: 0.4s;
animation-name: slideIn;
animation-duration: 0.4s
}
/* The Close Button */
.close {
color: white;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: #000;
text-decoration: none;
cursor: pointer;
}
.modal-header {
padding: 2px 16px;
background-color: #5cb85c;
color: white;
}
.modal-body {padding: 2px 16px;}
.modal-footer {
padding: 2px 16px;
background-color: #5cb85c;
color: white;
}
/* Add Animation */
@-webkit-keyframes slideIn {
from {bottom: -300px; opacity: 0}
to {bottom: 0; opacity: 1}
}
@keyframes slideIn {
from {bottom: -300px; opacity: 0}
to {bottom: 0; opacity: 1}
}
@-webkit-keyframes fadeIn {
from {opacity: 0}
to {opacity: 1}
}
@keyframes fadeIn {
from {opacity: 0}
to {opacity: 1}
}
<h2>Bottom Modal</h2>
<!-- Trigger/Open The Modal -->
<button id="myBtn">Open Modal</button>
<!-- The Modal -->
<div id="myModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<h2>Modal Header</h2>
</div>
<div class="modal-body">
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
</div>
<div class="modal-footer">
<h3>Modal Footer</h3>
</div>
</div>
</div>
编辑
快速更新:我最终使用了amazing CSS flexbox
es,现在我的代码工作得更好了,看起来像这样:
// Get the modal
var modal = document.getElementById('myModal');
// Get the button that opens the modal
var btn = document.getElementById("myBtn");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal.style.display = "flex";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
body {font-family: Arial, Helvetica, sans-serif;}
/* The Modal (background) */
.modal {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
-webkit-animation-name: fadeIn; /* Fade in the background */
-webkit-animation-duration: 0.4s;
animation-name: fadeIn;
animation-duration: 0.4s
}
/* Modal Content */
.modal-content {
background-color: #fefefe;
width: 100%;
display:flex;
flex-direction: column;
margin-top: auto;
-webkit-animation-name: slideIn;
-webkit-animation-duration: 0.4s;
animation-name: slideIn;
animation-duration: 0.4s
}
/* The Close Button */
.close {
color: white;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: #000;
text-decoration: none;
cursor: pointer;
}
.modal-header {
padding: 2px 16px;
background-color: #5cb85c;
color: white;
}
.modal-body {
padding: 16px 16px;
max-height:250px;
overflow: auto; /* Enable scroll if needed *
}
.modal-footer {
padding: 2px 16px;
background-color: #5cb85c;
color: white;
}
/* Add Animation */
@-webkit-keyframes slideIn {
from {bottom: -300px; opacity: 0}
to {bottom: 0; opacity: 1}
}
@keyframes slideIn {
from {bottom: -300px; opacity: 0}
to {bottom: 0; opacity: 1}
}
@-webkit-keyframes fadeIn {
from {opacity: 0}
to {opacity: 1}
}
@keyframes fadeIn {
from {opacity: 0}
to {opacity: 1}
}
<h2>Bottom Modal</h2>
<!-- Trigger/Open The Modal -->
<button id="myBtn">Open Modal</button>
<!-- The Modal -->
<div id="myModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<h2>Modal Header</h2>
</div>
<div class="modal-body">
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
</div>
</div>
</div>
答案 0 :(得分:1)
// Get the modal
var modal = document.getElementById('myModal');
// Get the button that opens the modal
var btn = document.getElementById("myBtn");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks the button, open the modal
btn.onclick = function() {
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
body {font-family: Arial, Helvetica, sans-serif;}
/* The Modal (background) */
.modal {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
-webkit-animation-name: fadeIn; /* Fade in the background */
-webkit-animation-duration: 0.4s;
animation-name: fadeIn;
animation-duration: 0.4s
}
/* Modal Content */
.modal-content {
position:relative;
bottom: 0;
background-color: #fefefe;
width: 100%;
-webkit-animation-name: slideIn;
-webkit-animation-duration: 0.4s;
animation-name: slideIn;
animation-duration: 0.4s
}
/* The Close Button */
.close {
color: white;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: #000;
text-decoration: none;
cursor: pointer;
}
.modal-header {
padding: 2px 16px;
background-color: #5cb85c;
color: white;
}
.modal-body {padding: 2px 16px;}
.modal-footer {
padding: 2px 16px;
background-color: #5cb85c;
color: white;
}
/* Add Animation */
@-webkit-keyframes slideIn {
from {bottom: -300px; opacity: 0}
to {bottom: 0; opacity: 1}
}
@keyframes slideIn {
from {bottom: -300px; opacity: 0}
to {bottom: 0; opacity: 1}
}
@-webkit-keyframes fadeIn {
from {opacity: 0}
to {opacity: 1}
}
@keyframes fadeIn {
from {opacity: 0}
to {opacity: 1}
}
<h2>Bottom Modal</h2>
<!-- Trigger/Open The Modal -->
<button id="myBtn">Open Modal</button>
<!-- The Modal -->
<div id="myModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<h2>Modal Header</h2>
</div>
<div class="modal-body">
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
</div>
<div class="modal-footer">
<h3>Modal Footer</h3>
</div>
</div>
</div>
只需添加少量的CSS,就可以完成...
.modal-content {
position:relative;
}
注意:如果内容大于屏幕高度,这将允许滚动条。
答案 1 :(得分:1)
如下更新modal-body
CSS类
.modal-body {padding: 2px 16px; height: 250px; overflow: auto}
答案 2 :(得分:-1)
您将溢流放在哪里? 我尝试在 .modal-content 上添加 overflow-x:scroll; 。 它在我这边工作,模态正常关闭。只需调整高度,顶部或您想要的任何位置(如果这也对您有效)。
欢呼。