爬行的蜗牛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: golang Linux PHP
查看: 27|回复: 0

HTML+CSS 文本动画卡片

[复制链接]

94

主题

36

回帖

849

积分

管理员

积分
849
发表于 7 天前 | 显示全部楼层 |阅读模式
实现了一个图片叠加文本动画效果的卡片(Card)布局。当鼠标悬停在卡片上时,卡片上的图片会变为半透明,同时显示隐藏在图片上的文本内容,并且文本内容有一个从左到右的渐显动画效果,伴随着一个白色渐变背景的动画效果。

Code:HTML
  1. <!DOCTYPE html>
  2. <html lang="en">

  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>文本动画卡片</title>
  7.     <link rel="stylesheet" href="./09-文本动画卡片.css">
  8. </head>

  9. <body>
  10.     <div class="container">
  11.         <div class="card">
  12.             <img src="images/1.jpg" alt="">
  13.             <div class="text">
  14.                 <h2>How disciplined you are, how free you are.</h2>
  15.                 <p>你有多自律,就有多自由。</p>
  16.             </div>
  17.         </div>
  18.         <div class="card">
  19.             <img src="images/2.jpg" alt="">
  20.             <div class="text">
  21.                 <h2>The action to the present, the result to the time.</h2>
  22.                 <p>把行动交给现在,把结果交给时间。</p>
  23.             </div>
  24.         </div>
  25.         <div class="card">
  26.             <img src="images/3.jpg" alt="">
  27.             <div class="text">
  28.                 <h2>One more point of persistence, one less point of regret.</h2>
  29.                 <p>多一分坚持,就会少一分遗憾。</p>
  30.             </div>
  31.         </div>
  32.     </div>
  33. </body>

  34. </html>
复制代码

