Bootstrap 4导航折叠动画在打开时停止一瞬间,确定关闭

问题描述 投票:0回答:1

当您展开菜单时,它会向下滑动,停止一瞬间,然后继续。向后滑动似乎很好,但打开时并不顺畅。

.navbar {
  padding: 0;
  float: right;
}

.navbar.fixed-top {
  left: auto;
}

.navbar-menu {
  position: relative;
  padding: 12px 17px;
  margin: 20px;
  background: #FFFFFF;
  cursor: pointer;
  z-index: 20;
  height: auto;
  border-radius: 2rem;
}

@media (max-width: 767.98px) {
  .navbar-menu {
    margin: 10px;
  }
}

.navbar-menu .title {
  font-size: 14px;
  font-weight: 700;
  color: #351C81;
  text-transform: uppercase;
  margin-right: 35px;
  transition: all 0.5s;
  filter: alpha(opacity=100);
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
  opacity: 1;
}

@media (max-width: 767.98px) {
  .navbar-menu .title {
    filter: alpha(opacity=0);
    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
    opacity: 0;
    margin-right: -17px;
  }
}

.navbar-menu.open .title {
  transition: all 0.5s;
  filter: alpha(opacity=0);
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
  opacity: 0;
  margin-right: -17px;
}

.navbar-menu .navbar-toggler {
  position: absolute;
  top: 15px;
  right: 17px;
  transition: 0.5s ease-in-out;
}

.navbar-menu .navbar-toggler span {
  display: block;
  position: absolute;
  height: 3px;
  width: 100%;
  background: #351C81;
  opacity: 1;
  left: 0;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -ms-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  transition: 0.25s ease-in-out;
}

.navbar-menu .navbar-toggler span:nth-child(1) {
  top: 0px;
}

.navbar-menu .navbar-toggler span:nth-child(2),
.navbar-menu .navbar-toggler span:nth-child(3) {
  top: 6px;
}

.navbar-menu .navbar-toggler span:nth-child(4) {
  top: 12px;
}

.navbar-menu.open .navbar-toggler span:nth-child(1) {
  top: 6px;
  width: 0%;
  left: 50%;
}

.navbar-menu.open .navbar-toggler span:nth-child(2) {
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}

.navbar-menu.open .navbar-toggler span:nth-child(3) {
  -webkit-transform: rotate(-45deg);
  -moz-transform: rotate(-45deg);
  -ms-transform: rotate(-45deg);
  -o-transform: rotate(-45deg);
  transform: rotate(-45deg);
}

.navbar-menu.open .navbar-toggler span:nth-child(4) {
  top: 6px;
  width: 0%;
  left: 50%;
}

