第9章:CSS动画和过渡 --[CSS零基础入门]

1.过渡

CSS 过渡(Transitions)是一种简单而有效的方法,用于在元素的状态发生变化时创建平滑的视觉效果。以下是五个具体的例子,展示了如何使用过渡来增强用户交互体验。

示例 1: 按钮颜色和大小变化

这个例子展示了当用户将鼠标悬停在一个按钮上时,按钮的颜色、大小以及边框半径会发生平滑的变化。

html 复制代码
<!-- HTML -->
<button class="transition-button">Hover Me</button>

<style>
.transition-button {
  padding: 10px 20px;
  font-size: 16px;
  color: white;
  background-color: #3498db;
  border: none;
  border-radius: 5px;
  cursor: pointer;
  transition: background-color 0.3s ease, transform 0.3s ease, border-radius 0.3s ease;
}

.transition-button:hover {
  background-color: #2ecc71;
  transform: scale(1.1); /* 放大按钮 */
  border-radius: 20px; /* 更圆的角 */
}
</style>

解释:通过 transition 属性设置多个属性的过渡效果,包括背景颜色、变换(用于放大)和边框半径,以实现更丰富的悬停效果。

示例 2: 卡片翻转效果

此示例演示了如何创建一个卡片翻转的效果,当用户悬停在卡片上时,它会从正面翻转到背面。

html 复制代码
<!-- HTML -->
<div class="card">
  <div class="card-inner">
    <div class="card-front">Front Side</div>
    <div class="card-back">Back Side</div>
  </div>
</div>

<style>
.card {
  perspective: 1000px;
}

.card-inner {
  width: 200px;
  height: 300px;
  transition: transform 0.6s;
  transform-style: preserve-3d;
}

.card:hover .card-inner {
  transform: rotateY(180deg);
}

.card-front, .card-back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
}

.card-front {
  background-color: #3498db;
  color: white;
}

.card-back {
  background-color: #2ecc71;
  color: white;
  transform: rotateY(180deg);
}
</style>

解释:利用 transformtransition 实现3D旋转效果,结合 backface-visibility 来隐藏不必要的面,从而创建出卡片翻转的感觉。

示例 3: 菜单项展开与收缩

这里展示了一个简单的菜单项,在点击或悬停时会逐渐展开显示更多内容。

html 复制代码
<!-- HTML -->
<ul class="menu">
  <li class="menu-item">Menu Item 1</li>
  <li class="menu-item">Menu Item 2</li>
  <li class="menu-item">Menu Item 3</li>
</ul>

<style>
.menu {
  list-style: none;
  padding: 0;
}

.menu-item {
  padding: 10px;
  background-color: #f4f4f4;
  margin: 5px 0;
  overflow: hidden;
  max-height: 50px;
  transition: max-height 0.5s ease;
}

.menu-item:hover {
  min-height: 150px;
}
</style>

解释:通过改变 min-height 并应用过渡效果,可以实现菜单项的高度变化,给人一种展开或收缩的感觉。

示例 4: 文字颜色和阴影变化

这个例子说明了如何在用户悬停时改变文字的颜色,并添加或移除文本阴影,以增加视觉吸引力。

html 复制代码
<!-- HTML -->
<p class="text-effect">Hover over this text to see the effect.</p>

<style>
.text-effect {
  font-size: 24px;
  color: black;
  transition: color 0.3s ease, text-shadow 0.3s ease;
}

.text-effect:hover {
  color: #2c3e50;
  text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5);
}
</style>

解释 :使用 transition 来定义颜色和文本阴影的变化速度及方式,使得文字在悬停时显得更加生动。

示例 5: 图像模糊和缩放效果

最后一个例子展示了如何为图片添加模糊和缩放效果,当用户将鼠标悬停在图像上时,图像会变得稍微模糊并放大。

html 复制代码
<!-- HTML -->
<img src="path/to/image.jpg" alt="Sample Image" class="image-effect">

<style>
.image-effect {
  width: 300px;
  filter: blur(0px);
  transition: filter 0.5s ease, transform 0.5s ease;
}

.image-effect:hover {
  filter: blur(2px);
  transform: scale(1.1);
}
</style>

解释 :结合 filtertransform 属性,通过 transition 实现了图片的模糊和缩放过渡效果,增强了互动性。


这些例子展示了 CSS 过渡的强大功能,可以帮助你轻松地为网页元素添加动态和交互式的视觉效果。无论是按钮、卡片、菜单还是文本和图像,都可以通过适当的过渡设计变得更加吸引人。

2.动画

CSS 动画(Animations)允许你创建复杂的视觉效果,通过定义关键帧(@keyframes)来控制元素在不同时间点上的样式变化。以下是五个具体的例子,展示了如何使用 CSS 动画为网页添加生动有趣的互动元素。