Code:CSS
  1. /*   
  2. * 设置全局样式,将所有元素的外边距和内边距都设置为0,  
  3. * 并设置盒模型为border-box,使得元素的宽度和高度  
  4. * 包括内容、内边距和边框,但不包括外边距。  
  5. */  
  6. * {  
  7.     margin: 0;                   /* 清除所有元素的外边距 */  
  8.     padding: 0;                 /* 清除所有元素的内边距 */  
  9.     box-sizing: border-box;      /* 设置盒模型为border-box */  
  10. }  
  11.   
  12. /*   
  13. * 设置body样式,使其占据整个视口的高度,  
  14. * 并使用Flexbox居中显示内容。  
  15. * 背景色设置为深灰色。  
  16. */  
  17. body {  
  18.     height: 100vh;               /* 视口高度 */  
  19.     display: flex;               /* 使用Flexbox布局 */  
  20.     justify-content: center;     /* 水平居中 */  
  21.     align-items: center;         /* 垂直居中 */  
  22.     background-color: #212121;   /* 背景色为深灰色 */  
  23. }  
  24.   
  25. /*   
  26. * 容器元素,使用Flexbox布局,允许内容换行。  
  27. * 内容在容器中居中显示。  
  28. */  
  29. .container {  
  30.     display: flex;               /* 使用Flexbox布局 */  
  31.     flex-wrap: wrap;             /* 允许内容换行 */  
  32.     justify-content: center;     /* 水平居中 */  
  33. }  
  34.   
  35. /*   
  36. * 卡片元素的基本样式,包括尺寸、背景色、文字颜色等。  
  37. * 设置了溢出隐藏和光标为手形,表示可点击。  
  38. * 使用相对定位以便内部元素可以绝对定位。  
  39. */  
  40. .card {  
  41.     width: 310px;                /* 卡片宽度 */  
  42.     height: 220px;               /* 卡片高度 */  
  43.     overflow: hidden;            /* 溢出内容隐藏 */  
  44.     margin: 10px;                /* 外边距 */  
  45.     background-color: #000;      /* 背景色为黑色 */  
  46.     color: #fff;                 /* 文字颜色为白色 */  
  47.     cursor: pointer;             /* 光标为手形,表示可点击 */  
  48.     position: relative;          /* 相对定位 */  
  49. }  
  50.   
  51. /*   
  52. * 卡片内的图片样式,设置图片的尺寸,并添加过渡效果。  
  53. */  
  54. .card img {  
  55.     width: 100%;                 /* 图片宽度为卡片宽度 */  
  56.     height: 100%;                /* 图片高度为卡片高度 */  
  57.     transition: 0.35s;           /* 过渡效果持续0.35秒 */  
  58. }  
  59.   
  60. /*   
  61. * 卡片内的文本容器样式,绝对定位在卡片内部,  
  62. * 并设置了内边距。  
  63. */  
  64. .card .text {  
  65.     position: absolute;          /* 绝对定位 */  
  66.     top: 30px;                   /* 距离顶部30px */  
  67.     left: 30px;                  /* 距离左侧30px */  
  68.     bottom: 30px;                /* 距离底部30px */  
  69.     right: 30px;                 /* 距离右侧30px */  
  70.     padding: 0 18px;             /* 左右内边距为18px */  
  71. }  
  72.   
  73. /*   
  74. * 文本容器前的伪元素样式,用于制作渐变效果。  
  75. * 初始状态为完全透明并位于卡片外部。  
  76. */  
  77. .card .text::before {  
  78.     content: "";                 /* 伪元素内容为空 */  
  79.     position: absolute;          /* 绝对定位 */  
  80.     top: 0;                      /* 顶部与文本容器对齐 */  
  81.     bottom: 0;                   /* 底部与文本容器对齐 */  
  82.     right: 0;                    /* 初始位置在右侧 */  
  83.     left: 100%;                  /* 初始位置完全在容器外部 */  
  84.     border-left: 4px solid rgba(255, 255, 255, 0.8); /* 左侧边框 */  
  85.     background-color: rgba(255, 255, 255, 0.5);     /* 背景色为半透明白色 */  
  86.     opacity: 0;                  /* 初始透明度为0,完全透明 */  
  87.     transition: 0.5s;            /* 过渡效果持续0.5秒 */  
  88.     transition-delay: 0.6s     /* 过渡效果开始前有0.6秒的延迟 */  
  89. }  
  90.   
  91. /*   
  92. * 卡片文本内的标题和段落样式,初始状态透明度为0,  
  93. * 使用了transform进行位置调整,并设置了过渡效果。  
  94. */  
  95. .card .text h2,  
  96. .card .text p {  
  97.     margin-bottom: 6px;          /* 底部外边距为6px */  
  98.     opacity: 0;                  /* 初始透明度为0 */  
  99.     transition: 0.35s;           /* 过渡效果持续0.35秒 */  
  100. }  
  101.   
  102. /*   
  103. * 卡片文本内的标题样式,使用了transform进行位置调整,  
  104. * 字体较轻,文本全部大写,并设置了过渡效果的延迟。  
  105. */  
  106. .card .text h2 {  
  107.     font-weight: 300;            /* 字体粗细为300 */  
  108.     text-transform: uppercase;   /* 文本转换为大写 */  
  109.     transform: translate(30%, 0%);/* 初始位置向右偏移30% */  
  110.     transition-delay: 0.3s;      /* 过渡效果开始前有0.3秒的延迟 */  
  111. }  
  112.   
  113. /*   
  114. * 标题内的重点文字样式,字体加粗。  
  115. */  
  116. .card .text h2 span {  
  117.     font-weight: 800;            /* 字体粗细为800 */  
  118. }  
  119.   
  120. /*   
  121. * 卡片文本内的段落样式,字体较轻,并使用了transform进行位置调整。  
  122. */  
  123. .card .text p {  
  124.     font-weight: 200;            /* 字体粗细为200 */  
  125.     transform: translate(0%, 30%);/* 初始位置向下偏移30% */  
  126. }  
  127.   
  128. /*   
  129. * 鼠标悬停在卡片上时,图片的透明度变为0.3。  
  130. */  
  131. .card:hover img {  
  132.     opacity: 0.3;  
  133. }  
  134.   
  135. /*   
  136. * 鼠标悬停在卡片上时,标题的透明度变为1,位置回归原位,  
  137. * 并设置了过渡效果的延迟。  
  138. */  
  139. .card:hover .text h2 {  
  140.     opacity: 1;                  /* 透明度为1 */  
  141.     transform: translate(0%, 0%); /* 位置回归原位 */  
  142.     transition-delay: 0.4s;      /* 过渡效果开始前有0.4秒的延迟 */  
  143. }  
  144.   
  145. /*   
  146. * 鼠标悬停在卡片上时,段落的透明度变为0.9,位置回归原位,  
  147. * 并设置了过渡效果的延迟。  
  148. */  
  149. .card:hover .text p {  
  150.     opacity: 0.9;                /* 透明度为0.9 */  
  151.     transform: translate(0%, 0%); /* 位置回归原位 */  
  152.     transition-delay: 0.6s;      /* 过渡效果开始前有0.6秒的延迟 */  
  153. }  
  154.   
  155. /*   
  156. * 鼠标悬停在卡片上时,文本前的伪元素背景色变为透明,  
  157. * 位置从右侧移动到左侧,透明度变为1,并立即开始过渡效果。  
  158. */  
  159. .card:hover .text::before {  
  160.     background-color: rgba(255, 255, 255, 0); /* 背景色为透明 */  
  161.     left: 0;                      /* 位置在左侧 */  
  162.     opacity: 1;                  /* 透明度为1 */  
  163.     transition-delay: 0s;         /* 过渡效果没有延迟 */  
  164. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表