我正在使用语义-ui,并设法缩小了css属性will-change中的一些未定义行为(我在他们的模型中找到了这种行为):
.outer{
background-color: black;
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
.inner{
position:absolute;
background-color: white;
left: 50%;
top: 100px;
width: 400px;
margin-left: -200px;
height: 100px;
padding: 5px;
/**
* comment out the line below
* to see the desired/different result
**/
will-change: transform;
}
.baby{
color: yellow;
position: fixed;
left: 20px;
top: 20px;
right: 0;
border: 1px solid red;
}<div class="outer">
<div class="inner">
<div class="baby">here</div>
<div class="content">some content</div>
</div>
</div>
我只在铬中测试过这个。有人有更多关于这里发生的事情的信息吗?为什么will-change会对实际布局做任何事情?
发布于 2016-09-29 08:25:25
will-change影响布局,因为它经常与属性一起使用,其值可以在不影响布局的属性和不影响布局的属性之间进行更改。设置will-change会告诉浏览器为这种潜在的更改做好准备,这将导致浏览器预先应用布局更改。
这个不是未定义的行为
如果属性的任何非初始值都会在元素上创建一个堆叠上下文,则指定将更改中的属性必须在元素上创建一个堆叠上下文。 如果属性的任何非初始值会导致元素为绝对定位的元素生成包含块,则指定将更改中的属性必须导致元素为绝对定位的元素生成包含块。 如果属性的任何非初始值会导致元素为固定定位元素生成包含块,则指定将更改中的属性必须导致元素为固定定位元素生成包含块。 如果属性的任何非初始值会导致元素上的呈现差异(例如对文本使用不同的反混叠策略),则用户代理应该在属性在“意志更改”中指定时使用该替代呈现,以避免在属性最终更改时突然呈现差异。 例如,将不透明度设置为除1以外的任何值都会在元素上创建一个堆叠上下文。因此,设置将改变:不透明度也会创建一个堆叠上下文,即使当前不透明度仍然等于1。
在您的示例中,由于转换会导致堆栈上下文和包含块的创建,因此设置will-change: transform也将导致创建堆叠上下文和包含块,因为您向浏览器建议元素可能现在或以后进行转换,并且当它进行转换时,布局将受到影响。
https://stackoverflow.com/questions/39763121
复制相似问题