.navbar-collapse {
  position: absolute;
  top: 0px;
  bottom: 0px;
  left: 0px;
  right: 0px;
  z-index: 10;
  background-image: linear-gradient(#0B0039, #281663 65%, #2B176B);
  background-repeat: no-repeat;
}

.navbar-collapse .navbar-nav {
  width: 50%;
  margin: 0 auto;
  text-align: center;
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  -moz-transform: translateY(-50%);
  -o-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  transform: translateY(-50%);
  filter: alpha(opacity=0);
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
  opacity: 0;
}

.navbar-collapse .navbar-nav .nav-item {
  border-bottom: 1px solid #D8D8D8;
}

.navbar-collapse .navbar-nav .nav-item:last-child {
  border: none;
}

.navbar-collapse .navbar-nav .nav-item .nav-link {
  font-weight: 800;
  font-size: 20px;
  color: #FFFFFF;
  letter-spacing: 1px;
  padding: 10px 0 10px 0;
}

.navbar-collapse .navbar-nav .nav-item .nav-link:hover {
  color: #68E0CA;
}

.navbar-collapse.show .navbar-nav {
  transition: all 0.25s;
  filter: alpha(opacity=100);
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
  opacity: 1;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>

<nav class="navbar fixed-top" data-aos="fade-left" data-aos-delay="500">
  <div class="navbar-menu" data-toggle="collapse" data-target="#navigation" aria-expanded="false" aria-controls="navigation">
    <span class="title">Menu</span>
    <div class="navbar-toggler">
      <span></span>
      <span></span>
      <span></span>
      <span></span>
    </div>
  </div>
</nav>

<div class="navbar-collapse collapse" id="navigation">
  <ul class="navbar-nav">
    <li class="nav-item active">
      <a class="nav-link" href="#">Home</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="/quiz">Quiz</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="/advice">Advise</a>
    </li>
  </ul>
</div>
javascript jquery css twitter-bootstrap bootstrap-4
1个回答
0
投票

我看到了很多不必要的绝对定位,既有物品填满屏幕又集中在其他元素。这阻止了Bootstrap的切换JS正确识别扩展元素的高度应该是什么。

而不是让.navbar-collapse绝对定位以永远占据你的窗口,它内部的内容应该是你的窗口的高度 - 我在height: 100vh上使用.navbar-nav来做到这一点。

另外,由于.navbar-nav已经是Bootstrap中的display: flex元素,我从中删除了你的绝对定位并添加了justify-content: center以垂直居中其中的列表元素。

这是我对你的CSS改变的差异(你的左边):enter image description here

下面的工作示例:

.navbar {
  padding: 0;
  float: right;
}

.navbar.fixed-top {
  left: auto;
}

.navbar-menu {
  position: relative;
  padding: 12px 17px;
  margin: 20px;
  background: #FFFFFF;
  cursor: pointer;
  z-index: 20;
  height: auto;
  border-radius: 2rem;
}

@media (max-width: 767.98px) {
  .navbar-menu {
    margin: 10px;
  }
}

.navbar-menu .title {
  font-size: 14px;
  font-weight: 700;
  color: #351C81;
  text-transform: uppercase;
  margin-right: 35px;
  transition: all 0.5s;
  filter: alpha(opacity=100);
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
  opacity: 1;
}

@media (max-width: 767.98px) {
  .navbar-menu .title {
    filter: alpha(opacity=0);
    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
    opacity: 0;
    margin-right: -17px;
  }
}

.navbar-menu.open .title {
  transition: all 0.5s;
  filter: alpha(opacity=0);
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
  opacity: 0;
  margin-right: -17px;
}

.navbar-menu .navbar-toggler {
  position: absolute;
  top: 15px;
  right: 17px;
  transition: 0.5s ease-in-out;
}

.navbar-menu .navbar-toggler span {
  display: block;
  position: absolute;
  height: 3px;
  width: 100%;
  background: #351C81;
  opacity: 1;
  left: 0;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -ms-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  transition: 0.25s ease-in-out;
}

.navbar-menu .navbar-toggler span:nth-child(1) {
  top: 0px;
}

.navbar-menu .navbar-toggler span:nth-child(2),
.navbar-menu .navbar-toggler span:nth-child(3) {
  top: 6px;
}

.navbar-menu .navbar-toggler span:nth-child(4) {
  top: 12px;
}

.navbar-menu.open .navbar-toggler span:nth-child(1) {
  top: 6px;
  width: 0%;
  left: 50%;
}

.navbar-menu.open .navbar-toggler span:nth-child(2) {
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  transform: rotate(45deg);
}

.navbar-menu.open .navbar-toggler span:nth-child(3) {
  -webkit-transform: rotate(-45deg);
  -moz-transform: rotate(-45deg);
  -ms-transform: rotate(-45deg);
  -o-transform: rotate(-45deg);
  transform: rotate(-45deg);
}

.navbar-menu.open .navbar-toggler span:nth-child(4) {
  top: 6px;
  width: 0%;
  left: 50%;
}

.navbar-collapse {
  z-index: 10;
  background-image: linear-gradient(#0B0039, #281663 65%, #2B176B);
  background-repeat: no-repeat;
}

.navbar-collapse .navbar-nav {
  height: 100vh;
  justify-content: center;
  width: 50%;
  margin: 0 auto;
  text-align: center;
  filter: alpha(opacity=0);
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
  opacity: 0;
}

.navbar-collapse .navbar-nav .nav-item {
  border-bottom: 1px solid #D8D8D8;
}

.navbar-collapse .navbar-nav .nav-item:last-child {
  border: none;
}

.navbar-collapse .navbar-nav .nav-item .nav-link {
  font-weight: 800;
  font-size: 20px;
  color: #FFFFFF;
  letter-spacing: 1px;
  padding: 10px 0 10px 0;
}

.navbar-collapse .navbar-nav .nav-item .nav-link:hover {
  color: #68E0CA;
}

.navbar-collapse.show .navbar-nav {
  transition: all 0.25s;
  filter: alpha(opacity=100);
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
  opacity: 1;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>

<nav class="navbar fixed-top" data-aos="fade-left" data-aos-delay="500">
  <div class="navbar-menu" data-toggle="collapse" data-target="#navigation" aria-expanded="false" aria-controls="navigation">
    <span class="title">Menu</span>
    <div class="navbar-toggler">
      <span></span>
      <span></span>
      <span></span>
      <span></span>
    </div>
  </div>
</nav>

<div class="navbar-collapse collapse" id="navigation">
  <ul class="navbar-nav">
    <li class="nav-item active">
      <a class="nav-link" href="#">Home</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="/quiz">Quiz</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="/advice">Advise</a>
    </li>
  </ul>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.