我设置了transition: all ease-in-out 1s;
,但以同样的方式更改grid-column
的属性不适用于transition
。
这里还有其他使用动画的方法吗?
<div class="projects">
<div class="project" style="background: url(img/p1.png) center no-repeat / cover"></div>
<div class="project" style="background: url(img/p2.jpg) center no-repeat / cover"></div>
<div class="project" style="background: url(img/p3.jpg) center no-repeat / cover"></div>
<div class="project" style="background: url(img/p4.png) center no-repeat / cover"></div>
</div>
.projects {
width: 100%;
height: 500px;
display: grid;
grid-template-columns: repeat(4, minmax(100px, 1fr));
grid-auto-rows: 500px;
}
.project {
width: 100%;
transition: all ease-in-out 1s;
}
.project:nth-child(1) {
grid-column: 1;
grid-row: 1;
}
.project:nth-child(1):hover {
grid-column: 1/3;
z-index: 2;
}
我在代码笔上上传了一个精简版
Mozilla 上的文档,您似乎无法按照您的意思对grid-column
进行动画
网格列的动画类型是discrete
,这意味着没有"补间"或插值。
真是太可惜了。
有一些笨拙的(或者在其他情况下,JS重(解决方法,但YMMV取决于你想付出多少努力。例如,请参阅此线程:
为平滑的 CSS 网格列更改添加动画效果
您可以使用边距模拟此类效果,如下所示:
.projects {
width: 100%;
height: 500px;
display: grid;
grid-template-columns: repeat(4, minmax(100px, 1fr));
grid-auto-rows: 500px;
}
.project {
transition:
margin ease-in-out 1s,
z-index 0s 1s;
}
.project:nth-child(1) {
grid-column: 1;
grid-row: 1;
z-index:0;
}
.project:nth-child(1):hover {
margin-right:-200%;
z-index: 2;
}
<div class="projects">
<div class="project" style="background: url(https://picsum.photos/200/300?image=0) center no-repeat / cover"></div>
<div class="project" style="background: url(https://picsum.photos/200/300?image=1069) center no-repeat / cover"></div>
<div class="project" style="background: url(https://picsum.photos/200/300?image=5) center no-repeat / cover"></div>
<div class="project" style="background: url(https://picsum.photos/200/300?image=10) center no-repeat / cover"></div>
</div>
相关:为什么当我将鼠标悬停在 CSS 网格框上时,只有它们会扩展?
这个回复有点晚了,但不幸的是:不,这是不可能的,它可能不会成为规范的一部分,因为为了提高效率,浏览器如何显示网格还有其他特殊属性。
作为替代方案,并且出于您提供的演示的目的,可以通过 display:flex
+ flex-grow:n
完成类似的布局,其中值 n
是一个整数,可以认为等效于 nfr
。您还可以使用flex-basis
并指定可进行动画处理的%
或px
。