赤水市忠唯星海47号 +13594780050 diyipingpai@baidu.ag

项目展示

扑克牌翻面—扑克牌翻转效果

2025-12-28 13:25:51

我将创建一个具有真实感的扑克牌翻面效果,包含多种交互方式和视觉细节。

设计思路

  • 使用CSS 3D变换实现逼真的卡片翻转
  • 添加阴影、边框和纹理和纹理增强视觉效果
  • 提供鼠标悬停、点击和点击和自动翻转等多种交互方式
  • 模拟真实的扑克牌外观
  • 下面是下面是完整实现:

    html

    扑克牌翻面效果

    * {

    margin: 0;

    padding: 0;

    box-sizing: border-box;

    body {

    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;

    display: flex;

    justify-content: center;

    align-items: center;

    min-height: 100vh;

    background: linear-gradient(135deg, #2980b9, #2c3e50);

    color: white;

    overflow-x: hidden;

    .container {

    text-align: center;

    max-width: 800px;

    width: 95%;

    padding: 20px;

    h1 {

    margin-bottom: 30px;

    font-weight: 600;

    text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);

    .controls {

    margin-bottom: 40px;

    display: flex;

    gap: 15px;

    justify-content: center;

    flex-wrap: wrap;

    button {

    padding: 10px 18px;

    border: none;

    border-radius: 25px;

    background-color: rgba(255, 255, 255, 0.15);

    color: white;

    font-weight: 500;

    cursor: pointer;

    transition: all 0.3s ease;

    backdrop-filter: blur(5px);

    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);

    button:hover {

    background-color: rgba(52, 152, 219, 0.7);

    transform: translateY(-2px);

    button.active {

    background-color: rgba(41, 128, 185, 0.9);

    box-shadow: 0 0 16px rgba(51, 152, 253, 0.7);

    .cards-container {

    display: flex;

    justify-content: center;

    gap: 60px;

    flex-wrap: wrap;

    margin-top: 35px;

    .scene {

    width: 200px;

    扑克牌翻面—扑克牌翻转效果

    height: 280px;

    perspective: 1200px;

    .card {

    width: 100%;

    height: 100%;

    position: relative;

    transform-style: preserve-3d;

    cursor: pointer;

    transition: transform 0.85s cubic-bezier(0.175, 0.885, 0.32, 1.275);

    box-shadow: 0 14px 28px rgba(0, 0, 0, 0.45), 0 10px 10px rgba(0, 0, 0, 0.32);

    border-radius: 11px;

    .card.flipped {

    transform: rotateY(180deg);

    .card-face {

    position: absolute;

    width: 100%;

    height: 100%;

    backface-visibility: hidden;

    border-radius: 13px;

    display: flex;

    flex-direction: column;

    justify-content: space-between;

    padding: 17px;

    overflow: hidden;

    .card-front {

    background: radial-gradient(circle at top left, #ffffff, #f5f5f5);

    color: black;

    transform: rotateY(180deg);

    border: 1px solid #ddd;

    .card-back {

    background: linear-gradient(135deg, #c62828, #e53935);

    color: white;

    .card-corner {

    display: flex;

    flex-direction: column;

    align-items: center;

    font-size: 22px;

    font-weight: bold;

    .top-left {

    align-self: flex-start;

    .bottom-right {

    align-self: flex-end;

    transform: rotate(180deg);

    .card-suit {

    font-size: 28px;

    .card-center {

    display: flex;

    justify-content: center;

    align-items: center;

    flex-grow: 1;

    font-size: 70px;

    .pattern {

    position: absolute;

    width: 400%;

    height: 150%;

    left: -130%;

    top: -65%;

    opacity: 0.08;

    background-image:

    repeating-linear-gradient(

    45deg,

    transparent,

    transparent 27px,

    white 29px,

    white 31px

    );

    transform: rotate(45deg);

    .explanation {

    margin-top: 55px;

    background-color: rgba(44, 62, 80, 0.75);

    padding: 24px;

    border-radius: 19px;

    line-height: 1.6;

    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.37);

    backdrop-filter: blur(8px);

    max-width: 700px;

    margin-left: auto;

    margin-right: auto;

    h2 {

    margin-bottom: 15px;

    color: #3498db;

    悟空德州

    p {

    margin-bottom: 14px;

    @media (max-width: 768px) {

    .cards-container {

    gap: 36px;

    .scene {

    width: 160px;

    height: 224px;

    .card-corner {

    font-size: 21px;

    .card-suit {

    font-size: 26px;

    .card-center {

    font-size: 62px;

    @media (max-width: 480px) {

    .controls {

    flex-direction: column;

    align-items: center;

    .scene {

    width: 140px;

    height: 196px;

    扑克牌翻面效果展示

    A

    A

    K

    K

    实现原理说明

    CSS 3D 变换: 使用 CSS 的 transform 和 transform-style 属性创建逼真的 3D 翻转效果。

    双面设计: 每张牌由正面和背面组成,通过 backface-visibility 控制可见性。

    交互动画: 通过 JavaScript 监听不同事件(悬停、点击)并应用 CSS 类触发翻转动画。

    视觉优化: 添加了阴影、渐变背景和图案纹理,使卡片更具立体感和真实感。

    document.addEventListener('DOMContentLoaded', function {

    const cards = document.querySelectorAll('.card');

    const hoverModeBtn = document.getElementById('hoverMode');

    const clickModeBtn = document.getElementById('clickMode');

    const autoFlipBtn = document.getElementById('autoFlip');

    const resetAllBtn = document.getElementById('resetAll');

    let currentMode = 'hover';

    let intervalId = null;

    // 悬停模式

    function enableHoverMode {

    clearInterval(intervalId);

    cards.forEach(card => {

    card.classList.remove('flipped');

    card.onmouseenter = function {

    this.classList.add('flipped');

    };

    };

    card.onmouseleave = function {

    this.classList.remove('flipped');

    };

    };

    // 移除点击事件

    card.onclick = null;

    });

    // 点击模式

    function enableClickMode {

    clearInterval(intervalId);

    cards.forEach(card => {

    card.classList.remove('flipped');

    card.onmouseenter = null;

    card.onmouseleave = null;

    card.onclick = function {

    this.classList.toggle('flipped');

    };

    });

    // 自动翻转

    function enableAutoFlip {

    cards.forEach(card => {

    card.onmouseenter = null;

    card.onmouseleave = null;

    card.onclick = null;

    });

    intervalId = setInterval(function {

    cards.forEach((card, index) => {

    setTimeout( => {

    card.classList.toggle('flipped');

    }, index * 300);

    });

    }, 2500);

    // 重置所有

    function resetAllCards {

    clearInterval(intervalId);

    cards.forEach(card => {

    card.classList.remove('flipped');

    });

    if (currentMode === 'hover') {

    enableHoverMode;

    } else if (currentMode === 'click') {

    enableClickMode;

    // 按钮事件监听

    hoverModeBtn.addEventListener('click', function {

    currentMode = 'hover';

    updateButtonStates;

    enableHoverMode;

    });

    clickModeBtn.addEventListener('click', function {

    currentMode = 'click';

    updateButtonStates;

    enableClickMode;

    });

    autoFlipBtn.addEventListener('click', function {

    currentMode = 'auto';

    updateButtonStates;

    enableAutoFlip;

    });

    resetAllBtn.addEventListener('click', resetAllCards);

    // 更新按钮状态

    function updateButtonStates {

    [hoverModeBtn, clickModeBtn, autoFlipBtn].forEach(btn => {

    btn.classList.remove('active');

    });

    if (currentMode === 'hover') {

    hoverModeBtn.classList.add('active');

    } else if (currentMode === 'click') {

    clickModeBtn.classList.add('active');

    } else if (currentMode === 'auto') {

    autoFlipBtn.classList.add('active');

    // 初始化

    enableHoverMode;

    updateButtonStates;

    });

    功能亮点

    1. 三种交互模式

  • 悬停翻转:鼠标悬停在牌上时自动翻转
  • 点击翻转:需要点击才会翻转
  • 自动翻转:两张牌交替自动翻转
  • 2. 视觉细节

  • 逼真的3D翻转效果
  • 精致的扑克牌设计(黑桃A和红心K)
  • 红色背面图案纹理
  • 阴影和渐变增强深度感
  • 3. 响应式设计

  • 适配各种屏幕尺寸
  • 在移动设备上依然保持良好的用户体验
  • 您可以直接复制此代码到HTML文件中运行,体验完整的扑克牌翻面效果!