css - CSS 转换期间的闪烁错误

标签 css css-transitions

我目前正在为我的博客制作一个新主题,但标题有问题。看,标题在顶部有一个固定位置,就像导航栏一样,当用户向下滚动时它会缩小。但是,在某些浏览器(主要是 Chrome,尤其是 Windows)上,页眉上的 Twitter 图标有一种奇怪的闪烁行为,在 1/10 秒左右的时间内会下降到下一行。

我在 Chrome 中看到过很多关于使用过渡时闪烁错误的事情,但没有一个看起来像这样(而且,这些修复不适用于我的情况)。 这是图标边距和标题高度的简单过渡。

有人见过类似的东西吗?

非常感谢!

编辑:在 fiddle 中重新创建它。问题依然存在:http://jsfiddle.net/PVmgz/

HTML `

    <header>
        <div class="container header">
            <a href="#" title="MangeMonBeat"><div id="logo">Logo</div></a>
            <div class="social">
                <div class="search icon">

                </div>
                <div class="facebook icon">
                </div>
                   <div class="twitter icon">
                   </div>
            </div>
        </div>
    </header>

        <div id="button">Scroll</div>

`

CSS

header {
    width: 100%;
    height: 98px;
    background: #EEE;
    position: fixed;
    top: 0;
    z-index: 9999;
    -webkit-transition: height, ease-in, 0.4s;
       -moz-transition: height, ease-in, 0.4s;
        -ms-transition: height, ease-in, 0.4s;
         -o-transition: height, ease-in, 0.4s;
            transition: height, ease-in, 0.4s;
}

header.scroll {
    height: 60px;
}
header.scroll .header #logo {
    width: 350px;
    height:50px;
}
header.scroll .header .social {
    margin-top: -2px;
}
header.scroll .header .social .icon {
    margin-left: 2px;
}

.header {
    padding: 5px 10px 0;
}

.header #logo {
    width: 400px;
    height:82px;
    background: #696;
    color:white;
    float: left;
    -webkit-transition: width, ease-in, 0.4s;
       -moz-transition: width, ease-in, 0.4s;
        -ms-transition: width, ease-in, 0.4s;
         -o-transition: width, ease-in, 0.4s;
            transition: width, ease-in, 0.4s;
}

.header #logo img {
    max-width: 100%;
    height: auto;
}

.header .social {
    float: right;
    margin-top: 19px;
    -webkit-transition: margin-top, ease-in, 0.4s;
       -moz-transition: margin-top, ease-in, 0.4s;
        -ms-transition: margin-top, ease-in, 0.4s;
         -o-transition: margin-top, ease-in, 0.4s;
            transition: margin-top, ease-in, 0.4s;
}

.header .social .icon {
    display: inline-block;
    margin-left: 20px;
    width: 51px;
    height: 51px;
    border-radius:999px;
    -webkit-transition: margin-left, ease-in, 0.4s;
       -moz-transition: margin-left, ease-in, 0.4s;
        -ms-transition: margin-left, ease-in, 0.4s;
         -o-transition: margin-left, ease-in, 0.4s;
            transition: margin-left, ease-in, 0.4s;
}

.header .social .icon.facebook {
    position: relative;
    background:#336699;
}

.header .social .icon.twitter {
    position: relative;
    background:#66cccc;
}

最佳答案

所以我对这个问题有一个可能的解释,还有一些代码可以肯定地解决它。

可能的解释是缩小的社交媒体图标有时会被围起来。当它们缩小时,它可能会计算宽度,比如 26.6 像素,当然它必须始终显示为整数像素。当它四舍五入到 27 像素时,这会将最后一个社交媒体图标提升到一个新的水平。 如果这是正确的,它会闪烁,因为它会继续缩小,计算 26 个像素,这是一个 O.K.值(value),它不会下降。但随后它立即变为 25.9 像素,再次下降。 如果这确实是正确的,那么它实际上比我给出的这个简单解释要复杂一些(父元素的宽度开始起作用),但这足以理解这个想法。

无论如何,一个有效的修复方法是为包含图标的 div 提供一个宽度,这样就可以为图标扩展提供“喘息空间”。

下面是一些为其提供空间的代码,但您需要对其进行优化以使其按您希望的方式显示。

.header .social {
    ...
    width: 500px;
}

我最初的解决方案想法是设置此 divwidth,然后将图标 float 到其中的右侧。

关于css - CSS 转换期间的闪烁错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13048239/

相关文章:

html - 如何轻松地在图像中间制作文字标题

html - 淡入淡出的按钮过渡不起作用

css3 从宽度自动过渡到 "n"像素

html - 使用 flexbox 垂直对齐按钮内的文本

css - 在 css 3 中做同样的事情

jquery - 在使用 jquery 设置其他 css 之前设置 css?

css - 如何在选中状态下保留 CSS 变换比例

jquery 选择器 : detect deviant class

css - 将鼠标悬停在大屏幕上时,Bootstrap 4 导航栏会打开下拉菜单,但会在小屏幕上打开

javascript - 下拉选择和向下箭头汽车引用文本长度