css - 防止屏幕外的 div 在调整大小时移动

标签 css

我有一个抽屉式菜单,它会在点击一个按钮后出现在屏幕上。使用绝对定位的转换有点滞后,所以我使用了 translate3d。菜单有两种宽度。一个是 100% 的移动 View 和 395px 的视口(viewport) 600px 及以上。我注意到的一个怪癖是,如果我要调整屏幕大小,菜单会巧妙地出现。发生这种情况时,有没有办法让菜单完全远离屏幕?

注意:要查看此内容,请将截图展开到全屏并将水平大小调整为 600 像素或更小。您应该会看到 div 出现并返回到屏幕外。

$('button').on('click', function() {
  $('#drawer').toggleClass('active');
});
html,
body {
  height: 100%;
  margin: 0;
}

#drawer {
  width: 100%;
  height: 100%;
  background-color: grey;
  transition: transform .5s ease-in;
  transform: translate3d(-100%, 0, 0);
}

#drawer.active {
  transform: translate3d(0, 0, 0);
}

@media (min-width: 600px) {
  #drawer {
    transform: translate3d(-395px, 0, 0);
    width: 395px;
  }
}

button {
  position: absolute;
  top: 10px;
  left: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="drawer"></div>

<button>Toggle Drawer</button>

最佳答案

问题:在抽屉的转换属性上设置了转换。当它命中指定的媒体查询时,抽屉会转换到它的新 x 坐标。

解决方案:不要将放置的责任完全放在变换上,而是使用绝对定位并首先将抽屉偏移到其负宽度。在这种情况下,它将是 395px。在事件状态下,transform3d 属性将是抽屉的宽度,以将其带回窗口的可见部分。

$('button').on('click', function() {
  $('#drawer').toggleClass('active');
});
html,
body {
  height: 100%;
  margin: 0;
}

#drawer {
  width: 100%;
  height: 100%;
  position: absolute;
  left: -100%;
  background-color: grey;
  transition: transform .5s ease-in;
  transform: translate3d(0,0,0);
}

#drawer.active {
  transform: translate3d(100%, 0, 0);
}

@media (min-width: 600px) {
  #drawer {
    left: -395px;
    width: 395px;
  }
  
  #drawer.active {
    transform: translate3d(395px, 0, 0);
  }
}

button {
  position: absolute;
  top: 10px;
  left: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="drawer"></div>

<button>Toggle Drawer</button>

关于css - 防止屏幕外的 div 在调整大小时移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219356/

相关文章:

html - 我的 Bootstrap 模式的滚动区域在顶部有一个偏移量

php - PHP 网页设计师的可交付成果

javascript - 使 <div> 的 col 类响应

javascript - 单击时停止无限的 css 动画?

ipad - iPad 上的主要内容 block 位置搞砸了

javascript - Html5节点图?

css - 显示 : none doesn't work on mobile

css - 错误代码元素 ""未定义 [XHTML 1.0 Strict]

javascript - 在带有 overflow-y :scroll 的固定元素内使用 scrollTop

javascript - CSS3 flexbox 中的对齐