Skip to content

过渡效果(transition,让样式变化更流畅)

20.1 过渡属性

核心过渡属性

属性描述示例值
transition-property指定要过渡的CSS属性width, height, color, opacity
transition-duration过渡的持续时间0.5s, 1000ms
transition-timing-function过渡的速度曲线ease, linear, ease-in, ease-out, ease-in-out
transition-delay过渡开始前的延迟时间0s, 0.2s

语法

css
元素 {
  transition-property: width;
  transition-duration: 0.5s;
  transition-timing-function: ease;
  transition-delay: 0.1s;
}

20.2 过渡简写

语法

css
元素 {
  transition: 属性 持续时间 速度曲线 延迟时间;
}

示例

css
/* 简写形式 */
.element {
  transition: all 0.3s ease 0s;
}

/* 等价于 */
.element {
  transition-property: all;
  transition-duration: 0.3s;
  transition-timing-function: ease;
  transition-delay: 0s;
}

多个属性的过渡

css
/* 多个属性的过渡 */
.element {
  transition: 
    width 0.3s ease,
    height 0.5s ease-in,
    background-color 0.3s ease-out;
}

20.3 常用过渡场景

鼠标悬浮效果

css
.button {
  background-color: #3498db;
  transition: background-color 0.3s ease;
}

.button:hover {
  background-color: #2980b9;
}

按钮点击效果

css
.button {
  transform: scale(1);
  transition: transform 0.2s ease;
}

.button:active {
  transform: scale(0.95);
}

元素显示隐藏

css
.modal {
  opacity: 0;
  visibility: hidden;
  transition: 
    opacity 0.3s ease,
    visibility 0.3s ease;
}

.modal.show {
  opacity: 1;
  visibility: visible;
}

20.4 新手避坑

过渡只作用于“可变化的属性”

可过渡的属性

  • 颜色相关:color, background-color, border-color
  • 尺寸相关:width, height, padding, margin
  • 位置相关:transform (translate, scale, rotate)
  • 透明度:opacity
  • 边框:border-radius, box-shadow

不可过渡的属性

  • display (block/inline/none)
  • visibility (visible/hidden)
  • position (static/relative/absolute)

注意事项

  1. 初始状态:确保元素有初始值
  2. 最终状态:确保元素有明确的最终值
  3. 性能:避免过渡太多属性,优先使用 transform 和 opacity

20.5 实战:制作悬浮变色按钮、平滑缩放元素

实战目标

创建带有过渡效果的按钮和元素。

实战步骤

  1. 创建HTML文件
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>CSS过渡效果实战</title>
  <style>
    /* 在这里添加CSS样式 */
  </style>
</head>
<body>
  <div class="container">
    <h1>CSS过渡效果实战</h1>
    
    <!-- 悬浮变色按钮 -->
    <section class="demo-section">
      <h2>悬浮变色按钮</h2>
      <button class="color-btn">悬停变色</button>
      <button class="border-btn">边框变化</button>
      <button class="shadow-btn">阴影变化</button>
    </section>
    
    <!-- 平滑缩放元素 -->
    <section class="demo-section">
      <h2>平滑缩放元素</h2>
      <div class="scale-container">
        <div class="scale-item">缩放效果</div>
        <div class="rotate-item">旋转效果</div>
        <div class="translate-item">位移效果</div>
      </div>
    </section>
  </div>
</body>
</html>
  1. 添加CSS样式
css
/* 重置样式 */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: "Microsoft YaHei", Arial, sans-serif;
  background-color: #f5f5f5;
  padding: 50px 20px;
}

.container {
  max-width: 800px;
  margin: 0 auto;
}

h1 {
  text-align: center;
  color: #333;
  margin-bottom: 40px;
}

.demo-section {
  margin-bottom: 40px;
  padding: 30px;
  background-color: white;
  border-radius: 10px;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}

.demo-section h2 {
  color: #555;
  margin-bottom: 20px;
  padding-bottom: 10px;
  border-bottom: 2px solid #ddd;
}

/* 悬浮变色按钮 */
.color-btn, .border-btn, .shadow-btn {
  padding: 12px 30px;
  border: none;
  border-radius: 25px;
  color: white;
  font-size: 16px;
  cursor: pointer;
  margin: 10px;
  transition: all 0.3s ease;
}

.color-btn {
  background-color: #3498db;
}

.color-btn:hover {
  background-color: #2980b9;
  transform: translateY(-3px);
  box-shadow: 0 4px 8px rgba(52, 152, 219, 0.3);
}

.border-btn {
  background-color: transparent;
  color: #3498db;
  border: 2px solid #3498db;
}

.border-btn:hover {
  background-color: #3498db;
  color: white;
  border-radius: 5px;
}

.shadow-btn {
  background-color: #e74c3c;
  box-shadow: 0 2px 4px rgba(231, 76, 60, 0.3);
}

.shadow-btn:hover {
  box-shadow: 0 6px 12px rgba(231, 76, 60, 0.4);
  transform: translateY(-2px);
}

/* 平滑缩放元素 */
.scale-container {
  display: flex;
  gap: 30px;
  justify-content: center;
  flex-wrap: wrap;
}

.scale-item, .rotate-item, .translate-item {
  width: 150px;
  height: 150px;
  background-color: #3498db;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 10px;
  font-size: 16px;
  transition: all 0.3s ease;
  cursor: pointer;
}

.scale-item:hover {
  transform: scale(1.1);
  background-color: #2980b9;
}

.rotate-item:hover {
  transform: rotate(15deg);
  background-color: #e74c3c;
}

.translate-item:hover {
  transform: translate(10px, -10px);
  background-color: #2ecc71;
}
  1. 运行页面:在浏览器中打开文件,观察效果

预期效果

  • 悬浮变色按钮:不同样式的按钮,悬停时会有颜色、边框或阴影的平滑过渡
  • 平滑缩放元素:三个元素,悬停时分别会有缩放、旋转和位移效果

© 2026 编程马·菜鸟教程 版权所有