HTML&CSS:全网最全的代码时钟效果

这个页面实现了一个展示多种设计风格时钟的博物馆,每个时钟都有独特的视觉效果。页面使用了 CSS 和 JavaScript 来实现时钟的动态效果和交互功能。


大家复制代码时,可能会因格式转换出现错乱,导致样式失效。建议先少量复制代码进行测试,若未能解决问题,私信回复源码两字,我会发送完整的压缩包给你。

演示效果

HTML&CSS

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <title>Document</title>
    <style>
        @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");

        body {
            background: #f5f5f5;
            min-height: 100vh;
            margin: 0;
            padding: 40px 0;
            font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
            color: #333;
        }

        h1 {
            font-weight: 600;
            font-size: 2.5rem;
            color: #101828;
            text-align: center;
            display: block;
            margin-top: 1em;
            margin-bottom: 1em;
            font-weight: bold;
        }

        .container {
            display: flex;
            gap: 40px;
            padding: 20px;
            flex-direction: row;
            flex-wrap: wrap;
            align-items: center;
            justify-content: center
        }

        .card {
            background: white;
            border-radius: 24px !important;
            /* padding: 30px; */
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
            text-align: center;
            position: relative;
            width: 356px;
            height: 426px;
            display: flex;
            align-items: center;
            justify-content: center
        }

        .card::after {
            content: attr(data-description);
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            background: #F5F5F5;
            background: linear-gradient(0deg, rgba(245, 245, 245, 1) 0%, rgba(245, 245, 245, 0.8) 39%, rgba(255, 255, 255, 0) 100%);
            color: #191919;
            padding: 30px;
            font-size: 1rem;
            line-height: 1.5;
            opacity: 0;
            transition: opacity 0.3s ease;
            pointer-events: none;
            z-index: 12;
            height: calc(100% - 60px);
            border-radius: 24px;
            display: flex;
            align-items: center;
            justify-content: center;
            backdrop-filter: blur(8px);
        }

        .card:hover::after {
            opacity: 1;
        }

        .card h2 {
            margin-top: 0;
            margin-bottom: 8px;
            color: #333;
            font-weight: 500;
            position: absolute;
            top: 40px;
            left: 0;
            text-align: center;
            width: 100%;
            display: block;
            z-index: 99
        }

        .card p {
            margin-top: 0;
            margin-bottom: 20px;
            color: #666;
            font-size: 14px;
        }

        .clock-container {
            position: relative;
            width: 280px;
            height: 280px;
            margin: 0 auto;
            display: flex;
            align-items: center;
            justify-content: center;
            margin-top: 40px
        }

        .clock-face {
            position: absolute;
            width: 280px;
            height: 280px;
            border-radius: 50%;
        }

        .hour-marks {
            position: absolute;
            width: 100%;
            height: 100%;
        }

        .hour-mark {
            position: absolute;
            left: 50%;
            transform-origin: 0 140px;
        }

        .minute-mark {
            position: absolute;
            left: 50%;
            transform-origin: 0 140px;
        }

        .hour-number {
            position: absolute;
            text-align: center;
            transform-origin: center;
        }

        .hand {
            position: absolute;
            transform-origin: bottom center;
            bottom: 140px;
            left: 140px;
        }

        .skeuomorphic {
            background: #F5F5F5;
            background: linear-gradient(140deg, rgba(245, 245, 245, 1) 0%, rgba(230, 230, 230, 1) 50%, rgba(214, 214, 214, 1) 100%);
        }

        .skeuomorphic .clock-container {
            background: linear-gradient(135deg, #f5f5f5 0%, #e0e0e0 100%);
            box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 2px, rgba(0, 0, 0, 0.07) 0px 2px 4px, rgba(0, 0, 0, 0.07) 0px 4px 8px, rgba(0, 0, 0, 0.07) 0px 8px 16px, rgba(0, 0, 0, 0.07) 0px 16px 32px, rgba(0, 0, 0, 0.07) 0px 32px 64px, 0 2px 5px rgba(0, 0, 0, 0.3);
            border: 8px solid #fff;
            border-radius: 50%;
        }

        .skeuomorphic .clock-face {
            background: linear-gradient(135deg, #f5f5f5 0%, #e0e0e0 100%);
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.2), inset 0 0 20px rgba(0, 0, 0, 0.1),
                0 2px 5px rgba(0, 0, 0, 0.3);

        }

        .skeuomorphic .clock-reflection {
            position: absolute;
            width: 260px;
            height: 130px;
            top: 20px;
            left: 10px;
            border-radius: 130px 130px 0 0;
            background: linear-gradient(to bottom,
                    rgba(255, 255, 255, 0.6) 0%,
                    rgba(255, 255, 255, 0) 100%);
            pointer-events: none;
            z-index: 11;
        }

        .skeuomorphic .clock-center {
            position: absolute;
            width: 14px;
            height: 14px;
            background: #333;
            border-radius: 50%;
            top: 133px;
            left: 133px;
            box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
            z-index: 10;
        }

        .skeuomorphic .clock-center::after {
            content: "";
            position: absolute;
            width: 6px;
            height: 6px;
            background: #888;
            border-radius: 50%;
            top: 4px;
            left: 4px;
        }

        .skeuomorphic .hour-mark {
            width: 4px;
            height: 12px;
            background: #333;
            margin-left: -2px;
        }

        .skeuomorphic .minute-mark {
            width: 2px;
            height: 6px;
            background: #666;
            margin-left: -1px;
        }

        .skeuomorphic .hour-number {
            font-size: 24px;
            font-weight: 500;
            color: #333;
            width: 40px;
            height: 40px;
            line-height: 40px;
        }

        .skeuomorphic .hour-hand {
            width: 8px;
            height: 75px;
            background: #333;
            border-radius: 10px 10px 0 0;
            box-shadow: 2px 0px 7px rgba(0, 0, 0, 0.5);
            z-index: 7;
            margin-left: -4px;
        }

        .skeuomorphic .minute-hand {
            width: 6px;
            height: 105px;
            background: #444;
            border-radius: 10px 10px 0 0;
            box-shadow: 2px 0px 6px rgba(0, 0, 0, 0.5);
            z-index: 8;
            margin-left: -3px;
        }

        .skeuomorphic .second-hand {
            width: 2px;
            height: 115px;
            background: #c00;
            box-shadow: 2px 0px 5px rgba(0, 0, 0, 0.5);
            z-index: 9;
        }

        .skeuomorphic .clock-bezel {
            position: absolute;
            width: 290px;
            height: 290px;
            top: -5px;
            left: -5px;
            border-radius: 50%;
            background: linear-gradient(135deg, #d0d0d0 0%, #f8f8f8 100%);
            z-index: -1;
        }

        .flat-design {
            background: #f2f2f7
        }

        .flat-design .clock-face {
            background: #ffffff;
            border: 3px solid #191919
        }

        .flat-design .clock-center {
            position: absolute;
            width: 12px;
            height: 12px;
            background: #ffcd50;
            border-radius: 50%;
            top: 134px;
            left: 134px;
            z-index: 10;
        }

        .flat-design .hour-mark {
            width: 3px;
            height: 10px;
            background: #555;
        }

        .flat-design .minute-mark {
            width: 2px;
            height: 8px;
            background: #bcbcbc;
        }

        .flat-design .hour-number {
            font-size: 24px;
            font-weight: 400;
            color: #555;
            width: 40px;
            height: 40px;
            line-height: 40px;
        }

        .flat-design .hour-hand {
            width: 6px;
            height: 70px;
            background: #555;
            z-index: 7;
            margin-left: -3px;
        }

        .flat-design .minute-hand {
            width: 4px;
            height: 95px;
            background: #777;
            z-index: 8;
            margin-left: -2px;
        }

        .flat-design .second-hand {
            width: 2px;
            height: 110px;
            background: #ffcd50;
            z-index: 9;
        }

        .material-design {
            background: #EDE7F6;
        }

        .material-design .clock-face {
            background: #512da8;
            box-shadow: rgba(0, 0, 0, 0.3) 0px 19px 38px, rgba(0, 0, 0, 0.22) 0px 15px 12px;
        }

        .material-design .clock-face-inner {
            width: 62%;
            height: 62%;
            border-radius: 50%;
            background: #7E57C2;
            box-shadow: rgba(0, 0, 0, 0.25) 0px 14px 28px, rgba(0, 0, 0, 0.22) 0px 10px 10px;
            z-index: 2;
            display: flex;
            align-items: center;
            justify-content: center
        }

        .material-design .clock-center {
            position: absolute;
            width: 12px;
            height: 12px;
            background: #f44336;
            border-radius: 50%;
            top: 134px;
            left: 134px;
            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
            z-index: 10;
        }

        .material-design .hour-number {
            font-size: 20px;
            font-weight: 500;
            color: #EDE7F6;
            width: 40px;
            height: 40px;
            line-height: 40px;
            text-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.23) 0px 6px 6px;
        }

        .material-design .hour-hand {
            width: 6px;
            height: 60px;
            background: #fff;
            border-radius: 4px;
            z-index: 7;
            margin-left: -2px;
            box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.23) 0px 6px 6px;
        }

        .material-design .minute-hand {
            width: 6px;
            height: 98px;
            background: #EDE7F6;
            border-radius: 4px;
            z-index: 8;
            margin-left: -2px;
            box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.23) 0px 6px 6px;

        }

        .material-design .second-hand {
            width: 2px;
            height: 110px;
            background: #f44336;
            z-index: 9;
            box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.23) 0px 6px 6px;

        }

        .neumorphism {
            border-radius: 30px;
            background: #e8eaf6;
            box-shadow: 10px 10px 20px #d1d1d1, -10px -10px 20px #ffffff;
        }

        .neumorphism .clock-face {
            border-radius: 50%;
            background: linear-gradient(145deg, #d1d3dd, #f8faff);
            box-shadow: 20px 20px 60px #c5c7d1,
                -20px -20px 60px #ffffff;
        }

        .neumorphism .clock-face-inner {
            width: 62%;
            height: 62%;
            border-radius: 50%;
            z-index: 1;
            background: #e8eaf6;
            box-shadow: 20px 20px 40px #b0b2bb,
                -20px -20px 40px #ffffff;
        }

        .neumorphism .clock-center {
            position: absolute;
            width: 15px;
            height: 15px;
            border-radius: 50%;
            top: 132.5px;
            left: 132.5px;
            background: linear-gradient(145deg, #f8faff, #d1d3dd);
            box-shadow: 1px 1px 2px #797a80,
                -1px -1px 2px #ffffff;

            z-index: 10;
        }

        .neumorphism .hour-mark {
            width: 2px;
            height: 24px;
        }

        .neumorphism .hour-mark::after {
            content: '';
            display: block;
            position: absolute;
            bottom: 0;
            width: 2px;
            height: 16px;
            border-radius: 10px;
            background: #e8eaf6;
            box-shadow: inset 1px 1px 7px #bec0ca,
                inset -1px -1px 7px #ffffff;
        }

        .neumorphism .minute-mark {
            display: none
        }

        .neumorphism .hour-number {
            display: none
        }

        .neumorphism .hour-hand {
            width: 6px;
            height: 70px;
            background: #030943;
            border-radius: 3px;
            z-index: 7;
            margin-left: -2px;
        }

        .neumorphism .minute-hand {
            width: 4px;
            height: 95px;
            background: #536089;
            border-radius: 2px;
            z-index: 8;
            margin-left: -1px;
        }

        .neumorphism .second-hand {
            width: 2px;
            height: 110px;
            background: #dd0f2e;
            border-radius: 1px;
            z-index: 9;
        }

        .glassmorphism {
            background: linear-gradient(45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
            background-size: 400% 400%;
            animation: gradientBG 15s ease infinite;
            overflow: hidden
        }

        @keyframes gradientBG {
            0% {
                background-position: 0% 50%;
            }

            50% {
                background-position: 100% 50%;
            }

            100% {
                background-position: 0% 50%;
            }
        }

        .glassmorphism .clock-face {
            backdrop-filter: blur(8px) saturate(150%);
            -webkit-backdrop-filter: blur(16px) saturate(180%);
            background-color: rgba(255, 255, 255, 0.33);
            border: 1px solid rgba(209, 213, 219, 0.6);
            overflow: hidden
        }

        .glassmorphism .clock-face::after {
            background-color: rgba(255, 255, 255, .05);
            bottom: 0;
            content: '';
            filter: blur(4px);
            left: -99px;
            position: absolute;
            right: .865%;
            top: -300px;
            transform: rotate(45deg);
            z-index: 1;
        }

        .glassmorphism .clock-center {
            position: absolute;
            width: 12px;
            height: 12px;
            background: white;
            border-radius: 50%;
            top: 134px;
            left: 134px;
            z-index: 10;
            border: 10 solid rgba(0, 0, 0, 0.5)
        }

        .glassmorphism .hour-mark {
            width: 4px;
            height: 18px;
            margin-left: -1px;
        }

        .glassmorphism .hour-mark::after {
            content: '';
            display: block;
            position: absolute;
            bottom: 0;
            width: 4px;
            height: 4px;
            border-radius: 50%;
            background: #fff;
        }

        .glassmorphism .minute-mark {
            width: 1px;
            height: 16px;
            margin-left: -0.5px;
            border-radius: 50%;
        }

        .glassmorphism .minute-mark::after {
            content: '';
            display: block;
            position: absolute;
            bottom: 0;
            width: 1px;
            height: 1px;
            border-radius: 50%;
            background: #fff;
        }

        .glassmorphism .hour-number {
            font-size: 20px;
            font-weight: 400;
            color: white;
            width: 40px;
            height: 40px;
            line-height: 40px;
            display: none
        }

        .glassmorphism .hour-hand {
            width: 5px;
            height: 70px;
            background: rgba(255, 255, 255, 0.9);
            border-radius: 2.5px;
            z-index: 7;
            margin-left: -2px;
        }

        .glassmorphism .minute-hand {
            width: 3px;
            height: 95px;
            background: rgba(255, 255, 255, 0.8);
            border-radius: 1.5px;
            z-index: 8;
            margin-left: -1px;
        }

        .glassmorphism .second-hand {
            width: 2px;
            height: 110px;
            background: rgba(255, 255, 255, 1);
            z-index: 9;
        }

        .glassmorphism .shapes-container {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            overflow: hidden;
            z-index: 0;
            pointer-events: none;
        }

        .glassmorphism .shapes-container::after {
            background-color: rgba(255, 255, 255, .05);
            bottom: 0;
            content: '';
            filter: blur(4px);
            left: -99px;
            position: absolute;
            right: .865%;
            top: -480px;
            transform: rotate(45deg);
            z-index: 1;
        }

        .glassmorphism .shape {
            position: absolute;
            opacity: 0.6;
            animation: float 20s infinite ease-in-out;
        }

        .glassmorphism .shape.circle {
            width: 120px;
            height: 120px;
            backdrop-filter: blur(5px) saturate(150%);
            -webkit-backdrop-filter: blur(16px) saturate(180%);
            background-color: rgba(255, 255, 255, 0.38);
            border: 1px solid rgba(209, 213, 219, 0.8);
            border-radius: 50%;
            top: 20%;
            left: 10%;
            animation-duration: 10s;
        }

        .glassmorphism .shape.rounded-square {
            width: 100px;
            height: 100px;
            backdrop-filter: blur(5px) saturate(150%);
            -webkit-backdrop-filter: blur(16px) saturate(180%);
            background-color: rgba(255, 255, 255, 0.38);
            border: 1px solid rgba(209, 213, 219, 0.8);
            border-radius: 25px;
            top: 70%;
            left: 60%;
            animation-duration: 16s;
        }

        @keyframes float {
            0% {
                transform: translateY(0px) translateX(0px) rotate(0deg);
            }

            50% {
                transform: translateY(-25px) translateX(15px) rotate(180deg);
            }

            100% {
                transform: translateY(0px) translateX(0px) rotate(360deg);
            }
        }

        .claymorphism {
            border-radius: 30px;
            background: #f4f4fc;
            box-shadow: 35px 35px 68px 0px rgba(145, 192, 255, 0.5), inset -2px -2px 16px 0px rgba(145, 192, 255, 0.6), inset 0px 11px 28px 0px rgb(255, 255, 255);
        }

        .claymorphism .clock-face {
            background: #f4f4fc;
            border-radius: 50%;
            box-shadow: 35px 35px 68px 0px rgba(145, 192, 255, 0.5), inset -7px -7px 16px 0px rgba(145, 192, 255, 0.6), inset 0px 11px 28px 0px rgb(255, 255, 255);
        }

        .claymorphism .clock-center {
            position: absolute;
            width: 18px;
            height: 18px;
            background: #6457f9;
            border-radius: 50%;
            top: 131px;
            left: 131px;
            box-shadow: 3px 3px 6px rgba(10, 10, 40, 0.2);
            z-index: 10;
        }

        .claymorphism .hour-mark {
            width: 4px;
            height: 12px;
            background: #9c92ff;
            margin-left: -2px;
            border-radius: 2px;
        }

        .claymorphism .minute-mark {
            width: 2px;
            height: 6px;
            background: #c4beff;
            margin-left: -1px;
            border-radius: 1px;
        }

        .claymorphism .hour-number {
            font-size: 22px;
            font-weight: 600;
            color: #6457f9;
            width: 40px;
            height: 40px;
            line-height: 40px;
        }

        .claymorphism .hour-hand {
            width: 8px;
            height: 70px;
            background: #6457f9;
            border-radius: 4px;
            z-index: 7;
            margin-left: -3px;
        }

        .claymorphism .minute-hand {
            width: 6px;
            height: 95px;
            background: #9c92ff;
            border-radius: 3px;
            z-index: 8;
            margin-left: -2px;
        }

        .claymorphism .second-hand {
            width: 3px;
            height: 110px;
            background: #ff6b6b;
            border-radius: 1.5px;
            z-index: 9;
        }

        .brutalism {
            background: #fff;
        }

        .brutalism {
            border-radius: 0;
            background: #c0f7fe;
            box-shadow: none;
            border: 4px solid #000;
            transition: all 0.1s;
            /* padding: 25px; */
        }

        .brutalism .clock-face {
            background: #91a8ee;
            border: 2px solid black;
            box-shadow: -16px 0px 0px #000;
        }

        .brutalism .clock-face-inner {
            display: flex;
            align-items: center;
            justify-content: center;
            width: 90%;
            height: 90%;
            border: 2px solid black;
            border-radius: 50%;
            z-index: 1;
            background: #fe90e8;
            box-shadow: -8px 0px 0px #000 inset;
        }

        .brutalism .clock-face-inner-2 {
            width: 62%;
            height: 62%;
            border-radius: 50%;
            z-index: 2;
            background: #ffff19;
            box-shadow: -4px 0px 0px #000 inset;
        }

        .brutalism .clock-center {
            position: absolute;
            width: 16px;
            height: 16px;
            background: #000;
            border-radius: 50%;
            top: 132px;
            left: 132px;
            z-index: 10;
        }

        .brutalism .hour-mark {
            width: 1px;
            height: 50px;
            margin-left: -5px;
            z-index: 12
        }

        .brutalism .hour-mark::after {
            content: '';
            display: block;
            position: absolute;
            bottom: 0;
            width: 1px;
            height: 24px;
            border-radius: 50%;
            background: #000;
        }

        .brutalism .minute-mark {
            display: none
        }

        .brutalism .hour-hand {
            width: 8px;
            height: 40px;
            background: #000;
            z-index: 7;
            border-radius: 5px;
            margin-left: -4px
        }

        .brutalism .minute-hand {
            width: 8px;
            height: 64px;
            background: #000;
            z-index: 8;
            border-radius: 5px;
            margin-left: -4px
        }

        .brutalism .second-hand {
            display: none
        }

        .brutalism .hour-number {
            display: none
        }

        .minimalism .card {
            border-radius: 18px;
            background: #ffffff;
            box-shadow: 0 5px 20px rgba(0, 0, 0, 0.05);
            padding: 40px;
        }

        .minimalism .clock-face {
            background: #ffffff;
            box-shadow: 0 5px 20px rgba(0, 0, 0, 0.05);
        }

        .minimalism .clock-center {
            position: absolute;
            width: 8px;
            height: 8px;
            background: #111;
            border-radius: 50%;
            top: 136px;
            left: 136px;
            z-index: 10;
        }

        .minimalism .hour-mark {
            width: 1px;
            height: 8px;
            background: #111;
            margin-left: -0.5px;
            opacity: 0.2;
        }

        .minimalism .minute-mark {
            width: 1px;
            height: 4px;
            background: #111;
            margin-left: -0.5px;
            opacity: 0.1;
        }

        .minimalism .hour-number {
            font-family: "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif;
            font-size: 18px;
            font-weight: 300;
            color: #111;
            width: 40px;
            height: 40px;
            line-height: 40px;
            opacity: 0.5;
        }

        .minimalism .hour-number:nth-child(3n) {
            opacity: 1;
        }

        .minimalism .hour-hand {
            width: 3px;
            height: 65px;
            background: #111;
            border-radius: 1.5px;
            z-index: 7;
        }

        .minimalism .minute-hand {
            width: 2px;
            height: 90px;
            background: #111;
            border-radius: 1px;
            z-index: 8;
        }

        .minimalism .second-hand {
            width: 1px;
            height: 110px;
            background: #ff3b30;
            z-index: 9;
        }

        @media (min-width: 699px) and (max-width: 705px) {
            .card {
                transform: scale(0.45);
                margin: -140px -120px
            }

            h1 {
                font-size: 1.25em
            }
        }
    </style>
</head>

<body>
    <h1>Museum of Clocks</h1>
    <div class="container">
        <!-- Skeuomorphic -->
        <div class="skeuomorphic card"
            data-description="Inspired by real-world objects, this design uses shadows, textures, and depth to create a familiar, almost tactile interface.">
            <h2>Skeuomorphism</h2>
            <div class="clock-container">
                <div class="clock-bezel"></div>
                <div class="clock-face"></div>
                <div class="clock-reflection"></div>
                <div class="hour-marks" id="skeuomorphic-hour-marks"></div>
                <div class="hour-hand hand" id="skeuomorphic-hour-hand"></div>
                <div class="minute-hand hand" id="skeuomorphic-minute-hand"></div>
                <div class="second-hand hand" id="skeuomorphic-second-hand"></div>
                <div class="clock-center"></div>
            </div>
        </div>

        <!-- Flat Design -->
        <div class="flat-design card"
            data-description="Clean, crisp, and modern. Flat design removes all unnecessary details --- no shadows or gradients, just bold colors and clear shapes.">
            <h2>Flat Design</h2>
            <div class="clock-container">
                <div class="outer-ring"></div>
                <div class="clock-face"></div>
                <div class="hour-marks" id="flat-design-hour-marks"></div>
                <div class="hour-hand hand" id="flat-design-hour-hand"></div>
                <div class="minute-hand hand" id="flat-design-minute-hand"></div>
                <div class="second-hand hand" id="flat-design-second-hand"></div>
                <div class="clock-center"></div>
            </div>
        </div>

        <!-- Material Design -->
        <div class="material-design card "
            data-description="Google's signature style that blends depth and motion. It uses layered elements, smooth animations, and consistent shadowing for clarity and structure.">
            <h2>Material Design</h2>
            <div class="clock-container">
                <div class="clock-face-inner">

                </div>
                <div class="clock-face"></div>
                <div class="hour-marks" id="material-design-hour-marks"></div>
                <div class="hour-hand hand" id="material-design-hour-hand"></div>
                <div class="minute-hand hand" id="material-design-minute-hand"></div>
                <div class="second-hand hand" id="material-design-second-hand"></div>
                <div class="clock-center"></div>
            </div>
        </div>

        <!-- Neumorphism -->
        <div class="neumorphism card"
            data-description="A soft, subtle blend of light and shadow. Elements appear to be pressed into or extruded from the background, giving a modern, minimalist 3D look.">
            <h2>Neumorphism</h2>
            <div class="clock-container">
                <div class="clock-face-inner"></div>
                <div class="clock-face"></div>
                <div class="hour-marks" id="neumorphism-hour-marks"></div>
                <div class="hour-hand hand" id="neumorphism-hour-hand"></div>
                <div class="minute-hand hand" id="neumorphism-minute-hand"></div>
                <div class="second-hand hand" id="neumorphism-second-hand"></div>
                <div class="clock-center"></div>
            </div>
        </div>

        <!-- Glassmorphism -->
        <div class="glassmorphism card "
            data-description="A frosted glass aesthetic with soft blurs, transparency, and layered depth. Sleek, futuristic, and slightly surreal.">
            <div class="shapes-container">
                <div class="shape circle"></div>
                <div class="shape rounded-square"></div>
            </div>
            <h2>Glassmorphism</h2>
            <div class="clock-container">
                <div class="clock-face"></div>
                <div class="hour-marks" id="glassmorphism-hour-marks"></div>
                <div class="hour-hand hand" id="glassmorphism-hour-hand"></div>
                <div class="minute-hand hand" id="glassmorphism-minute-hand"></div>
                <div class="second-hand hand" id="glassmorphism-second-hand"></div>
                <div class="clock-center"></div>
            </div>
        </div>

        <!-- Claymorphism -->
        <div class="claymorphism card "
            data-description="Fun and friendly with thick, rounded edges and soft shadows. Elements look like they're made of colorful, squishy clay. Playful and approachable.">
            <h2>Claymorphism</h2>
            <div class="clock-container">
                <div class="clock-face"></div>
                <div class="hour-marks" id="claymorphism-hour-marks"></div>
                <div class="hour-hand hand" id="claymorphism-hour-hand"></div>
                <div class="minute-hand hand" id="claymorphism-minute-hand"></div>
                <div class="second-hand hand" id="claymorphism-second-hand"></div>
                <div class="clock-center"></div>
            </div>
        </div>

        <!-- Brutalism -->
        <div class="brutalism card "
            data-description="Neo-brutalism is a bold, raw design style that embraces minimal styling and harsh visuals. It features flat colors, visible grids, system fonts, and an intentionally unpolished look.">
            <h2>Neo-brutalism</h2>
            <div class="clock-container">
                <div class="clock-face"></div>
                <div class="clock-face-inner">
                    <div class="clock-face-inner-2"></div>
                </div>

                <div class="hour-marks" id="brutalism-hour-marks"></div>
                <div class="hour-hand hand" id="brutalism-hour-hand"></div>
                <div class="minute-hand hand" id="brutalism-minute-hand"></div>
                <div class="second-hand hand" id="brutalism-second-hand"></div>
                <div class="clock-center"></div>
            </div>
        </div>

        <!-- Minimalism -->
        <div class="minimalism card "
            data-description="Simplicity at its finest. Focuses on clean lines, open space, and functionality. Less is more, with every element carefully chosen for maximum impact.">
            <h2>Minimalism</h2>
            <div class="clock-container">
                <div class="clock-face"></div>
                <div class="hour-marks" id="minimalism-hour-marks"></div>
                <div class="hour-hand hand" id="minimalism-hour-hand"></div>
                <div class="minute-hand hand" id="minimalism-minute-hand"></div>
                <div class="second-hand hand" id="minimalism-second-hand"></div>
                <div class="clock-center"></div>
            </div>
        </div>
    </div>
    <script>
        $(document).ready(function () {
            setupClock("skeuomorphic");
            setupClock("flat-design");
            setupClock("material-design");
            setupClock("neumorphism");
            setupClock("glassmorphism");
            setupClock("brutalism");

            function setClockHands() {
                const now = new Date();
                const hours24 = now.getHours();
                const hours = hours24 % 12 || 12;
                const minutes = now.getMinutes();
                const seconds = now.getSeconds();
                const ampm = hours24 >= 12 ? "PM" : "AM";

                const hourDegrees = (hours % 12) * 30 + minutes * 0.5;
                const minuteDegrees = minutes * 6 + seconds * 0.1;
                const secondDegrees = seconds * 6;

                $("[id$='-hour-hand']").css("transform", `rotate(${hourDegrees}deg)`);

                $("[id$='-minute-hand']").css("transform", `rotate(${minuteDegrees}deg)`);

                $("[id$='-second-hand']").css("transform", `rotate(${secondDegrees}deg)`);
            }

            function setupClock(style) {
                for (let i = 0; i < 12; i++) {
                    const hourMark = $("<div>").addClass("hour-mark");
                    hourMark.css("transform", `rotate(${i * 30}deg)`);
                    $(`#${style}-hour-marks`).append(hourMark);

                    const hourNumber = $("<div>")
                        .addClass("hour-number")
                        .text(i === 0 ? 12 : i);
                    const angle = i * 30;
                    const radius = 112;
                    const x = 150 + radius * Math.sin((angle * Math.PI) / 180);
                    const y = 150 - radius * Math.cos((angle * Math.PI) / 180);

                    hourNumber.css({
                        left: x - 30,
                        top: y - 30
                    });

                    $(`.${style} .clock-face`).append(hourNumber);

                    for (let j = 1; j <= 4; j++) {
                        if (j < 5) {
                            const minuteMark = $("<div>").addClass("minute-mark");
                            minuteMark.css("transform", `rotate(${i * 30 + j * 6}deg)`);
                            $(`#${style}-hour-marks`).append(minuteMark);
                        }
                    }
                }
            }

            setClockHands();
            setInterval(setClockHands, 1000);
        });

    </script>
</body>

</html>

HTML 结构

  • h1:显示页面标题"Museum of Clocks"。
  • container:包含多个时钟展示卡片。
  • 每个卡片如 skeuomorphic、flat-design、material-design 等都包含一个时钟容器,用于展示不同设计风格的时钟。
  • 每个时钟容器包含时钟的指针、刻度、数字等元素。

CSS 样式

全局样式

  • body:设置页面的背景颜色、最小高度、外边距和内边距。
  • h1:设置标题的字体大小、颜色、对齐方式等。
  • .container:定义容器的布局,使用 Flexbox 实现响应式布局。

卡片样式

  • .card:定义卡片的基本样式,包括背景颜色、圆角、阴影、大小等。
  • .card:hover::after:定义卡片悬停时的提示信息样式。

时钟样式

  • .clock-container:定义时钟容器的样式,包括大小、位置等。
  • .clock-face:定义时钟表盘的样式,包括背景颜色、圆角等。
  • .hour-marks、.minute-marks:定义时钟的刻度样式。
  • .hour-hand、.minute-hand、.second-hand:定义时钟指针的样式,包括宽度、高度、颜色、旋转原点等。
  • .clock-center:定义时钟中心点的样式。

不同设计风格

  • 每种设计风格(如 skeuomorphic、flat-design、material-design 等)都有对应的 CSS 类,定义了不同的颜色、阴影、渐变等样式,以实现不同的视觉效果。

JavaScript 功能说明

时钟初始化

使用 setupClock 函数为每种设计风格的时钟初始化刻度和指针。 使用 setClockHands 函数更新时钟指针的位置,实现动态时钟效果。

动画效果

使用 setInterval 函数每秒更新一次时钟指针的位置,实现时钟的动态运行。


各位互联网搭子,要是这篇文章成功引起了你的注意,别犹豫,关注、点赞、评论、分享走一波,让我们把这份默契延续下去,一起在知识的海洋里乘风破浪!

相关推荐
江城开朗的豌豆10 小时前
React应用优化指南:让我的项目性能“起飞”✨
前端·javascript·react.js
Asort11 小时前
JavaScript 从零开始(六):控制流语句详解——让代码拥有决策与重复能力
前端·javascript
在云端易逍遥11 小时前
前端必学的 CSS Grid 布局体系
前端·css
EMT11 小时前
在 Vue 项目中使用 URL Query 保存和恢复搜索条件
javascript·vue.js
艾小码11 小时前
还在被超长列表卡到崩溃?3招搞定虚拟滚动,性能直接起飞!
前端·javascript·react.js
前端康师傅11 小时前
JavaScript 作用域常见问题及解决方案
前端·javascript
Mintopia11 小时前
🚀 Next.js 全栈 E2E 测试:Playwright vs Cypress
前端·javascript·next.js
原生高钙11 小时前
JS设计模式指南
前端·javascript
Mintopia11 小时前
⚡ WebAssembly 如何加速 AIGC 模型在浏览器中的运行效率?
前端·javascript·aigc
断竿散人12 小时前
乾坤微前端框架的沙箱技术实现原理深度解析
前端·javascript·前端框架