css 当弹出窗口超出窗口时,浏览器窗口中没有垂直滚动

gk7wooem  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(159)

下面是我的测试代码
https://jsfiddle.net/wo58xseb/

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, 
initial-scale=1">
<style>

    .popup {

   position: relative;
   display: inline-block;
   }

   .popup .popuptext {
  left:50%;
  top:200px;
  margin-left:-300px;
  visibility: hidden;
  width: 600px;
  background-color: #555;
  color: #000000;
  text-align: center;
  border-radius: 6px;
  padding: 8px 0;
  position: fixed;
  z-index: 1;
  height: auto; 

   }
  .popup .show {
  visibility: visible;
  }

  * { box-sizing: border-box; }
  body {
     font: 16px Arial;

   }

   .button_add_name
  {
    display:block;
    margin-right:50%;
    margin-left:50%;
    margin-bottom:1%;
  }

    .button_add_tag
    {
       margin-bottom:1%;
    }

     </style>
    </head>
    <body style="text-align:center">

    <h2>Popup</h2>
    <div class="popup" >
    <button type="button" id = "5" 
    onclick="myFunction()">Add Tag</button>
      <span class="popuptext" id="myPopup">
    <button type="button" class = "button_add_name" id = 
    "6">TAG</button>
   <button class = "button_add_tag" style="background-color: 
    #f44336" type="button" id = "5" 
    onclick="myclose()">Add</button>
      </span>
    </div>

<div> This is main text</div>
<script>
// When the user clicks on div, open the popup
function myFunction() {
  var popup = document.getElementById("myPopup");
  popup.onclick = "";
  if(!popup.classList.contains("show"))
  popup.classList.toggle("show");

  if(this.id == 5)
  popup.classList.toggle("show");
}
function myclose() {
  var popup = document.getElementById("myPopup");
  popup.classList.toggle("show");
}

function add_items()
{
    var b = document.getElementById("myPopup");
    for(i = 0;i<600;++i)
    b.innerHTML += "<button class = \"button_add_tag\"         type=\"button\"  onclick=\"myclose()\">JS</button>";
}

add_items();
</script>
</body>
</html>

我创建了一个简单的弹出窗口(div)当按钮被按下。然后我用java脚本填充按钮。问题是当弹出窗口太大时,浏览器窗口不显示垂直滚动条。弹出窗口位于窗口下方,底部内容被隐藏。我搜索了互联网,但大多数都描述了如何在弹出窗口中添加滚动条。我不想这样。我需要一个垂直滚动条在浏览器窗口弹出时,div到外面的浏览器窗口。我该怎么做?
x一个一个一个一个x一个一个二个一个x一个一个三个一个

vsdwdz23

vsdwdz231#

除了在弹出窗口中放置滚动条之外,还可以让弹出窗口作为一个整体自行滚动。材质UI的这些示例很好地显示了不同之处

HTML

作为一个一般性的想法实现这一点需要以下html结构:

<body>
  <div class="backdrop">
    <div class="scroller">
      <div class="content">
        <p>This is the cool dialog! ...</p>
      </div>
    </div>
  </div>
  <main>
    <h1>Cool Title</h1>
    <p>This is the main webpage content</p>
  </main>
</body>

CSS

然后,背景被给定为position: fixed,滚动条被给定为height: 100%; overflow: hidden auto;,并且内容被给定为position: relative; overflow-y: auto;

CSS和JS

最后,弹出窗口在未打开时应该为display: none,而在打开时,主体应该切换为overflow: hidden,以便用户在对话框打开时无法继续滚动主体。

抛光