示例 1: 文字颜色循环变换

这个例子展示了一个文本标签的颜色每隔几秒就会平滑地从一种颜色过渡到另一种颜色,形成无限循环的彩虹效果。

html 复制代码
<!-- HTML -->
<h1 class="rainbow-text">Rainbow Text</h1>

<style>
.rainbow-text {
  font-size: 48px;
  animation: colorChange 6s infinite;
}

@keyframes colorChange {
  0% { color: red; }
  20% { color: orange; }
  40% { color: yellow; }
  60% { color: green; }
  80% { color: blue; }
  100% { color: purple; }
}
</style>

解释:通过 @keyframes 定义了一系列的颜色变化,并通过 animation 属性将这些变化应用到 .rainbow-text 元素上,实现无限循环的颜色变换效果。

示例 2: 滑入屏幕的图片

此示例演示了如何让一张图片从屏幕外滑入,并最终停在页面中央,营造出吸引人的进入效果。

html 复制代码
<!-- HTML -->
<img src="path/to/image.jpg" alt="Sliding Image" class="sliding-image">

<style>
.sliding-image {
  position: absolute;
  top: 50%;
  left: -100%;
  width: 300px;
  animation: slideIn 2s forwards;
}

@keyframes slideIn {
  from { left: -100%; }
  to { left: 50%; transform: translateX(-50%); }
}
</style>

解释 :使用绝对定位使图像初始位置位于屏幕左侧外部,然后通过 @keyframesanimation 将其水平滑动到页面中心。

示例 3: 脉冲按钮

这里展示了一个按钮,当页面加载后会周期性地放大和缩小,给人一种"脉搏跳动"的感觉,吸引用户的注意力。

html 复制代码
<!-- HTML -->
<button class="pulse-button">Pulse Button</button>

<style>
.pulse-button {
  padding: 10px 20px;
  font-size: 16px;
  color: white;
  background-color: #3498db;
  border: none;
  border-radius: 5px;
  cursor: pointer;
  animation: pulse 2s infinite ease-in-out;
}

@keyframes pulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.1); }
}
</style>

解释:通过定义 @keyframes 中的关键帧,使得按钮在 0%100% 时保持原始大小,在 50% 时稍微放大,从而产生脉冲效果。

示例 4: 翻页动画

这个例子模拟了书页翻动的效果,当用户悬停在一个卡片上时,它会像翻开一本书一样旋转并显示背面内容。

html 复制代码
<!-- HTML -->
<div class="flip-card">
  <div class="flip-card-inner">
    <div class="flip-card-front">Front Side</div>
    <div class="flip-card-back">Back Side</div>
  </div>
</div>

<style>
.flip-card {
  perspective: 1000px;
}

.flip-card-inner {
  width: 200px;
  height: 300px;
  transition: transform 0.6s;
  transform-style: preserve-3d;
}

.flip-card:hover .flip-card-inner {
  transform: rotateY(180deg);
}

.flip-card-front, .flip-card-back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 24px;
  color: white;
}

.flip-card-front {
  background-color: #3498db;
}

.flip-card-back {
  background-color: #2ecc71;
  transform: rotateY(180deg);
}
</style>

解释 :利用 transformtransition 实现3D旋转效果,结合 backface-visibility 来隐藏不必要的面,从而创建出卡片翻转的感觉。

示例 5: 星星闪烁效果

最后一个例子展示了如何创建一个星星闪烁的效果,星星会随机地亮起和熄灭,模仿夜空中星星闪烁的样子。

html 复制代码
<!-- HTML -->
<div class="star-field"></div>

<style>
.star-field {
  position: relative;
  width: 100vw;
  height: 100vh;
  background: black;
  overflow: hidden;
}

.star-field::before,
.star-field::after {
  content: '';
  position: absolute;
  width: 10px;
  height: 10px;
  background: white;
  border-radius: 50%;
  animation: twinkle 2s infinite alternate;
}

.star-field::before {
  top: 20%;
  left: 40%;
  animation-delay: 0.5s;
}

.star-field::after {
  bottom: 60%;
  right: 80%;
}

@keyframes twinkle {
  0% { opacity: 0.2; }
  100% { opacity: 1; }
}
</style>

解释 :使用伪元素 ::before::after 创建两个"星星",并通过 @keyframes 定义它们的透明度变化,以模拟闪烁效果。此外,还设置了不同的 animation-delay 值来确保每个星星的闪烁不是同步的。


这些例子展示了 CSS 动画的强大功能,可以帮助你轻松地为网页元素添加动态和交互式的视觉效果。无论是文字、图片、按钮还是更复杂的效果,都可以通过适当的动画设计变得更加吸引人。

3.变形

