【发布时间】:2021-06-27 03:32:28
【问题描述】:
这里我有一个完全使用 vanilla JavaScript 制作的下拉菜单。 但是当我点击下拉按钮时,它会移动其他元素。
let dropdownBtn = document.querySelector("button.dropdown-btn");
let itemListWrapper = document.querySelector("div.item-list-wrapper");
dropdownBtn.addEventListener("click", () => {
if (itemListWrapper.style.display === "none") {
itemListWrapper.style.display = "block";
} else {
if (itemListWrapper.style.display === "block" || itemListWrapper.style.display === "") {
itemListWrapper.style.display = "none";
}
}
});
function continuouslyClickDropdownBtn() {
dropdownBtn.click();
setTimeout(() => {
continuouslyClickDropdownBtn();
}, 750);
}
continuouslyClickDropdownBtn();
.container {
background-color: lightblue;
height: 200px;
padding: 0 2em;
}
.dropdown-wrapper {
width: fit-content;
background-color: hsla(0, 0%, 95%, 0.9);
padding: 0.3em;
border-radius: 0.3em;
position: relative;
}
.dropdown-btn {
border-radius: 0.3em;
width: 100%;
height: 1.75em;
font-size: 1.25em;
cursor: pointer;
}
.item-list-wrapper {
margin-top: 0.5em;
}
.dropdown-item-list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 0.1em
}
.dropdown-item {
font-size: 1em;
width: 100%;
padding: 0.2em 0;
display: flex;
flex-direction: row;
cursor: pointer;
}
.dropdown-item:hover {
background-color: hsla(0, 0%, 80%, 1);
font-weight: bold;
}
.dropdown-item span {
flex-grow: 1;
padding: 0 1empx;
}
<div class="container">
<p>upper text</p>
<div class="dropdown-wrapper">
<button class="dropdown-btn">Media Quality</button>
<div class="item-list-wrapper">
<ul class="dropdown-item-list">
<li class="dropdown-item">
<span>360p</span>
</li>
<li class="dropdown-item">
<span>720p</span>
</li>
<li class="dropdown-item">
<span>1080p</span>
</li>
</ul>
</div>
</div>
<p>bottom text</p>
</div>
我尝试添加这个 CSS:
.item-list-wrapper {
margin-top: 0.5em;
position: absolute;
}
然后它会从所有项目中删除背景颜色。
即使将 background-color: hsla(0, 0%, 95%, 0.9); 添加到类中,它也只会将其添加到项目的宽度中。
一旦打开,我无法让背景颜色环绕整个下拉菜单。
如何解决这个问题?
【问题讨论】:
标签: javascript html css drop-down-menu