如何为自定义 select 制作下拉 CSS 动画?
How to make a dropdown CSS animation for custom select?
我正在用 javascript 制作一个 custom select。问题是,我想让它在您单击 select 框时,选项应该 下拉 ,而不仅仅是出现。
这个项目相当大(可能会小很多,但我正在尝试尽可能多地自己完成),所以我将只留下一点代码(如果您需要更多,请告诉我,我很乐意提供)。
下面是使选项出现的流程:
单击 select 框时,它会向包含使其成为 display: block;
.
的选项的元素添加 CSS class
这里是select盒子本身的CSSclass:
.custom-select-outer-box {
width: 100%; /* of its wrapper */
padding: 4px;
border: 1px solid black;
user-select: none;
position: relative;
cursor: pointer;
}
这里是“选项”元素的代码:
.custom-select-options {
position: absolute;
display: none;
margin: 0;
padding: 0;
border: 2px solid black;
border-top: 0;
width: 100%;
max-height: 200px;
overflow-y: auto;
}
最后,我在单击 select 框时添加的 CSS class:
.custom-select-show {
display: block;
}
问题是我不希望它只是一个 display: block;
,因为那样它就会出现。我想让它滑下来。
我试过制作一个 CSS 动画,它是这样的:
@keyframes slide-down {
0% {
opacity: 0;
transform: translateY(-200px); /* this height brings it to the exact position for the drop down */
}
100% {
opacity: 1;
transform: translateY(0);
}
}
但是像这样添加时,下拉菜单甚至在下拉之前就可见。像 this.
我希望尽快得到答复,如果我遗漏了任何信息或不够清楚,请告诉我。
提前致谢。
不要使用 translateY,因为您更改了列表在屏幕上的位置。隐藏列表时,将高度设置为最小值或零,然后当用户单击按钮时,列表将“向下滚动”到定义的高度。
function myFunction() {
document.getElementById("list-roll-down").classList.toggle("is-active");
}
#list-roll-down{
width: 200px;
height: 20px;
background-color: green;
opacity: 0.2;
transition: all .4s;
}
#list-roll-down.is-active{
height: 150px;
opacity:1;
}
<button onclick="myFunction()">Click</button>
<div id="list-roll-down"></div>
我正在用 javascript 制作一个 custom select。问题是,我想让它在您单击 select 框时,选项应该 下拉 ,而不仅仅是出现。
这个项目相当大(可能会小很多,但我正在尝试尽可能多地自己完成),所以我将只留下一点代码(如果您需要更多,请告诉我,我很乐意提供)。
下面是使选项出现的流程:
单击 select 框时,它会向包含使其成为 display: block;
.
这里是select盒子本身的CSSclass:
.custom-select-outer-box {
width: 100%; /* of its wrapper */
padding: 4px;
border: 1px solid black;
user-select: none;
position: relative;
cursor: pointer;
}
这里是“选项”元素的代码:
.custom-select-options {
position: absolute;
display: none;
margin: 0;
padding: 0;
border: 2px solid black;
border-top: 0;
width: 100%;
max-height: 200px;
overflow-y: auto;
}
最后,我在单击 select 框时添加的 CSS class:
.custom-select-show {
display: block;
}
问题是我不希望它只是一个 display: block;
,因为那样它就会出现。我想让它滑下来。
我试过制作一个 CSS 动画,它是这样的:
@keyframes slide-down {
0% {
opacity: 0;
transform: translateY(-200px); /* this height brings it to the exact position for the drop down */
}
100% {
opacity: 1;
transform: translateY(0);
}
}
但是像这样添加时,下拉菜单甚至在下拉之前就可见。像 this.
我希望尽快得到答复,如果我遗漏了任何信息或不够清楚,请告诉我。
提前致谢。
不要使用 translateY,因为您更改了列表在屏幕上的位置。隐藏列表时,将高度设置为最小值或零,然后当用户单击按钮时,列表将“向下滚动”到定义的高度。
function myFunction() {
document.getElementById("list-roll-down").classList.toggle("is-active");
}
#list-roll-down{
width: 200px;
height: 20px;
background-color: green;
opacity: 0.2;
transition: all .4s;
}
#list-roll-down.is-active{
height: 150px;
opacity:1;
}
<button onclick="myFunction()">Click</button>
<div id="list-roll-down"></div>