【发布时间】:2017-01-06 10:44:09
【问题描述】:
我在我的移动网络应用程序中显示了一个类似于应用程序抽屉的 组件,我在其中使用带有 more 的底部导航图标来打开其他选项。
一些选项抽屉事实
- 上下滑动进入/退出视图
- 具有全屏高度
- 在底部垂直对齐项目
- 每行显示 N 个选项(与每行只有一个选项的附加图片不同)
- 与主底部导航放置在屏幕底部的同一
position: fixed容器中。
我的选项抽屉的动画应该类似于在这个 iOS 动画 GIF 上可以看到的动画
https://jsfiddle.net/LL4dst15/
问题
我的抽屉正在使用 flexbox(从示例中可以看到),它将元素与交叉轴上的 flex-end 对齐以将它们显示在最底部。但问题是导航容器是固定定位的,并且有这样的z-index,它会一直显示在内容上。
translateY问题
如果我使用translateY,抽屉实际上应该滑入/滑出,但抽屉元素的位置不会改变,这意味着导航容器仍然具有抽屉+底栏的高度。这可以在我左边的小提琴示例中看到,灰色元素总是可见的。因此,这将涵盖我的实际内容,因此用户将难以与之交互。
但是我可以使用pointer-events: none;,但我认为这是一个相当丑陋的黑客,可能有问题的浏览器支持。所以我想避免它。
max-height问题
如果我使用max-height 而不是转换,那么导航容器实际上会在抽屉调整大小时调整大小。这种方法的问题是抽屉似乎没有向上/向下滑动,而是折叠作为百叶窗......原因是交叉轴对齐到弯曲端。如果我与 flex start 对齐,那么它似乎正在滑出。
我试图用自动边距解决这个问题,但似乎无法让它工作,所以我可以让 flex 开始跨轴对齐,但使用自动边距将内容推送到抽屉的底部。运气不好...
你有什么其他建议我应该如何做 CSS 以便我的抽屉会滑动并且我的容器也会调整大小?
【问题讨论】:
-
如果您提供纯 CSS(并且在问题本身内,根据 SO 指南),您的代码示例将更易于访问。我试了一下,但花了太多时间编译你的代码。希望别人可以帮助你。祝你好运。
-
@Michael_B 为什么会这样?您应该直接在 JSFiddle 上运行代码(并更改它)。无需将它放到本地机器上并编译它。当你运行 JSFiddle 时,它会将 SCSS 预编译为 CSS……但对于源代码来说确实如此。我将添加主要摘录。 (顺便说一句:手动将这个相当短的 SCSS 文件更改为 CSS 也不应该花费太多时间)
-
尝试在 jsfiddle 和 codepen.io 中编译。它没有用。非标准的 CSS 仍然存在。也许我需要更好地学习这些功能。
-
你为什么考虑使用
pointer-events: nonehack?它在所有浏览器中得到广泛支持:caniuse.com/#feat=pointer-events
标签: css flexbox css-transitions slide