我可以为"grid-column"制作动画吗?



我设置了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进行动画

处理:https://developer.mozilla.org/en-US/docs/Web/CSS/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

相关内容

  • 没有找到相关文章

最新更新