javascript - 如何使用百分比让 CSS 过渡更平滑?

标签 javascript html css

我首先想要一个主页面和一个宽度为0的侧边菜单。主页的宽度为 100%,由一个按钮组成。单击该按钮时,侧边菜单的宽度将增加到 50%,而主页的 margin-right 将增加到 50%。我使用了 CSS 转换和一些 JavaScript 代码,但它们运行不流畅。你有什么建议?

我不想使用“px”而不是百分比。

例子如下:

function openRightSide() {
  leftSide.style.marginRight = "50%";
  rightSide.style.width = "50%";
}

function closeLeftSide() {
  leftSide.style.marginRight = "0";
  rightSide.style.width = "0";
}
.main-container {
  width: 100%;
  height: 100px;
  display: flex;
  flex-direction: row;
  position: relative;
}

.left-side-container {
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  margin-right: 0;
  background-color: #7f7f7f;
  transition: margin 0.9s;
}

.right-side-container {
  width: 0;
  height: 100%;
  position: fixed;
  right: 0;
  top: 0;
  z-index: 2;
  background-color: #f4f4f4;
  overflow: hidden;
  transition: width 0.9s;
}
<div class="main-container" id="mainContainer">
  <div class="left-side-container" id="leftSide">
    <button onclick="openRightSide()">Show Right Side</button>
  </div>
  <div class="right-side-container" id="rightSide">
    <span class="close" onclick="closeLeftSide()">&times;</span>
  </div>
</div>

最佳答案

Margin 是过渡上的繁重操作,最好使用 transform: translateX(50%) 来获得更平滑的过渡。

对于边距过渡,dom 需要检查所有元素相对于您正在设置动画的元素的位置。 Transform 独立于其他元素改变元素。

这也适用于宽度。使用 transform: scale(0)

关于javascript - 如何使用百分比让 CSS 过渡更平滑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57326469/

相关文章:

javascript - 为什么它可以在a标签上添加 active ?

javascript - 我需要根据是否有图像显示/隐藏文本

javascript - 使用 float 动画前置和附加

javascript - 带填充的 DIV 的 "Break out"?

javascript - php echo 添加 "0' );&lt;/script&gt;"到输出的末尾

javascript - 当服务器上的数据更改时刷新客户端网页(php 或 javascript)

javascript - Bootstrap 2.3.2 中的垂直按钮组

jquery - 如何使用 Angular Bootstrap UI 在加载时填充第一个选项卡的内容

CSS SVG+XML - 如何编辑?

css - Bootstrap : navbar header button