添加更多的美学风格和JavaScript来处理打开和关闭对话框,我们得到了这个概念的证明...
CodeSandox

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<style>
    body {
        font-size: 2rem;
        margin: 0;
    }
    .colors {
        color: rgb(220,220,220);
        background-color: rgb(50,50,50);
        padding: 1rem;
    }
    .no-scroll {
        overflow: hidden;
    }
    .backdrop {
        position: fixed;
        z-index: 100;
        inset: 0px;
        display: block;
        background-color: rgba(150,150,150,0.5);
    }
    .hidden {
        display: none;
    }
    .scrollBody {
        height: 100%;
        outline: 0px;
        overflow: hidden auto;
        text-align: center;
    }
    .content {
        background-color: rgb(220,220,220);
        color: rgb(50,50,50);
        border-radius: 4px;
        box-shadow: rgb(0 0 0 / 20%) 0px 11px 15px -7px, rgb(0 0 0 / 14%) 0px 24px 38px 3px, rgb(0 0 0 / 12%) 0px 9px 46px 8px;
        margin: 32px;
        position: relative;
        overflow-y: auto;
        display: inline-block;
        vertical-align: middle;
        text-align: left;
        max-width: 600px;
        padding: 1rem;
    }
    input[type="button"] {
        padding: 0.5rem 1.5rem;
        cursor: pointer;
    }
</style>

<script>
    function openPopUp() {
        document.getElementsByClassName("backdrop")?.[0]?.classList?.remove("hidden");
        document.getElementsByTagName("body")?.[0]?.classList?.add("no-scroll");
    }
    function closePopUp() {
        document.getElementsByClassName("backdrop")?.[0]?.classList.add("hidden");
        document.getElementsByTagName("body")?.[0]?.classList?.remove("no-scroll");
    }
</script>

