jquery - CSS 过渡的问题

标签 jquery html css css-transitions transition

我正在尝试使用 CSS 过渡创建一个简单的滑入和滑出菜单以获得平滑效果。根据窗口的大小,菜单从左侧移动到屏幕顶部。

它工作正常,但是当我在菜单打开时将浏览器窗口从大调整为小时。菜单自行调整大小时会产生奇怪的效果。

我这辈子都想不出如何解决它或我做错了什么。

JSFiddle

$('#menu-button').click(function() {
  $('#menu').toggleClass('closed');
});
#wrapper {
  display: grid;
  grid-template-columns: auto 1fr;
  height: 100vh;
  background: #eeeeee;
}

#menu-wrapper {
  grid-column: 1;
  border-right: 1px solid #444444;
}

#menu {
  width: 300px;
  transition: width 1s;
}

#menu.closed {
  width: 50px;
}

#menu-button {
  width: 50px;
  height: 50px;
  float: right;
}

.bar {
  width: 35px;
  height: 5px;
  background-color: #333;
  margin: 6px 0;
}

#content-wrapper {
  grid-column 2;
}

@media all and (max-width: 900px) {
  #wrapper {
    grid-template-columns: 1fr;
    grid-template-rows: auto 100%;
  }
  #menu-wrapper {
    grid-row: 1;
    grid-column: 1;
    border-bottom: 1px solid;
    border-right: none;
  }
  #menu {
    width: 100%;
    height: 100px;
    transition: height 1s;
  }
  #menu.closed {
    height: 50px;
  }
  #content-wrapper {
    grid-column: 1;
    grid-row: 2;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
  <div id="menu-wrapper">
    <div id="menu">
      <div id="menu-button">
        <div class="bar"></div>
        <div class="bar"></div>
        <div class="bar"></div>
      </div>
    </div>
  </div>
  <div id="content-wrapper">
    <div id="content">
    </div>
  </div>
</div>

最佳答案

将边框移动到内部元素(应用过渡的地方)以避免出现故障,然后调整一些 CSS:

$('#menu-button').click(function() {
  $('#menu').toggleClass('closed');
});
#wrapper {
  display: grid;
  grid-template-columns: auto 1fr;
  height: 100vh;
  background: #eeeeee;
}

#menu-wrapper {
  grid-column: 1;
}

#menu {
  width: 300px;
  height: 100%; /*added*/
  transition: width 1s;
  border-right: 1px solid #444444; /*added*/
}

#menu.closed {
  width: 50px;
}

#menu-button {
  width: 50px;
  height: 50px;
  float: right;
}

.bar {
  width: 35px;
  height: 5px;
  background-color: #333;
  margin: 6px 0;
}

#content-wrapper {
  grid-column 2;
}

@media all and (max-width: 900px) {
  #wrapper {
    grid-template-columns: 1fr;
    grid-template-rows: auto 100%;
  }
  #menu-wrapper {
    grid-row: 1;
    grid-column: 1;
    border-right: none;
  }
  #menu {
    width: 100%;
    height: 100px;
    border-right:none; /*added*/
    border-bottom: 1px solid; /*added*/
    transition: height 1s;
  }
  #menu.closed {
    height: 50px;
    width:100%; /*added*/
  }
  #content-wrapper {
    grid-column: 1;
    grid-row: 2;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
  <div id="menu-wrapper">
    <div id="menu">
      <div id="menu-button">
        <div class="bar"></div>
        <div class="bar"></div>
        <div class="bar"></div>
      </div>
    </div>
  </div>
  <div id="content-wrapper">
    <div id="content">
    </div>
  </div>
</div>

关于jquery - CSS 过渡的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52687553/

相关文章:

css - 如何在我的自定义 CSS 菜单上覆盖部分边框

jQuery如何检查类名是否包含某个值

javascript - 获取有关更改的最新标签数据

javascript - "TypeError: $(...).length is not a function"怎么解决?

javascript - 如何将 css 类添加到一组链接中的特定链接?

css - 如何在Django博客中显示CSS文件?

jquery - 尝试解析 xhr.responseText

html - CSS 让最后一个 child 动态获取父级留下的宽度

jquery - 如何自定义水平 jQuery-mobile 单选按钮

html - 有没有CSS生成器