CSS 变形(Transform)功能允许开发者通过旋转、缩放、倾斜和平移等操作来改变元素的外观。下面将给出五个使用 CSS transform 属性的示例,每个示例都将展示一种不同的变形效果。

示例 1: 元素的旋转

此示例展示了如何使一个方块元素围绕其中心点旋转。

html 复制代码
<!-- HTML -->
<div class="rotate-box"></div>

<style>
.rotate-box {
  width: 100px;
  height: 100px;
  background-color: #3498db;
  margin: 50px;
  transition: transform 0.6s;
}

/* 当鼠标悬停在元素上时 */
.rotate-box:hover {
  transform: rotate(45deg); /* 顺时针旋转45度 */
}
</style>

解释:当用户将鼠标悬停在 .rotate-box 上时,它会顺时针旋转45度。

示例 2: 缩放图片

这个例子演示了如何让一张图片在用户悬停时放大,营造出放大的视觉效果。

html 复制代码
<!-- HTML -->
<img src="path/to/image.jpg" alt="Scaling Image" class="scaling-image">

<style>
.scaling-image {
  width: 300px;
  transition: transform 0.3s ease-in-out;
}

/* 当鼠标悬停在图像上时 */
.scaling-image:hover {
  transform: scale(1.1); /* 放大1.1倍 */
}
</style>

解释 :通过 scale() 函数,当用户悬停在图像上时,它会被放大到原来的1.1倍大小。

示例 3: 倾斜文本

这里展示了一个文本标签被倾斜显示的例子,给予了一种非传统的排版风格。

html 复制代码
<!-- HTML -->
<h1 class="skew-text">Skewed Text</h1>

<style>
.skew-text {
  font-size: 48px;
  color: white;
  background-color: #e74c3c;
  padding: 10px 20px;
  transform: skewX(-10deg); /* 沿X轴倾斜-10度 */
}
</style>

解释:skewX() 函数用于沿水平轴(X轴)倾斜文本。在这个例子中,文本向左下方倾斜了10度。

示例 4: 平移元素

这个例子展示了如何使用 translate() 函数来移动一个元素的位置,而不影响文档流中的其他元素。

html 复制代码
<!-- HTML -->
<div class="translated-box"></div>

<style>
.translated-box {
  width: 100px;
  height: 100px;
  background-color: #2ecc71;
  position: absolute;
  top: 50px;
  left: 50px;
  transition: transform 0.6s;
}

/* 当鼠标悬停在元素上时 */
.translated-box:hover {
  transform: translate(100px, 100px); /* 向右和向下各移动100像素 */
}
</style>

解释translate() 函数可以用来沿X轴和Y轴平移元素。在这个例子中,.translated-box 在用户悬停时会向右和向下各移动100像素。

示例 5: 组合变换

最后一个例子展示了如何结合多种变形效果,并利用 transition 来创建流畅的动画效果。

html 复制代码
<!-- HTML -->
<div class="combined-transform"></div>

<style>
.combined-transform {
  width: 100px;
  height: 100px;
  background-color: #f1c40f;
  margin: 50px;
  transition: transform 0.6s;
}

/* 当鼠标悬停在元素上时 */
.combined-transform:hover {
  transform: rotate(45deg) scale(1.2) translate(50px, -50px) skew(10deg, 10deg);
  /* 旋转、放大、平移并倾斜 */
}
</style>

解释 :通过在 transform 属性中指定多个变形函数,可以同时应用旋转、缩放、平移和倾斜的效果。transition 确保了这些变化是渐进且平滑的。


以上五个示例展示了 CSS transform 属性的不同用法,从简单的旋转和缩放到更复杂的组合变换。这些变形效果不仅增加了网页的互动性和趣味性,还能提升用户体验。你可以根据需要调整这些属性的具体值,以实现你想要的设计效果。

相关推荐
灯火不休ᝰ14 分钟前
前端处理pdf文件流,展示pdf
前端·pdf
智践行16 分钟前
Trae开发实战之转盘小程序
前端·trae
最新资讯动态22 分钟前
DialogHub上线OpenHarmony开源社区,高效开发鸿蒙应用弹窗
前端
lvbb6631 分钟前
框架修改思路
前端·javascript·vue.js
树上有只程序猿34 分钟前
Java程序员需要掌握的技术
前端
从零开始学安卓37 分钟前
Kotlin(三) 协程
前端
阿镇吃橙子40 分钟前
一些手写及业务场景处理问题汇总
前端·算法·面试
庸俗今天不摸鱼41 分钟前
【万字总结】前端全方位性能优化指南(九)——FSP(First Screen Paint)像素级分析、RUM+合成监控、Lighthouse CI
前端·性能优化
逆袭的小黄鸭41 分钟前
JavaScript:作用域与作用域链的底层逻辑
前端·javascript·面试