[英]Hiding elements offscreen with CSS transitions
我正在制作一个网页应用程序,其中包含一个隐藏的侧边栏,从右侧移动即可显示。 实现这一目标最明显的方法是使用overflow: hidden;
侧边栏overflow: hidden;
在父元素上,并使用css过渡来设置right
属性的动画,以便在用户按下按钮时显示。
但是,我发现即使overflow: hidden;
禁用滚动条,用户可以使用Ctrl + F滚动父元素到侧边栏,或者在侧边栏上的元素上显示,同时它应该隐藏在屏幕外,在此过程中将一些主应用程序推到屏幕外。
虽然这不是一个特别大的问题(可以通过再次切换侧边栏来修复),但这显然是不可取的,我还没有找到一个好方法来处理它。
我可以使用javascript来监听transitionend
事件以设置hidden
在侧边栏上的visibility
以便在hidden
侧边栏时无法选择文本,但是用户仍然可以在转换发生时执行此操作并且无论如何滚动屏幕。
我还可以将所有文本放在伪元素中,并在所有可聚焦元素上添加tabindex="-1"
,这样就没有任何东西可以选择了,但这似乎在顶部也很混乱,不允许用户按Ctrl + F或如果可见,则选项卡到侧栏上的元素,这是不合需要的。
我也可以从左侧而不是右侧看到侧边栏,但我宁愿看看是否有更好的方法来做到这一点,而不是更改应用程序的整个设计。
如果这已在其他地方得到解决,请道歉,但我已经四处寻找并且找不到任何与我的问题有关的事情。
一种解决方案是将#Sidebar
position
设置为fixed
。 并同时更换right
与transform: translateX()
隐藏/显示它。
这是一个我没有听过或想过的有趣案例,说“错误”确实有意义。 我想问题是文本是屏幕外隐藏的,但仍然存在。 我将该div设置为display:none,然后通过javascript切换更改此值,以便div变为:display:inline然后拉出。
您可以检查元素是否在视口外,然后在其上显示:none。
此问题将有助于检查元素是否在视口外。
使用另一个具有属性display:none的类; - >那样你就无法选择它/ ctrl + F吧。
CSS:
#Sidebar {
...
display: none;
}
#Sidebar.block {
display: block;
}
使用Javascript:
if (sidebar.classList.contains("open")) {
sidebar.classList.remove("open");
setTimeout(function() {
sidebar.classList.remove("block");
}, 3500); // consider faster transitions!
} else {
sidebar.classList.add("block");
setTimeout(function() {
sidebar.classList.add("open");
}, 50);
}
这是小提琴: https : //jsfiddle.net/j9d0e7ug/2/
请注意,我使用setTimeout(),因为否则更改块和none之间的显示会破坏动画。 还考虑更快的转换:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.