"强制回流”;在Bootstrap中的CSS转换中
"Force Reflow" in CSS transitions in Bootstrap
从Twitter的bootstrap中修改bootstrap模式的jquery插件,我发现它们使用CSS转换来产生渐变效果。
代码中吸引我的一件事是这一行:
that.$element[0].offsetWidth // force reflow
如果那一行被注释,转换就不起作用。我发现的所有关于其含义的参考都是"强制回流"评论。
读取该属性如何影响CSS转换?这是为了解决浏览器中的错误吗?
回复有点晚,但我正在处理CSS转换的一些问题,我认为这些问题与您发现的这段代码有关,希望能帮助您理解它!
基本上,我正在切换Javascript/jQuery中的一个类,该类将css转换添加到dom元素中。该元素的CSS随后被更新,从而导致转换发生。代码的简化版本如下:
var myelement = $("myselector");
// Set z-indexes before the transition
myelement.css("z-index", 1);
var reflow = root.offset().left; // Re-flow the page
// Set the transition class on the element which will animate
myelement.addClass("trans");
myelement.css("width", 0 + "px"); // Animate to nothing
因此,如果我取消注释我的回流行,我的转换就会发生,但有时(在safari中似乎更常见)mylement的z索引不会更新。
对我来说,在某些情况下,写入dom的样式似乎被缓冲在某个地方,而不是被刷新。
这就是调用左偏移量的地方。这是据说会导致页面中重新流动的属性之一。从性能角度来看,这通常是一件坏事,但似乎有必要防止css转换获取错误的值。
Mozilla有一个有趣的bug,它讨论了同样的主题。可能会引起一些兴趣。他们建议添加一个API来正确地启动代码转换。
这也是一篇关于强制回流的有趣的SO文章。
希望这能有所帮助!:)
我建议使用一种不那么粗糙、更正式的方法来强制回流:使用forceDOMReflowJS。在您的情况下,您的代码如下所示。
forceReflowJS(that.$element[0]);
它会导致网页回流。因为display-none样式的元素不会转换,所以它将强制网页在显示到块后回流,从而进行转换。Ex bootstrap Modal
相关文章:
- 在BootStrap菜单栏中为所选项目设置背景,类似于BootStrap中的父导航选项
- 使用Bootstrap'在Javascript字符串中的popover插件
- 如何在angular bootstrap ui中聚焦活动导航选项卡中的拳头输入字段
- 可以'在IE上的Bootstrap(v3.3.4)中,无法在导航栏下看到Carousel
- parent和iframe中的Bootstrap.js文件
- JQuery对话框中的Bootstrap Pills
- 导航栏中的bootstrap输入,selectize.js未展开
- 尝试使用MVC5 razor中的bootstrap 3获取相邻的2个表单字段(内联)
- 模式和输入组插件中的Bootstrap popover
- 为什么Yii框架中的Bootstrap在windows手机上运行较慢
- 使用 Clojurescript 中的 Bootstrap 3
- 包括php中的bootstrap和js
- Firefox中的Bootstrap Modal不起作用
- 模式中的Bootstrap 3.2 jQuery
- 美元.notify不是ajax调用后MVC中的Bootstrap函数
- Angular2组件中的bootstrap-select data-content属性不会渲染
- 使用ASP自定义设计模态框.. NET表单控件中的Bootstrap Fullcalendar
- 禁用btn-group On单击下拉菜单中的Bootstrap 3
- laravel中的bootstrap文件夹是用来做什么的
- Modal中的Bootstrap手风琴只能工作一次