如果内容太高,则无法关闭底部模式框

时间:2018-10-12 08:04:10

标签: javascript html css

我需要在我的网站上添加一个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">&times;</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 flexboxes,现在我的代码工作得更好了,看起来像这样:

// 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">&times;</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>

3 个答案:

答案 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">&times;</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; 。 它在我这边工作,模态正常关闭。只需调整高度,顶部或您想要的任何位置(如果这也对您有效)。

欢呼。