代码 纯 CSS 实现一个笔记本电脑的组装动画

2024-11-17 04:44:14 +0800 CST views 505

#纯 CSS 实现一个笔记本电脑的组装动画
本文介绍了如何使用纯CSS实现一个笔记本电脑的组装动画。通过HTML和CSS代码,创建了一个具有动态效果的MacBook模型,展示了其显示屏、键盘和加载动画的实现方式。文章包含了详细的CSS样式和动画效果,适合对网页设计和动画感兴趣的开发者。
images

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="stylesheet" href="./style.css" />
  </head>
  <body>
    <div class="container">
      <div class="macbook">
        <div class="macbook__topBord">
          <div class="macbook__display">
            <div class="macbook__load"></div>
          </div>
        </div>
        <div class="macbook__underBord">
          <div class="macbook__keybord">
            <div class="keybord">
              <div class="keybord__touchbar"></div>
              <ul class="keybord__keyBox">
                <li class="keybord__key key--01"></li>
                <li class="keybord__key key--02"></li>
                <li class="keybord__key key--03"></li>
                <li class="keybord__key key--04"></li>
                <li class="keybord__key key--05"></li>
                <li class="keybord__key key--06"></li>
                <li class="keybord__key key--07"></li>
                <li class="keybord__key key--08"></li>
                <li class="keybord__key key--09"></li>
                <li class="keybord__key key--10"></li>
                <li class="keybord__key key--11"></li>
                <li class="keybord__key key--12"></li>
                <li class="keybord__key key--13"></li>
              </ul>
              <ul class="keybord__keyBox--under">
                <li class="keybord__key key--14"></li>
                <li class="keybord__key key--15"></li>
                <li class="keybord__key key--16"></li>
                <li class="keybord__key key--17"></li>
                <li class="keybord__key key--18"></li>
                <li class="keybord__key key--19"></li>
                <li class="keybord__key key--20"></li>
                <li class="keybord__key key--21"></li>
                <li class="keybord__key key--22"></li>
                <li class="keybord__key key--23"></li>
                <li class="keybord__key key--24"></li>
              </ul>
            </div>
          </div>
        </div>
      </div>
    </div>
    <style>
      .container {
        display: flex;
        justify-content: center;
        align-items: center;
        width: 100%;
        height: 100vh;
      }
      .macbook {
        position: relative;
        width: 228px;
        height: 260px;
      }
      .macbook__topBord {
        position: absolute;
        z-index: 0;
        top: 34px;
        left: 0;
        width: 128px;
        height: 116px;
        border-radius: 6px;
        transform-origin: center;
        background: linear-gradient(-135deg, #c8c9c9 52%, #8c8c8c 56%);
        transform: scale(0) skewY(-30deg);
        animation: topbord 0.4s 1.7s ease-out;
        animation-fill-mode: forwards;
      }
      .macbook__topBord::before {
        content: "";
        position: absolute;
        z-index: 2;
        top: 8px;
        left: 6px;
        width: 100%;
        height: 100%;
        border-radius: 6px;
        background: #000;
      }
      .macbook__topBord::after {
        content: "";
        position: absolute;
        z-index: 1;
        bottom: -7px;
        left: 8px;
        width: 168px;
        height: 12px;
        transform-origin: left bottom;
        transform: rotate(-42deg) skew(-4deg);
        background: linear-gradient(-135deg, #c8c9c9 52%, #8c8c8c 56%);
      }
      .macbook__display {
        position: absolute;
        z-index: 10;
        top: 17px;
        left: 12px;
        z-index: 2;
        width: calc(100% - 12px);
        height: calc(100% - 18px);
        background: linear-gradient(45deg, #3ba9ff, #c82aff);
      }
      .macbook__display::before {
        content: "";
        position: absolute;
        z-index: 5;
        top: -9px;
        left: -6px;
        width: calc(100% + 12px);
        height: calc(100% + 18px);
        border-radius: 6px;
        background: linear-gradient(
          60deg,
          rgba(255, 255, 255, 0) 60%,
          rgba(255, 255, 255, 0.3) 60%
        );
      }
      .macbook__load {
        position: relative;
        width: 100%;
        height: 100%;
        background: #222;
        animation: display 0.4s 4.3s ease;
        opacity: 1;
        animation-fill-mode: forwards;
      }
      .macbook__load:before {
        content: "";
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        margin: auto;
        width: 80px;
        height: 6px;
        border-radius: 3px;
        box-sizing: border-box;
        border: solid 1px #fff;
      }
      .macbook__load:after {
        content: "";
        position: absolute;
        top: 0;
        left: 18px;
        bottom: 0;
        margin: auto;
        width: 0;
        height: 6px;
        border-radius: 3px;
        background: #fff;
        animation: load 2s 2s ease-out;
        animation-fill-mode: forwards;
      }
      .macbook__underBord {
        position: relative;
        left: 42px;
        bottom: -145px;
        width: 150px;
        height: 90px;
        border-radius: 6px;
        transform-origin: center;
        transform: rotate(-30deg) skew(30deg);
        background: linear-gradient(-45deg, #c8c9c9 61%, #8c8c8c 66%);
        animation: modal 0.5s 1s ease-out;
        opacity: 0;
        animation-fill-mode: forwards;
      }
      .macbook__underBord::before {
        content: "";
        position: absolute;
        z-index: 3;
        top: -8px;
        left: 8px;
        width: 100%;
        height: 100%;
        border-radius: 6px;
        background: #dcdede;
      }
      .macbook__underBord::after {
        content: "";
        position: absolute;
        z-index: 2;
        top: -8px;
        left: 12px;
        width: 170px;
        height: 15px;
        transform-origin: top left;
        background: linear-gradient(-45deg, #c8c9c9 61%, #8c8c8c 66%);
        transform: rotate(31deg) skew(-16deg);
      }
      .macbook__keybord {
        position: relative;
        top: 0;
        left: 16px;
        z-index: 3;
        border-radius: 3px;
        width: calc(100% - 16px);
        height: 45px;
        background: #c8c9c9;
      }
      .macbook__keybord::before {
        content: "";
        position: absolute;
        bottom: -30px;
        left: 0;
        right: 0;
        margin: 0 auto;
        width: 40px;
        height: 25px;
        border-radius: 3px;
        background: #c8c9c9;
      }
      .keybord {
        position: relative;
        top: 2px;
        left: 2px;
        display: flex;
        flex-direction: column;
        width: calc(100% - 3px);
        height: calc(100% - 4px);
      }
      .keybord__touchbar {
        width: 100%;
        height: 6px;
        border-radius: 3px;
        background: #000;
      }
      .keybord__keyBox {
        display: grid;
        grid-template-rows: 3fr 1fr;
        grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
        width: 100%;
        height: 24px;
        margin: 1px 0 0 0;
        padding: 0 0 0 1px;
        box-sizing: border-box;
        list-style: none;
      }
      .keybord__key {
        position: relative;
        width: 8px;
        height: 7px;
        margin: 1px;
        background: #000;
      }
      .keybord__keyBox .keybord__key {
        transform: translate(60px, -60px);
        animation: key 0.2s 1.4s ease-out;
        animation-fill-mode: forwards;
        opacity: 0;
      }
      .keybord__keyBox .keybord__key::before,
      .keybord__keyBox .keybord__key::after {
        content: "";
        position: absolute;
        left: 0;
        width: 100%;
        height: 100%;
        background: #000;
      }
      .keybord__key::before {
        top: 8px;
        transform: translate(20px, -20px);
        animation: key1 0.2s 1.5s ease-out;
        animation-fill-mode: forwards;
      }
      .keybord__key::after {
        top: 16px;
        transform: translate(40px, -40px);
        animation: key2 0.2s 1.6s ease-out;
        animation-fill-mode: forwards;
      }
      .keybord__keyBox .key--12::before {
        width: 10px;
      }
      .keybord__keyBox .key--13::before {
        height: 10px;
      }
      .key--01 {
        grid-row: 1 / 2;
        grid-column: 1 / 2;
      }
      .key--02 {
        grid-row: 1 / 2;
        grid-column: 2 / 3;
      }
      .key--03 {
        grid-row: 1 / 2;
        grid-column: 3 / 4;
      }
      .key--04 {
        grid-row: 1 / 2;
        grid-column: 4 / 5;
      }
      .key--05 {
        grid-row: 1 / 2;
        grid-column: 5 / 6;
      }
      .key--06 {
        grid-row: 1 / 2;
        grid-column: 6 / 7;
      }
      .key--07 {
        grid-row: 1 / 2;
        grid-column: 7 / 8;
      }
      .key--08 {
        grid-row: 1 / 2;
        grid-column: 8 / 9;
      }
      .key--09 {
        grid-row: 1 / 2;
        grid-column: 9 / 10;
      }
      .key--10 {
        grid-row: 1 / 2;
        grid-column: 10 / 11;
      }
      .key--11 {
        grid-row: 1 / 2;
        grid-column: 11 / 12;
      }
      .key--12 {
        grid-row: 1 / 2;
        grid-column: 12 / 13;
      }
      .key--13 {
        grid-row: 1 / 2;
        grid-column: 13 / 14;
      }
      .keybord__keyBox--under {
        margin: 0;
        padding: 0 0 0 1px;
        box-sizing: border-box;
        list-style: none;
        display: flex;
      }
      .keybord__keyBox--under .keybord__key {
        transform: translate(80px, -80px);
        animation: key3 0.3s 1.6s linear;
        animation-fill-mode: forwards;
        opacity: 0;
      }
      .key--19 {
        width: 28px;
      }
      @keyframes topbord {
        0% {
          transform: scale(0) skewY(-30deg);
        }
        30% {
          transform: scale(1.1) skewY(-30deg);
        }
        45% {
          transform: scale(0.9) skewY(-30deg);
        }
        60% {
          transform: scale(1.05) skewY(-30deg);
        }
        75% {
          transform: scale(0.95) skewY(-30deg);
        }
        90% {
          transform: scale(1.02) skewY(-30deg);
        }
        100% {
          transform: scale(1) skewY(-30deg);
        }
      }
      @keyframes display {
        0% {
          opacity: 1;
        }
        100% {
          opacity: 0;
        }
      }

      @keyframes load {
        0% {
          width: 0;
        }
        20% {
          width: 40px;
        }
        30% {
          width: 40px;
        }
        60% {
          width: 60px;
        }
        90% {
          width: 60px;
        }
        100% {
          width: 80px;
        }
      }

      @keyframes modal {
        0% {
          transform: scale(0) rotate(-30deg) skew(30deg);
          opacity: 0;
        }
        30% {
          transform: scale(1.1) rotate(-30deg) skew(30deg);
          opacity: 1;
        }
        45% {
          transform: scale(0.9) rotate(-30deg) skew(30deg);
          opacity: 1;
        }
        60% {
          transform: scale(1.05) rotate(-30deg) skew(30deg);
          opacity: 1;
        }
        75% {
          transform: scale(0.95) rotate(-30deg) skew(30deg);
          opacity: 1;
        }
        90% {
          transform: scale(1.02) rotate(-30deg) skew(30deg);
          opacity: 1;
        }
        100% {
          transform: scale(1) rotate(-30deg) skew(30deg);
          opacity: 1;
        }
      }

      @keyframes key {
        0% {
          transform: translate(60px, -60px);
          opacity: 0;
        }
        100% {
          transform: translate(0px, 0px);
          opacity: 1;
        }
      }
      @keyframes key1 {
        0% {
          transform: translate(20px, -20px);
          opacity: 0;
        }
        100% {
          transform: translate(0px, 0px);
          opacity: 1;
        }
      }
      @keyframes key2 {
        0% {
          transform: translate(40px, -40px);
          opacity: 0;
        }
        100% {
          transform: translate(0px, 0px);
          opacity: 1;
        }
      }
      @keyframes key3 {
        0% {
          transform: translate(80px, -80px);
          opacity: 0;
        }
        100% {
          transform: translate(0px, 0px);
          opacity: 1;
        }
      }
    </style>
  </body>
</html>
复制全文 生成海报 前端开发 动画效果 网页设计

推荐文章

全新 Nginx 在线管理平台
2024-11-19 04:18:33 +0800 CST
WebSQL数据库:HTML5的非标准伴侣
2024-11-18 22:44:20 +0800 CST
Vue3的虚拟DOM是如何提高性能的?
2024-11-18 22:12:20 +0800 CST
前端代码规范 - Commit 提交规范
2024-11-18 10:18:08 +0800 CST
Vue中的异步更新是如何实现的?
2024-11-18 19:24:29 +0800 CST
MySQL 优化利剑 EXPLAIN
2024-11-19 00:43:21 +0800 CST
介绍Vue3的Tree Shaking是什么?
2024-11-18 20:37:41 +0800 CST
Mysql允许外网访问详细流程
2024-11-17 05:03:26 +0800 CST
#免密码登录服务器
2024-11-19 04:29:52 +0800 CST
Vue3中如何处理异步操作?
2024-11-19 04:06:07 +0800 CST
JS 箭头函数
2024-11-17 19:09:58 +0800 CST
百度开源压测工具 dperf
2024-11-18 16:50:58 +0800 CST
程序员茄子在线接单