• 简易表白小页面


    目录

    需求

    思路和代码

    实现效果

    进一步

    最终效果

    总结


    需求

    又是没有活的一下午......做个简单的css动画玩玩!

    很简单,把若干行不同文字的“我爱你”放在页面中,杂乱无章地动起来即可。

    思路和代码

    对于结构,需要一个父元素container,里面放许多item,这些item就是各种文字的“我爱你”。给这些item加上动画,随机设置不同的延迟时间和持续时间,这样就能产生杂乱无章的效果了。

    过于简单,直接上代码:

    html部分

    1. <div class="container">
    2. <div class="item">我爱你div>
    3. <div class="item">I Love Youdiv>
    4. <div class="item">사랑해요div>
    5. <div class="item">愛するdiv>
    6. <div class="item">EU te amodiv>
    7. <div class="item">Je t' aimediv>
    8. <div class="item">Ich liebe dichdiv>
    9. div>

    css部分

    1. .container {
    2. width: 500px;
    3. height: 700px;
    4. margin: auto;
    5. background-color: pink;
    6. }
    7. .item {
    8. width: 300px;
    9. height: 50px;
    10. font-size: 30px;
    11. font-family: 'Courier New', Courier, monospace;
    12. color: white;
    13. }
    14. .item:nth-child(1) {
    15. animation: move 10s 0.5s alternate-reverse linear infinite both;
    16. }
    17. .item:nth-child(2) {
    18. animation: move 8s 1s alternate-reverse linear infinite both;
    19. }
    20. .item:nth-child(3) {
    21. animation: move 7s 0.8s alternate-reverse linear infinite both;
    22. }
    23. .item:nth-child(4) {
    24. animation: move 6s 0.7s alternate-reverse linear infinite both;
    25. }
    26. .item:nth-child(5) {
    27. animation: move 10s 1.1s alternate-reverse linear infinite both;
    28. }
    29. .item:nth-child(6) {
    30. animation: move 9s 1.3s alternate-reverse linear infinite both;
    31. }
    32. .item:nth-child(7) {
    33. animation: move 5s 1s alternate-reverse linear infinite both;
    34. }
    35. @keyframes move {
    36. from {
    37. transform: translate(0);
    38. }
    39. 10% {
    40. transform: translate(300px, 40px);
    41. }
    42. 20% {
    43. transform: translate(0px, 80px);
    44. }
    45. 30% {
    46. transform: translate(300px, 120px);
    47. }
    48. 40% {
    49. transform: translate(0px, 160px);
    50. }
    51. 50% {
    52. transform: translate(300px, 200px);
    53. }
    54. 60% {
    55. transform: translate(0px, 240px);
    56. }
    57. 70% {
    58. transform: translate(300px, 280px);
    59. }
    60. 80% {
    61. transform: translate(0px, 320px);
    62. }
    63. 90% {
    64. transform: translate(300px, 360px);
    65. }
    66. 100% {
    67. transform: translate(0px, 400px);
    68. }
    69. }

    这样基本就能搭出来了。看效果。

    实现效果

     效果还算可以,毕竟只是弄着玩。

    进一步

    如果现在我要求,鼠标hover某个item的时候,它就变色,同时暂停动画,应该怎么办?

    很简单,直接添加一个hover伪类即可。修改后的css:

    1. .container {
    2. width: 500px;
    3. height: 700px;
    4. margin: auto;
    5. background-color: pink;
    6. }
    7. .item {
    8. width: 300px;
    9. height: 50px;
    10. font-size: 30px;
    11. font-family: 'Courier New', Courier, monospace;
    12. color: white;
    13. }
    14. .item:hover {
    15. color: antiquewhite;
    16. cursor: pointer;
    17. animation-play-state: paused;
    18. }
    19. .item:nth-child(1) {
    20. animation: move 10s 0.5s alternate-reverse linear infinite both;
    21. }
    22. .item:nth-child(2) {
    23. animation: move 8s 1s alternate-reverse linear infinite both;
    24. }
    25. .item:nth-child(3) {
    26. animation: move 7s 0.8s alternate-reverse linear infinite both;
    27. }
    28. .item:nth-child(4) {
    29. animation: move 6s 0.7s alternate-reverse linear infinite both;
    30. }
    31. .item:nth-child(5) {
    32. animation: move 10s 1.1s alternate-reverse linear infinite both;
    33. }
    34. .item:nth-child(6) {
    35. animation: move 9s 1.3s alternate-reverse linear infinite both;
    36. }
    37. .item:nth-child(7) {
    38. animation: move 5s 1s alternate-reverse linear infinite both;
    39. }
    40. @keyframes move {
    41. from {
    42. transform: translate(0);
    43. }
    44. 10% {
    45. transform: translate(300px, 40px);
    46. }
    47. 20% {
    48. transform: translate(0px, 80px);
    49. }
    50. 30% {
    51. transform: translate(300px, 120px);
    52. }
    53. 40% {
    54. transform: translate(0px, 160px);
    55. }
    56. 50% {
    57. transform: translate(300px, 200px);
    58. }
    59. 60% {
    60. transform: translate(0px, 240px);
    61. }
    62. 70% {
    63. transform: translate(300px, 280px);
    64. }
    65. 80% {
    66. transform: translate(0px, 320px);
    67. }
    68. 90% {
    69. transform: translate(300px, 360px);
    70. }
    71. 100% {
    72. transform: translate(0px, 400px);
    73. }
    74. }

    本来兴高采烈去试试,结果发现,hover的时候,文字颜色确实变了,但动画没有暂停。

    这是为什么呢?我以为是代码写错了,但仔细检查,并没有错误。

    后来灵光一动,发现了问题。我把hover写在了item:nth-child的前面。在hover中设置动画的状态是暂停,但这子元素选择器中设置的状态是running,覆盖了前面的暂停。因此,必须把hover放在子元素伪类选择器的后面。

    修改代码:

    1. .container {
    2. width: 500px;
    3. height: 700px;
    4. margin: auto;
    5. background-color: pink;
    6. }
    7. .item {
    8. width: 300px;
    9. height: 50px;
    10. font-size: 30px;
    11. font-family: 'Courier New', Courier, monospace;
    12. color: white;
    13. }
    14. .item:nth-child(1) {
    15. animation: move 10s 0.5s alternate-reverse linear infinite both;
    16. }
    17. .item:nth-child(2) {
    18. animation: move 8s 1s alternate-reverse linear infinite both;
    19. }
    20. .item:nth-child(3) {
    21. animation: move 7s 0.8s alternate-reverse linear infinite both;
    22. }
    23. .item:nth-child(4) {
    24. animation: move 6s 0.7s alternate-reverse linear infinite both;
    25. }
    26. .item:nth-child(5) {
    27. animation: move 10s 1.1s alternate-reverse linear infinite both;
    28. }
    29. .item:nth-child(6) {
    30. animation: move 9s 1.3s alternate-reverse linear infinite both;
    31. }
    32. .item:nth-child(7) {
    33. animation: move 5s 1s alternate-reverse linear infinite both;
    34. }
    35. @keyframes move {
    36. from {
    37. transform: translate(0);
    38. }
    39. 10% {
    40. transform: translate(300px, 40px);
    41. }
    42. 20% {
    43. transform: translate(0px, 80px);
    44. }
    45. 30% {
    46. transform: translate(300px, 120px);
    47. }
    48. 40% {
    49. transform: translate(0px, 160px);
    50. }
    51. 50% {
    52. transform: translate(300px, 200px);
    53. }
    54. 60% {
    55. transform: translate(0px, 240px);
    56. }
    57. 70% {
    58. transform: translate(300px, 280px);
    59. }
    60. 80% {
    61. transform: translate(0px, 320px);
    62. }
    63. 90% {
    64. transform: translate(300px, 360px);
    65. }
    66. 100% {
    67. transform: translate(0px, 400px);
    68. }
    69. }
    70. .item:hover {
    71. color: antiquewhite;
    72. cursor: pointer;
    73. animation-play-state: paused;
    74. }

    最终效果

    很好!

    总结

    一个非常非常简单的小案例。以后记住,在加hover的时候,尽量放在后面,以防被其他样式覆盖。

  • 相关阅读:
    HJS-DE1/2时间继电器
    【CS61A】学习笔记
    “第六届世界声博会暨2023科大讯飞全球1024开发者节”开幕式回顾及舆情问题
    Python 查询 IP 地址段,并获取 Hostname
    题目:2706.购买两块巧克力
    20-指针-2
    java计算机毕业设计高校学生社团管理源码+数据库+系统+lw文档+mybatis+运行部署
    腾讯云短信申请
    常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍
    LightDB中的表
  • 原文地址:https://blog.csdn.net/weixin_45792464/article/details/126035894