滚动条通过 CSS 动画/过渡出现

Posted

技术标签:

【中文标题】滚动条通过 CSS 动画/过渡出现【英文标题】:Scrollbar appears through CSS animation/transition 【发布时间】:2014-01-25 06:25:45 【问题描述】:

我在 Angular 中使用 cubic-bezier 转换为我的 ng-view 设置动画:

/* Animations */
.slide-animation.ng-enter, .slide-animation.ng-leave  
  -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
  -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
  -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
  transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;

  position:absolute;


.slide-animation.ng-enter 
  opacity:0;
  left:300px;
  overflow-y: hidden;
  overflow-x:hidden;


.slide-animation.ng-enter.ng-enter-active 
  opacity:1;
  left: 0;
  top: 0;


.slide-animation.ng-leave 
  opacity:0;
  left: 0;
  top: 0;


.slide-animation.ng-leave.ng-leave-active 
  opacity:0;
  left: 0;
  top: 0;

一切正常,除了在内容输入时出现的滚动条。它从右侧移动到左侧(如您在代码中所见)。

我想在动画期间隐藏滚动条。

我做错了什么?

【问题讨论】:

html,正文 溢出:隐藏 ? 但是没有滚动条...我想滚动我的内容。 好的,在动画之后设置溢出自动或尝试使用 css 剪辑......有点困难帮助你没有 html 页面的其余部分,css,...... 【参考方案1】:

您需要在body css 中设置overflow:hidden。但请注意,添加它会隐藏所有溢出的内容,包括垂直滚动条,您不想这样做,因为如果高度溢出,页面内容将被隐藏。因此,如果您使用的是滑动过渡(横向)并且您只想隐藏过渡期间出现的水平滚动条,那么请改用它:

 body 
    overflow-x:hidden;  

这样,你只是隐藏了水平滚动条,垂直滚动条仍然可以工作。

【讨论】:

我遇到了同样的问题,但是在正文中设置overflow-x:hidden; 也删除了我的垂直滚动。为什么? overflow-x:hidden; 不会移除垂直滚动。您的身体 css 中是否有另一个属性可以覆盖它?如果是,您可以通过添加overflow-y:scroll; 来手动覆盖它以显示垂直滚动。 我不知道为什么这是一个公认的答案,但overflow-x:hidden;不会像@Neel 所说的那样删除垂直滚动【参考方案2】:

我遇到了同样的问题。我就是这样解决的(我以自己的代码为例)

HTML

<div class="team-box-2-info">
    <h4>John Doe</h4>
    <h6>Programmer</h6>
    <p class="team-box-2-desc">Lorem ipsum dolor sit amet consectetum...</p>
</div>

CSS

.team-box-2-desc 
    max-height: 0;
    overflow-y: hidden;
    transition: max-height 0.5s ease-out;

.team-box-2:hover .team-box-2-desc
    max-height: 350px;
    transition: max-height 1s ease-in;

JS

$('.team-box-2').hover(function()
    var element = $(this);
    setTimeout(function()
        element.find('p.team-box-2-desc').css('overflow-y', 'auto');
    , 1000);
, function()
    $(this).find('p.team-box-2-desc').css('overflow-y', 'hidden');
);

【讨论】:

【参考方案3】:
html, body 
  max-width: 100%;
  overflow-x: hidden;

【讨论】:

虽然此代码可能会解决问题,包括 explanation 说明如何以及为何解决问题确实有助于提高帖子的质量。【参考方案4】:

解决闪烁问题的两种方法(滚动条出现/消失时左右移动)

始终显示滚动条

body 
  overflow-y: scroll;

这个 hack (info)

html  
  margin-left: calc(100vw - 100%); 
 

【讨论】:

【参考方案5】:

这里有一个解决方案,可以在使用关键帧的过渡动画期间临时隐藏滚动条 https://css-tricks.com/hide-scrollbars-during-an-animation/

【讨论】:

以上是关于滚动条通过 CSS 动画/过渡出现的主要内容,如果未能解决你的问题,请参考以下文章

css如何在页面内出现滚动条的地方禁止鼠标滑轮滚动

详解用CSS3制作圆形滚动进度条动画效果

如何通过css更改滚动条样式

【CSS】为啥设置不显示滚动条不好用呢?

javascript动画系列第五篇——模拟滚动条

网页中滚动条可以触发animate动画效果么,就是边滚动条下滑,边出现其效果?