我设置了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;
}
我在codepen上上传了精简版本
答案 0 :(得分:2)
根据Mozilla的文档https://developer.mozilla.org/en-US/docs/Web/CSS/grid-column
,似乎不是您可以按照自己的意思为grid-column
制作动画。
网格列的动画类型为discrete
,表示没有“补间”或插值。
真是可惜。
有些变通方法(或者在其他情况下为JS繁琐),但是YMMV根据您要投入多少精力来解决。请参见此线程,例如:
答案 1 :(得分:0)
您可以使用如下边距来模拟这种效果:
.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>
相关:Why are only some of my CSS Grid boxes expanding when I hover over them?
答案 2 :(得分:0)
此回复稍晚,但不幸的是:不,这是不可能的,并且可能不会成为规格的一部分,因为还有其他一些特殊属性,例如出于效率考虑,浏览器如何显示网格。
作为一种选择,并且就您提供的演示而言,可以通过display:flex
+ flex-grow:n
进行相似的布局,其中值n
是一个整数,可以认为是等同于nfr
。您还可以使用flex-basis
并指定也可以设置动画的%
或px
。