html - 如何从 W3 向下拉菜单添加过渡
问题描述
我正在尝试根据 W3 的示例制作一个带有过渡的下拉菜单。我将它用作下拉菜单,但似乎无法添加过渡。我希望下拉菜单放松。
我已经尝试添加transition: all 0.3s;
到.dropdown-content
课程中。我还研究了许多其他下拉示例,但都没有找到答案。
function myFunction() {
var x = document.getElementById("myTopnav");
if (x.className === "topnav") {
x.className += " responsive";
} else {
x.className = "topnav";
}
}
.dropbtn:hover {
transform: scale(1.02);
color: gray !important;
transition: all 0.5s ease;
}
.topnav a:hover {
transform: scale(1.02);
color: gray;
}
@media screen and (min-width: 769px) {
.topnav {
overflow: hidden;
margin-top: 3em;
padding-top: 0.5em;
display: inline;
float: left;
margin-right: 3.5%;
margin-left: 0;
margin-right: 0;
float: right;
text-align: right;
clear: right;
margin-top: 3em;
padding-top: 1em;
padding-bottom: 0.5em;
}
.topnav a {
float: left;
padding-bottom: 2em;
}
.dropdown:hover .dropdown-content {
display: flex;
border-bottom: 2px solid #d51045;
border-top: 2px solid #d51045;
}
}
@media screen and (max-width: 769px) {
.topnav {
position: relative;
padding-bottom: 1em;
padding-top: 1em;
}
.topnav .icon {
position: absolute;
right: 0;
top: 0;
}
.topnav a {
float: none;
display: block;
text-align: center;
}
.topnav .dropdown {
float: none;
}
.topnav .dropdown-content {
position: relative;
float: none;
text-align: center;
}
.topnav .dropdown .dropbtn {
display: block;
width: 100%;
text-align: center;
}
.dropdown-content a {
float: none !important;
text-align: center !important;
}
.dropdown:hover .dropdown-content {
display: block;
}
}
.topnav a {
display: block;
text-align: center;
padding: 14px 16px;
text-decoration: none;
text-transform: uppercase;
font-weight: 600;
font-size: 14px;
color: #444444;
}
.topnav .icon {
display: none;
}
.dropdown {
float: left;
overflow: hidden;
}
.dropdown .dropbtn {
border: none;
outline: none;
padding: 14px 16px;
background-color: white;
font-family: inherit;
margin: 0;
text-transform: uppercase;
font-weight: 600;
font-size: 14px;
color: #444444;
transition: color .2s ease-in;
}
.dropdown-content {
display: none;
/*box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);*/
z-index: 1;
background-color: white;
position: fixed;
top: auto;
right: 0;
width: 100%;
border-bottom: 2px solid #d51045;
border-top: 2px solid #d51045;
}
.dropdown-content a {
float: right;
padding: 20px 23px;
text-decoration: none;
display: block;
text-align: left;
margin: 0 auto;
}
body.home .site-header .container {
padding-bottom: 1em;
}
img.nav-img {
display: block;
margin-left: auto;
margin-right: auto;
}
<div class="topnav" id="myTopnav">
<a href="#home" class="active"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png" height="22" class="nav-img">Calendar</a>
<div class="dropdown">
<button class="dropbtn"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png" height="22" class="nav-img">About
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
<a href="#">Musicians</a>
<a href="#">More</a>
</div>
</div>
<div class="dropdown">
<button class="dropbtn"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png" height="22" class="nav-img">Tickets
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
<a href="#">Series Subscriptions</a>
<a href="#">More</a>
</div>
</div>
<div class="dropdown">
<button class="dropbtn"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png" height="22" class="nav-img">Community
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
<a href="#">Learning Programs</a>
</div>
</div>
<div class="dropdown">
<button class="dropbtn"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png" height="22" class="nav-img">Visit
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
<a href="#">Seating Charts</a>
<a href="#">Frequently Asked Questions</a>
</div>
</div>
<div class="dropdown">
<button class="dropbtn"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png" height="22" class="nav-img">Give
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
<a href="#">Ways to Give</a>
<a href="#">More</a>
</div>
</div>
<a href="#" class="active"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png" height="22" class="nav-img">Shop</a>
<a href="javascript:void(0);" style="font-size:15px;" class="icon" onclick="myFunction()">☰</a>
</div>
我希望下拉菜单能够平滑过渡,类似于 laphil.org 菜单。
解决方案
问题出在 CSS 显示属性中。您想为下拉外观设置动画,但不能通过显示来实现。相反,我建议您使用可见性和不透明度。
.dropdown-content {
display: flex;
visibility: hidden;
opacity: 0;
}
.dropdown:hover .dropdown-content {
/*display: flex;*/
visibility: visible;
opacity: 1;
transition: all 0.3s linear;
}
推荐阅读
- r - 带因子的 R 回归:获取级别的系数,而不是与 Intercept 的差异?
- solr - 在最近的 solr-jetty 更新后,如何让 Solr 和 CKAN 在 Ubuntu 18.04 上运行?
- javascript - 如何将 javascript 函数发布到 html 输入字段中
- java - 如何将事件从一个链表移动到另一个链表
- r - 在 facet_grid 中垂直居中多行、部分斜体的条形标签
- reactjs - ReactJs 类桌面组件库示例
- sql - BigQuery 将列表连接成带引号的字符串
- windows - 如何从 Windows 主机连接到 Linux docker 容器的暴露端口
- c# - 如何将 Unity AudioClip 转换为适合 Firebase 存储上传的字节数组
- asp.net-mvc - 如何在视图中显示用户角色?