<body>
    <div class="backdrop hidden" role="dialog" aria-modal="true">
        <div class="scrollBody">
            <div class="content">
                <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sapiente ab ex ea nemo reiciendis saepe dicta distinctio porro? Nam consectetur suscipit veritatis nulla facilis nihil necessitatibus provident reiciendis quam sint.</p>
                <p>Cupiditate nisi repellat nulla voluptatibus quam deserunt quisquam consequatur assumenda quo possimus, reiciendis voluptas. Voluptatum quam, est omnis repellendus voluptate deleniti laborum voluptates pariatur debitis quaerat fuga dicta quis recusandae?</p>
                <p>Quibusdam aut minus omnis! Nostrum, architecto. Itaque error magni veniam incidunt iste nesciunt eius. Provident voluptates in porro, odio fugiat alias deserunt facilis a fuga inventore aspernatur. Recusandae, nihil distinctio!</p>
                <p>Recusandae eum culpa illo? Quo nemo quam veritatis molestiae reprehenderit perferendis, eaque placeat distinctio quae optio, aperiam hic, voluptate fugit illo beatae iure tempore saepe. Minima, labore? Rerum, provident incidunt!</p>
                <p>Fuga maxime repudiandae totam neque corrupti enim officia, corporis necessitatibus, inventore hic velit consectetur, earum asperiores cum deleniti! Corrupti consequuntur quo necessitatibus non pariatur deleniti a dolor sequi laudantium aliquam?</p>
                <input type="button" value="Close" onclick="closePopUp()" />
            </div>
        </div>
    </div>
    <div class="colors">
        <input type="button" value="Open Pop-up" onclick="openPopUp()" />
        <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eius corporis itaque laborum tenetur et est voluptates. Maxime corrupti a excepturi, id molestiae sapiente iure laborum! Quos quae quam perferendis quasi!</p>
        <p>Ratione impedit iure ab ipsa eum distinctio laboriosam aut quod neque. Consequuntur doloremque maiores, repudiandae, sit voluptate commodi quibusdam perferendis, praesentium inventore a ad rem non aspernatur hic atque quas!</p>
        <p>Ullam iure sint qui error, aut ducimus fugiat. Cupiditate eligendi quas nulla labore, nam, dolor culpa aliquam ad architecto dolorum saepe libero pariatur, illo unde qui hic vel! Aut, eum.</p>
        <p>Porro accusantium incidunt, libero quisquam quos maiores deserunt quas veniam nemo earum quo sit architecto at minus minima cum optio cumque voluptatem labore iure. Quibusdam quidem repudiandae autem cum eos.</p>
        <p>Doloribus mollitia, cum aliquid asperiores dolore a repudiandae eligendi sequi vel cupiditate impedit maxime vitae quisquam in cumque! Error necessitatibus, veritatis repellat a qui quas laudantium beatae magnam molestiae expedita?</p>
        <p>Aperiam architecto qui debitis molestiae libero, voluptatem eius maiores, vel praesentium nobis eaque temporibus odio pariatur molestias iure accusamus? Quibusdam, laborum. Nam, odit velit a similique fuga atque. Doloremque, labore!</p>
        <p>Eligendi veritatis, assumenda natus dolorum harum numquam ipsa blanditiis eaque libero aspernatur nulla incidunt pariatur inventore eum! At voluptatem odit quasi incidunt impedit quae expedita aliquid, nam facilis dicta velit?</p>
        <p>Delectus, dolore. Cumque commodi a voluptates eos, ad aperiam corporis asperiores accusantium, facere soluta, perferendis ipsam quam magni unde itaque iusto atque. Iste quibusdam adipisci nihil qui sint alias ipsum.</p>
        <p>Obcaecati unde beatae quo quis, architecto totam nobis id possimus odio fugiat reprehenderit iste eum eligendi. Ipsum rem assumenda voluptate iste nesciunt alias quos dicta eaque dignissimos. Perferendis, illo tenetur!</p>
        <p>Voluptate distinctio magni blanditiis voluptatem nulla ipsa provident, quod eligendi, veritatis sit velit quis magnam vitae explicabo debitis corrupti, dolor ad deserunt non quibusdam quia. Mollitia maiores quisquam provident vero.</p>
        <p>Aliquam recusandae quis soluta, ipsa expedita voluptas perferendis molestias a quibusdam voluptatum velit obcaecati nemo assumenda quae ipsam eaque odio repellat eum architecto non quam sit provident id! Dolore, iure.</p>
        <p>Quia dicta ipsa commodi deserunt, pariatur delectus reprehenderit nesciunt. Error, quod, repellendus voluptates sit quas corrupti molestiae ratione odit quasi corporis nesciunt rerum facere mollitia delectus laborum expedita assumenda fugiat.</p>
        <p>Saepe cum nemo tenetur dolore, voluptatem ipsum quidem ad voluptate, voluptatum similique sint maiores autem reiciendis quo repellat! Amet ipsam consequatur nesciunt laudantium quam quasi dignissimos sint ea eligendi deserunt.</p>
        <p>Corrupti architecto corporis obcaecati a quisquam deleniti unde mollitia eaque veniam voluptate, optio tempora eos voluptatem voluptatum est autem nesciunt magni laboriosam quidem, deserunt dicta? Cumque vitae esse facilis eos?</p>
        <p>Non saepe, commodi quis aspernatur ut culpa deserunt? Exercitationem quibusdam assumenda nihil officiis quam, obcaecati fuga est quos sequi sint! Nobis harum at ipsa suscipit voluptas totam deleniti impedit molestiae?</p>
        <p>Nesciunt, sapiente? Corporis adipisci neque dolores dolor blanditiis, ducimus alias eum quis, dignissimos reiciendis architecto esse suscipit at. Aut quibusdam omnis rem. Aperiam molestias ut, distinctio cupiditate explicabo molestiae aliquam.</p>
        <p>Quas modi voluptas adipisci atque, magnam beatae voluptates totam, ipsa labore laboriosam a. Provident qui corporis ea nobis nostrum ducimus, odit, repellat quia illum excepturi voluptate officia? Excepturi, officiis voluptatum?</p>
        <p>Magnam, temporibus officiis. Consectetur dolor quibusdam deserunt rerum sed officia incidunt quo ea magni nobis mollitia autem harum animi quaerat consequuntur laudantium, asperiores cum fuga beatae nihil neque explicabo nesciunt?</p>
        <p>Illum delectus culpa laudantium atque sit, facilis quia molestias laborum dolor aliquam saepe error quo, in repellat voluptatibus harum, a ducimus perspiciatis ad. Eos totam qui labore sit hic eaque.</p>
        <p>Quasi, provident vel. Nemo facere minima aut repellat, perferendis officiis perspiciatis ratione? Esse dolorum provident, dolorem ipsa quod atque eius voluptate tempora ducimus quas omnis eos eveniet voluptatibus nisi et!</p>
    </div>
</body>
</html>

相关问题