我目前正在做一个视差网站主题。对于某些"div"和"部分",背景图像需要固定附加,以避免jquery沉迷于所有内容。问题是任何动画项目下方标签的背景图像在转换过程中消失了,仅在谷歌浏览器上。补救?
这是一个非常普遍的未解之谜。最近我遇到了同样的问题,"-webkit-backface-visibility:隐藏"被证明是无用的(在我的"固定"附加背景上(,因为背景在设置时就消失了。(附加信息:原因是当背景设置为固定时,几乎类似于在背景中放置固定的"div"并将原始div 背景设置为透明。隐藏的背面是显而易见的(。
要解决当前的问题,请尝试将元素的">位置"属性设置为">静态",或者如果您给了它一些其他值,即">相对"、">固定"或">绝对",只需删除它们。
如果您不记得设置了 position 属性,并且问题仍然存在,我的建议是您在 chrome 或 Firefox 上使用调试工具,
确保没有手动设置"位置"属性的值,除了 "静态"。
刚刚花了半个小时搜索...以为这可以让你更容易...问候。:)
同样的问题在这里。我有一个粘性标题,使用在PC Chrome 34中闪烁的position:fixed;
。我尝试了此线程中的解决方案,position:static;
父线程中的解决方案破坏了其他部分。但我知道添加-webkit-transform: translate3d(0,0,0);
基本上会使Chrome将该html变成一个图层,这样它就不会被重新绘制。这对我有用。
element {
position:fixed;
top:0;
left:50%;
width:960px;
height:50px;
margin-left:-480px;
-webkit-transform: translate3d(0,0,0);
/* ...all other CSS... */
}
更新
未来友好的答案是使用 will-change
属性创建图层!
W3规格
卡诺斯
MDN 定义
element {
position:fixed;
top:0;
left:50%;
width:960px;
height:50px;
margin-left:-480px;
will-change:top;
/* ...all other CSS... */
}
老实说,这似乎是修复闪烁的奇怪解决方案,但本质上它使元素成为一个层,与 translate3d(( 相同。
也许回答有点晚了,但似乎该错误带有背景附件:chrome 中的固定属性。我找到了一个解决方案,其价值为"滚动"。它会在 Firefox 上引起抖动效应,但您可以使用 CSS 中的媒体浏览器查询来避免它,如下所示:
.yourstellarlayer{
background-attachment: fixed;
}
/*only for webkit browsers*/
@media screen and (-webkit-min-device-pixel-ratio:0) {
.yourstellarlayer{
background-attachment: scroll;
}
}
希望对您有所帮助!
我在 Chrome 上遇到了同样的问题,这似乎是页面内部发生太多事情时发生的错误,我能够通过将以下转换代码添加到固定位置元素来修复它,( transform: translateZ(0);-webkit-transform: translateZ(0);
( 强制浏览器使用硬件加速访问设备的图形处理单元 (GPU( 以使像素飞行。另一方面,Web 应用程序在浏览器的上下文中运行,这允许软件完成大部分(如果不是全部(渲染,从而减少过渡的马力。但是Web已经迎头赶上,大多数浏览器供应商现在通过特定的CSS规则提供图形硬件加速。
使用 -webkit-transform: translate3d(0,0,0(; 将启动 GPU 对 CSS 过渡的操作,使它们更平滑(更高的 FPS(。
注意:translate3d(0,0,0( 对你所看到的内容没有任何作用。 它将对象在 x,y 和 z 轴上移动 0px。这只是一种强制硬件加速的技术。
#element {
position: fixed;
/* MAGIC HAPPENS HERE */
transform: translateZ(0);
-moz-transform: translatez(0);
-ms-transform: translatez(0);
-o-transform: translatez(0);
-webkit-transform: translateZ(0);
-webkit-font-smoothing: antialiased; /* seems to do the same in Safari Family of Browsers*/
}
这真的困扰着我,几乎毁了我的夜晚。 我的解决方法是设置
background-attachment: scroll;
它适用于我的项目。
在此之前,我已将其固定。希望这有帮助。
,问题是附加到具有固定背景的div父元素的样式,我-webkit-backface-visibility: inherit;
固定div的两个主要父元素。
就我而言,我使用的是画布外的粉底,所以它是这样的
.off-canvas-wrap{
-webkit-backface-visibility:inherit;
}
.inner-wrap{
-webkit-backface-visibility:inherit;
}
我们在position: fixed;
元素上遇到了类似的问题。此元素包含一个相对定位的容器,其中包含一个绝对定位的图像。在CSS过渡上,图像消失了,当过渡完成后,图像会重新出现。
我们尝试通过将-webkit-backface-visibility
设置为hidden
多个元素(包括 body 元素(来解决问题,但这没有帮助。在这个线程的帮助下,我们使用Chrome的网络检查器来摆弄elments的position
属性,幸运的是,我们能够解决问题,而无需对网站进行太多更改。(我们所要做的就是将固定元素的父元素的位置更改为static
(
未来近 5 年的更新...这似乎仍然是铬的问题。我已经尝试了提到的大多数解决方案,包括添加:
transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);
它没有解决口吃问题。 添加background-attachment: scroll
会消除视差效应,这对网站的用户体验至关重要。上面提到的添加父元素的解决方案对我来说没有任何变化。最近遇到此问题的人还有其他想法吗?我在前端使用Gatsby(React(。
这是一个适用于 (2014.7.11( 火狐 30.0、chrome 35.0、opera 22.0、即 11.0 的解决方案:
第 1 步:在 .htaccess 中添加以下行:
# cache for images
<FilesMatch ".(png)$">
Header set Cache-Control "max-age=10000, public"
</FilesMatch>
- 此问题的详细说明以及如何解决它:https://code.google.com/p/chromium/issues/detail?id=102706
第2步:添加图像预加载,例如:
var pics = []; // CREATE PICS ARRAY
$(document).ready(function(){
...
preload(
'/public/images/stars.red.1.star.png',
'/public/images/stars.red.2.star.png',
'/public/images/stars.red.3.star.png',
'/public/images/stars.red.4.star.png',
'/public/images/stars.red.5.star.png',
'/public/images/stars.empty.png'
);
...
$('.rating').on('mousemove', function(event){
var x = event.pageX - this.offsetLeft;
var id = getIdByCoord(x); //
if ($(this).data('current-image') != id) {
$(this).css('background-image', 'url(' + pics[id].src + ')');
$(this).data('current-image', id);
}
})
...
})
...
// PRELOAD FUNCTION TO SET UP PICS ARRAY IN MEMORY USING IMAGE OBJECT
function preload() {
for (i = 0; i < arguments.length; i++) {
pics[i] = new Image();
pics[i].src = arguments[i];
// alert("preload " + arguments[i]);
}
}
附言感谢肖恩·奥特曼
我的任务是创建一个具有视差效果的页面。在尝试通过CSS解决此问题后,我想出了以下解决方案。
JavaScript:
var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if (isChrome)
{
var itemArr = $('.slider-title');
$(window).scroll(function()
{
var pos = $(window).scrollTop();
var wh = window.innerHeight;
$(itemArr).each(function(i, item){
var p = $(item).position();
var h = $(item).height();
if (p.top + h > pos && p.top < pos+wh)
{
// items ir redzams
var prc = (p.top - pos +h)/wh ;
//console.log(prc);
$(item).css({'background-position':'center '+prc+'%'});
}
});
});
}
.CSS:
/*only for webkit browsers*/
@media screen and (-webkit-min-device-pixel-ratio:0) {
.slider-title{
background-size:auto;
background-position: center 0%;
}
}
.slider-title 将是固定了背景附件的项目。
所以我使用的是 Chrome 版本 40,但仍然看到此问题。目前对我有用的解决方法是相对于该div 创建一个内部div 设置位置,使其适合其父级的高度,并使用固定的背景附件在父级div 上设置背景:
<section style="background-attachment: fixed;">
<div style="position: relative;">
// Code goes here including absolute posiioned elements
</div>
</section>
在我的情况下,当您将位置相对和背景附件固定在同一元素上时,似乎会出现问题。
希望这有帮助。
这个派对迟到了,但一个惊人的发现,正如我可以看到大多数 css 框架用户、Bootstrap、基金会(其他(都有问题,我相信你们中的许多人也有滚动到顶部 js 函数,当用户开始向下滚动时显示滚动到顶部按钮,
如果你有这样的东西(引导程序内置了它(
.fade {
opacity: 0;
-webkit-transition: opacity .35s linear;
-o-transition: opacity .35s linear;
transition: opacity .35s linear;
}
.fade.in {
opacity: 1;
}
或者您正在通过以下方式显示某些元素 ,
-webkit-transition: opacity .35s linear;
-o-transition: opacity .35s linear;
transition: opacity .35s linear;
或者您正在添加任何类型的元素或带有过渡的元素类,向下滚动,通过 JS(动画.css,航点.js,速度.js (
如果可能,请从该元素中删除过渡/类,或者在该元素出现时重新检查,以解决断断续续的 Chrome 问题。
将 transform
属性添加到具有固定背景图像的元素中。您可以有任何设定的位置。
#thediv {
width: 100%;
height: 600px;
position: relative;
display: block;
background-image: url(https://cdn.shopify.com/s/files/1/1231/8576/files/hockeyjacket1.jpg);
background-size: cover;
background-position: center;
background-repeat: no-repeat;
background-attachment: fixed;
border: 10px solid black;
transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);
}
https://jsfiddle.net/rkwpxh0n/2/
我在弹出窗口下方的覆盖div 上遇到了这个问题(在 opera 20 中随机消失( - 动画和脚本激活。
<div class="popupwrapper">
<div id="popupdownload" class="popup">
<h1>Test</h1>
</div>
<div class="popupoverlay"></div>
</div>
.popupwrapper {
display: none;
z-index: 9100;
}
.popupwrapper.active {
display: block;
}
.popupwrapper > div {
-webkit-transition: opacity 150ms ease-in-out, -webkit-transform 150ms ease-in-out;
-moz-transition: opacity 150ms ease-in-out, -moz-transform 150ms ease-in-out;
-ie-transition: opacity 150ms ease-in-out, -ie-transform 150ms ease-in-out;
transition: opacity 150ms ease-in-out, transform 150ms ease-in-out;
}
.popupoverlay {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(26,26,26,.9);
opacity: 0;
}
.popup {
position: fixed;
top: 30%;
left: 40%;
padding: 48px;
background: #e6e6e6;
z-index: 9101;
-webkit-transform: scale(1.6);
transform: scale(1.6);
opacity: 0;
}
.popupoverlay.active {
opacity: 1;
}
.popup.active {
-webkit-transform: scale(1);
transform: scale(1);
opacity: 1;
}
覆盖是绝对定位的(.popupoverlay(,但在容器中没有以任何方式定位。我已经将覆盖的绝对定位复制到父级(.popup(并且它工作正常。
.popupwrapper {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
display: none;
z-index: 9100;
}
我认为只有当父元素的位置不明显时,才会出现问题。
如果帮助了任何人,很高兴。Regards
当您在元素上添加任何标记时,似乎在 Chrome 中出错。尝试从此类元素中删除背景并为其指定位置:相对。在元素内部添加一个具有所需尺寸的新div 并添加背景,只是不要在其中添加任何标记。
例:
当前:
<div class="container" style="background-image:url(example.jpg);background-position:center;background-attachment:fixed;background-size:cover;">
<div class="example"></div>
</div>
纠正:
<div class="container" style="position:relative;">
<div class="added-background" style="position:absolute;width:100%;height:100%;background-image:url(example.jpg);background-position:center;background-attachment:fixed;background-size:cover;">
<div class="example"></div>
</div>
希望对您有所帮助!
如果您必须具有位置:固定/相对/绝对,另一种解决方法可能是因为您内部有一个绝对定位的元素(就像我的情况一样(是在闪烁的div 内创建一个包装器div 并将位置和背景属性移动到该位置。
例如
你有——
<div class="background-flickers' style="background:url('path-to-image'); position:relative">
<absolutely positioned element>
</div>
可能的解决方法
<div class="no-more-flicker!">
<div class="wrapper" style="style="background:url('path-to-image'); position:relative">
<absolutely positioned element>
</div>
</div>
我不再有闪烁了,显然闪烁错误不会下降到子容器。
我在Chrome中也有同样的问题
非常简单,无需添加任何webkit和媒体标签,只需按照以下步骤操作即可
1.代替背景:url('路径到图像'(像下面这样设置图像并将位置设置为固定
阿拉伯数字。它将在Chrome和IE浏览器中工作
问题仍然存在。
当我有 { 背景附件:固定; 转换:缩放(1(; 过渡:转换 } 时,它会发生在我
身上我需要修复背景附件以获得视差效果。
我正在滚动扩展我的容器。
当转移和转换被移除视差时。话虽如此,我可以有一个比例效果或视差效果,而不是同时在铬上工作。
Safari 不会抱怨,并且两者都像魅力一样工作