【问题标题】:Bootstrap 4 nav collapsing animation stopping for a split second when opening, ok closingBootstrap 4 导航折叠动画在打开时停止一瞬间,好的关闭
【发布时间】:2018-02-28 22:12:21
【问题描述】:

当您展开菜单时,它会向下滑动,停顿片刻然后继续。向上滑动似乎还不错,但打开时不那么顺畅。

.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】:

    我看到了很多不必要的绝对定位,无论是让项目填满屏幕还是在其他元素中居中。这阻止了 Bootstrap 的切换 JS 正确识别扩展元素的高度应该是多少。

    而不是将.navbar-collapse 绝对定位为始终占据您的窗口,其中的内容应该是您窗口的高度 - 我在.navbar-nav 上使用了height: 100vh 来做到这一点。

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

    以下是我对您的 CSS 所做的更改(左侧是您的):

    下面的工作示例:

    .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>

    【讨论】:

    • 太好了,而且有效!但是只有在页面顶部时才有效,菜单链接是固定的,所以当向下滚动页面并单击链接时,它不会在顶部显示为展开?因此我设定的位置......你知道解决这个问题吗?我现在正在玩,但如果你知道一个会很棒
    • 示例添加:
      到 html 的末尾,你会明白我的意思
    • @James Sure - 您只需要修复 .navbar-collapse。添加这些规则:position: fixed; top: 0; left: 0; right: 0;
    • 是的,完美的伴侣!辛苦了!谢谢你的帮助兄弟!真的很感激。
    猜你喜欢
    • 2017-05-20
    • 2023-04-03
    • 2018-09-03
    • 1970-01-01
    • 2018-09-03
    • 2020-04-12
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多