CSS 过渡在不透明度淡出时跳跃
Posted
技术标签:
【中文标题】CSS 过渡在不透明度淡出时跳跃【英文标题】:CSS transition is jumpy on opacity fade out 【发布时间】:2021-10-12 18:19:03 【问题描述】:我正在开发一个面包屑菜单,一旦菜单变得粘滞,该菜单就会一直显示在右侧,以便用户滚动回页面顶部。面包屑<nav>
具有position:sticky
,并且事件侦听器用于检测它何时“卡住”。然后,我使用 CSS 来定位 breadcrumb-arrow
<div>
,然后对其进行转换,以便在用户向上滚动或单击它时,它的不透明度会再次淡入淡出。
代码可以正常工作,但是让它淡出的 CSS 动画有点跳动。具体来说,边框刚刚消失,没有过渡,<a>
标签开始淡出,然后在过渡结束前消失。
html:
<nav class="breadcrumbs noselect">
<div class="bread-bag">
<ul class="l-breadcrumb">
<li><a>Link 1</a> > </li>
<li><a>Link 2</a> > </li>
<li><a>Link 3</a></li>
</ul>
<!-- This is what fades in and out -->
<div class="breadcrumb-arrow">
<a class="toTop">⇈</a>
</div>
</div>
</nav>
CSS:
.breadcrumbs
position: relative;
position: -webkit-sticky;
position: -moz-sticky;
position: -ms-sticky;
position: -o-sticky;
position: sticky;
width: 100%;
min-height: 50px;
max-height: 50px;
height: 50px;
border-bottom: 1px solid #252524;
background: #101112;
overflow: hidden;
z-index: 20;
top: -1px;
padding-top: calc(0em + 1px);
.breadcrumb-arrow
position: absolute;
top: 0;
right: 0;
height: 100%;
width: 48px;
text-align: right;
background: #101112;
border-left: 1px solid #101112;
text-align: center;
line-height: 48px;
overflow: hidden;
opacity: 0;
visibility: hidden;
transition: all 1s linear, visibility 0s;
z-index: 30;
.is-pinned .breadcrumb-arrow
opacity: 1;
visibility: visible;
border-left: 1px solid #232425
【问题讨论】:
【参考方案1】:问题是我在 *** 和其他网站的其他地方看到过代码,人们建议将可见性设置为 0s
转换,同时还对其他所有内容使用 transition: all 1s linear
(或其他一些持续时间)。这就是破坏它的原因。
只需删除visibility 0s
,CSS 动画就可以正常工作了。
我不确定旧版浏览器是否需要这个,或者它可能只是 Firefox 的故障,但是一旦我删除了那个 CSS,所有元素都会淡入淡出而没有错误。我只在 macOS 上的 Firefox 中进行了测试,但希望这对将来的某人有所帮助。
.breadcrumb-arrow transition: all 1s linear
【讨论】:
以上是关于CSS 过渡在不透明度淡出时跳跃的主要内容,如果未能解决你的问题,请参考以下文章