我可以设置“网格列”动画吗?

时间:2019-04-09 04:21:56

标签: html css css-transitions css-grid

我设置了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上上传了精简版本

3 个答案:

答案 0 :(得分:2)

根据Mozilla的文档https://developer.mozilla.org/en-US/docs/Web/CSS/grid-column

似乎不是您可以按照自己的意思为grid-column制作动画。

网格列的动画类型为discrete,表示没有“补间”或插值。

真是可惜。

有些变通方法(或者在其他情况下为JS繁琐),但是YMMV根据您要投入多少精力来解决。请参见此线程,例如:

animating a smooth css grid-column change

答案 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