由于溢出属性,CSS下拉菜单没有显示

CSS dropdown not showing due to overflow property

本文关键字:下拉菜单 CSS 显示 属性 于溢出 溢出      更新时间:2023-09-26

我现在正在制作一个Angular/Rails应用程序。我在屏幕顶部配置了一个标题,并在img上放置了一个下拉功能。我想让下拉菜单显示用户信息。比如谷歌。由于page-header中的overflow: auto的CSS属性,下拉框不显示。然而,我不能把这个属性拿出来,因为如果我把它拿出来,它会杀死头部的CSS。我怎么能覆盖它只是为dropdown CSS?

以下是我的代码:

<header class="page-header page-header--fixed">
        <a href="/" class="page-header-logo"><img src="/assets/logo-green.svg" alt="logo"></a>
        <div class="dropdown">
        <img src="/assets/user_icon.svg" alt="User" onclick="myFunction()">
            <div id="myDropdown" class="dropdown-content">
                <a href="#home">Home</a>
                <a href="#about">About</a>
                <a href="#contact">Contact</a>
            </div>
        </div>
</header>
CSS

.page-header {
    overflow: auto;
        /*height:50px;*/
    padding: 8px 20px;
    background-color: #07b1d1;
    box-shadow: 0 3px 17px 0 rgba(0, 0, 0, 0.1);
}
.page-header--fixed {
    position: relative;
    width: 100%;
    left: 0;
    top: 0;
    z-index: 100;
    border-top: 0;
    background-color: white;
}
.dropdown {
    float: right;
    position: relative;
    display: inline-block;
}
.dropdown-content {
    z-index: 200;
    display: none;
    position: absolute;
    background-color: #F5F8F9;
    min-width: 160px;
    overflow: auto;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
    right: 0;
}
.dropdown-content a {
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}
.dropdown a:hover {background-color: #f1f1f1}
.show {display:block;}
Javascript:

function myFunction() {
    document.getElementById("myDropdown").classList.toggle("show");
}
// Close the dropdown if the user clicks outside of it
window.onclick = function(event) {
  if (!event.target.matches('.dropbtn')) {
    var dropdowns = document.getElementsByClassName("dropdown-content");
    var i;
    for (i = 0; i < dropdowns.length; i++) {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}

试试这个:

var x= document.getElementsByClassName("dropdown-content");
x.style.overflow= "auto";

overflow:hidden添加到.dropdown-content类的css规则中。

.dropdown-content {
        z-index: 200;
        display: none;
        position: absolute;
        background-color: #F5F8F9;
        min-width: 160px;
        overflow: auto;
        box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
        right: 0;
        overflow:hidden;
    }