目录
目录
示例 1:展开侧边栏
示例 2:展开面板
示例 3:添加行和列
更多示例
首页 web前端 css教程 动画CSS网格(如何示例)

动画CSS网格(如何示例)

Mar 09, 2025 pm 01:11 PM

Animating CSS Grid (How To   Examples)

CSS Grid 的 grid-template-rowsgrid-template-columns 属性现在可在所有主流浏览器中进行动画效果处理!事实上,CSS Grid 长期以来一直支持动画,因为它已内置于 CSS Grid 布局模块级别 1 规范中。

但直到最近,所有三大浏览器才全面支持对这些网格属性进行动画处理。让我们来看几个例子,激发您的创意吧!

目录

  • 目录
  • 示例 1:展开侧边栏
  • 示例 2:展开面板
  • 示例 3:添加行和列
  • 更多示例

示例 1:展开侧边栏

首先,这就是我们要讨论的内容:

一个简单的两列网格。以前,您可能不会使用 CSS Grid 来构建它,因为不支持动画和过渡,但如果您希望左侧列(可能是侧边栏导航)在悬停时展开呢?现在,这是可能的。

我知道你在想什么:“动画 CSS 属性?小菜一碟,我已经做了很多年了!”我也是。但是,在尝试一个特定的用例时,我遇到一个有趣的障碍。

因此,我们想要转换网格本身(特别是示例中 .grid 类上设置的 grid-template-columns)。但左侧列(.left)是需要 :hover 伪类的选择器。虽然 JavaScript 可以轻松解决这个难题——谢谢,但不用了——我们可以只用 CSS 来实现它。

让我们逐步讲解整个过程,从 HTML 开始。实际上非常标准……一个有两列的网格。

<div class="grid">
  <div class="left"></div>
  <div class="right"></div>
</div>
登录后复制
登录后复制

撇开装饰性 CSS 不谈,您首先需要在父容器(.grid)上设置 display: grid

.grid {
  display: grid;
}
登录后复制
登录后复制

接下来,我们可以使用 grid-template-columns 属性定义和调整两列的大小。我们将左侧列设置得非常窄,稍后在悬停时增加其宽度。右侧列将占据其余空间,这要感谢 auto 关键字。

.grid {
  display: grid;
  grid-template-columns: 48px auto;
}
登录后复制
登录后复制

我们知道我们要为它制作动画,所以让我们在添加动画的同时也添加一个过渡效果,这样状态之间的变化就会平滑且明显。

.grid {
  display: grid;
  grid-template-columns: 48px auto;
  transition: 300ms; /* 根据需要更改 */
}
登录后复制

.grid 就完成了!剩下的就是应用悬停状态。具体来说,我们将覆盖 grid-template-columns 属性,以便左侧列在悬停时占据更大的空间。

仅此一项并没有那么有趣,尽管 CSS Grid 现在支持动画和过渡非常棒。更有趣的是,我们可以使用相对较新的 :has() 伪类来在子元素(.left)悬停时设置父容器(.grid)的样式。

<div class="grid">
  <div class="left"></div>
  <div class="right"></div>
</div>
登录后复制
登录后复制

用简单的英语来说,这就是说:“如果 .grid 容器包含一个名为 .left 的元素并且该元素处于悬停状态,则对 .grid 容器执行某些操作。”这就是为什么 :has() 通常被称为“父”选择器。我们终于可以根据它包含的子元素来选择父元素——不需要 JavaScript!

因此,让我们在悬停时将 .left 列的宽度增加到 30%。.right 列将继续占据所有剩余空间:

.grid {
  display: grid;
}
登录后复制
登录后复制

我们也可以使用 CSS 变量,这在外观上可能更简洁,也可能不简洁,这取决于您的个人喜好(或者您可能已经在项目中使用 CSS 变量了):

.grid {
  display: grid;
  grid-template-columns: 48px auto;
}
登录后复制
登录后复制

我非常喜欢 CSS 网格现在可以制作动画,但事实上我们只需九行 CSS 代码就能构建这个特定示例,这更令人惊叹。

这是 Olivia Ng 的另一个示例——概念相似,但包含内容(点击导航图标):

示例 2:展开面板

此示例转换网格容器(列宽),也转换各个列(其背景颜色)。它非常适合在悬停时提供更多内容。

值得记住的是,repeat() 函数有时会产生错误的过渡,这就是为什么我单独设置每列的宽度(即 grid-template-columns: 1fr 1fr 1fr)。

示例 3:添加行和列

此示例会动画地“添加”一列到网格中。但是——你猜对了——这种情况也有一个陷阱。要求是“新”列不能隐藏(即设置为 display: none),并且 CSS Grid 必须在将它的宽度设置为 0fr 时承认它的存在。

因此,对于一个三列网格——grid-template-columns: 1fr 1fr 0fr(是的,即使值为 0 也必须声明单位!)会正确地转换为 grid-template-columns: 1fr 1fr 1fr,但 grid-template-columns: 1fr 1fr 不会。事后看来,考虑到我们对过渡工作原理的了解,这实际上是完全合理的。

这是 Michelle Barker 的另一个示例——相同概念,但带有一列和更多炫酷效果。确保以全屏模式运行此示例,因为它实际上是响应式的(没有技巧,只是好的设计!)。

更多示例

为什么不呢?

这个“动画蒙德里安”是 Chrome DevRel 制作的动画 CSS 网格的最初概念证明。grid-rowgrid-column 使用 span 关键字创建您眼前看到的布局,然后使用 CSS 动画对 grid-template-rowgrid-template-column 进行动画处理。它并没有看起来那么复杂!

相同概念,但更多 Michelle Barker 的炫酷效果。可以做一个不错的加载微调器?

最后回顾一下怀旧(这里显示我的年龄),Andrew Harvard 制作的不太像网格的动画 CSS 网格。同样——相同概念——你只是看不到其他网格项目。但别担心,它们在那里。

以上是动画CSS网格(如何示例)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

如何将CSS网格用于粘头和页脚 如何将CSS网格用于粘头和页脚 Apr 02, 2025 pm 06:29 PM

CSS网格是一系列属性的集合,旨在使布局比以往任何时候都容易。像任何东西一样,那里有一点学习曲线,但是网格是

Google字体可变字体 Google字体可变字体 Apr 09, 2025 am 10:42 AM

我看到Google字体推出了新设计(Tweet)。与上一次大型重新设计相比,这感觉更加迭代。我几乎无法分辨出区别

See all articles