当前位置: 首页 > 面试题库 >

强制浏览器在更改CSS时触发重排

戚飞雨
2023-03-14
问题内容

我正在基于CSS3过渡构建非jQuery响应式图像滑块。

结构很简单:一个视口和内部相对定位的UL,左侧浮动LI。

在这种情况下,我面临一个问题:

  1. 用户单击“上一个”箭头。
  2. JS在当前显示的LI节点之前附加适当的LI。
  3. 目前,UL已将CSS过渡设置为none 0s linear防止动画更改。此时,我将UL CSS左值减小滑块宽度(比方说:从0px到-1200px),以使视图保持原样。
  4. 现在,我将UL的过渡属性更改为all 0.2s ease-out
  5. 现在,我将更改UL的left属性以触发CSS3动画。(比方说:从-1200px到0px)。

问题是什么?浏览器简化了更改,并且不制作任何动画。

Stoyan Stefanov在他的博客上写了有关重排问题的信息,但是在这种情况下,试图对元素强制重排是行不通的。

这是执行此操作的一段代码(为简化起见,我跳过了浏览器前缀):

ul.style.transition = 'none 0s linear 0s'; ul.style.left = '-600px';
ul.style.transition = 'all 0.2s ease-out'; ul.style.left = '0px';


问题答案:

请求offsetHeight一个元素的效果很好。您可以使用此功能强制重排,并将样式已更改的元素传递给它:

function reflow(elt){
    console.log(elt.offsetHeight);
}

编辑:最近需要这样做,并且想知道是否有比console.log更好的方法。您不能只写elt.offsetHeight自己的语句,因为优化器(至少是Chrome的)不会触发重排,因为它只是访问未设置getter的属性,甚至不需要评估它。因此,AFAIK最便宜的方法是void(elt.offsetHeight),因为它不确定是否void有副作用。(可以被覆盖,或类似的东西,idk)。



 类似资料:
  • 问题内容: 我正在通过XAMPP开发基于Wordpress源代码的网站。有时,我更改了CSS代码,脚本或其他内容,但我注意到我的浏览器需要花费一些时间来应用修改。这导致我使用多个浏览器刷新一个浏览器,如果不应用新样式,则尝试第二个浏览器,而且总是这样。 有什么办法可以避免这个问题?有时我在更改代码时没有注意到先前的修改。 问题答案: 一般解决方案按Ctrl+ F5(或Ctrl+ Shift+ R)

  • 我当前正在Visual Studio2012中编辑一个.css文件(在调试模式下)。我用Chrome作为我的浏览器。当我在Visual Studio中对应用程序的.css文件进行更改并保存时,刷新页面时将不会加载在我的.css文件中更新的更改。我认为.css文件仍然被缓存。 我试过: Ctrl/F5 在Visual Studio 2012中,转到“项目属性”、“Web”选项卡,在“开始操作”部分“

  • 问题内容: 之前曾问过这个问题,但该解决方案不适用于我的情况。我想确保打印某些背景图像,因为它们是页面不可或缺的。(它们不是直接在页面中的图像,因为其中有几个用作CSS精灵。) 关于同一问题的另一种解决方案建议使用,只有在每个图标都有不同的图像且没有CSS精灵时,它才有效。 除了创建带有内联图标的单独页面之外,还有其他解决方案吗? 问题答案: 您对浏览器的打印方法几乎没有控制。您最多可以提出建议,

  • 问题内容: 有什么办法可以在页面上放置一些代码,以便当有人访问网站时,它会清除浏览器缓存,以便他们可以查看更改? 使用的语言:ASP.NET,VB.NET,当然还有HTML,CSS和jQuery。 问题答案: 如果这是关于和变化,一种方法是到“缓存无效”是通过附加像“ ”为每个版本的文件名。例如: 或者,在文件名之后执行此操作:

  • 我有一个执行上传的应用程序。我似乎无法让文件系统弹出关闭。它不会搞砸测试,它会继续在后台运行,但我想观看测试的奇怪机会有四分之一的屏幕被覆盖了。所以我想解决这个问题的方法就是强制在新选项卡中完成测试的其余部分。我不知道如何做到这一点。 这是我的上传代码: 与此问题相关:发送filepath后上传模态不会关闭

  • 问题内容: 专业的网页设计师如何创建跨浏览器的CSS?通常是手动完成,还是像YUI针对JavaScript那样可以简化流程的工具包?我希望远离Dreamweaver之类的所见即所得编辑器。谢谢! 问题答案: 通常是手工完成的。 通常从对比赛场地应用CSS重置开始。 而且,您应该针对符合标准的CSS,然后作为对IE的最后手段,才可以使用hacks(是的,我刚刚说过)。