简介:本文将详细介绍如何使用HTML、CSS及少量JavaScript实现一个美观且功能完整的塔罗牌占卜与十二星座运势网站,包含设计思路、交互实现与代码示例。
一个完整的运势网站需包含三大模块:
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>星运塔罗 - 每日运势指引</title><link rel="stylesheet" href="styles.css"></head><body><header class="site-header"><h1 class="logo">星运塔罗</h1><nav class="main-nav"><a href="#tarot">塔罗占卜</a><a href="#zodiac">星座运势</a><a href="#about">关于</a></nav></header><main class="container"><!-- 塔罗牌区域 --><section id="tarot" class="tarot-section"><h2>塔罗牌占卜</h2><div class="card-deck"><!-- 动态生成牌组 --></div><button id="draw-btn" class="action-btn">抽取塔罗牌</button></section><!-- 星座区域 --><section id="zodiac" class="zodiac-section"><h2>今日星座运势</h2><div class="zodiac-grid"><!-- 12星座卡片 --></div></section></main><script src="script.js"></script></body></html>
<meta name="viewport">确保移动端适配<section>划分功能区块,<nav>定义导航aria-label属性
/* 卡牌基础样式 */.tarot-card {width: 120px;height: 180px;background: linear-gradient(135deg, #2c3e50, #4ca1af);border-radius: 10px;box-shadow: 0 10px 20px rgba(0,0,0,0.3);position: relative;transform-style: preserve-3d;transition: transform 0.8s;cursor: pointer;}/* 3D翻转效果 */.tarot-card.flipped {transform: rotateY(180deg);}/* 卡牌正面/背面 */.card-front, .card-back {position: absolute;width: 100%;height: 100%;backface-visibility: hidden;}.card-back {background: url('card-back.png') center/cover;transform: rotateY(180deg);}
.zodiac-card {background: white;border-radius: 15px;padding: 20px;text-align: center;transition: transform 0.3s;}.zodiac-card:hover {transform: translateY(-5px);}/* 星座图标样式 */.zodiac-icon {width: 60px;height: 60px;margin: 0 auto 10px;filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));}
// 卡牌数据const tarotDeck = [{ id: 0, name: "愚者", meaning: "新的开始" },// 其他77张牌...];// 抽牌功能document.getElementById('draw-btn').addEventListener('click', function() {// 清空现有卡牌const deck = document.querySelector('.card-deck');deck.innerHTML = '';// 随机抽取3张牌(三牌阵)for (let i = 0; i < 3; i++) {const randomIndex = Math.floor(Math.random() * tarotDeck.length);const card = tarotDeck[randomIndex];// 创建卡牌元素const cardElement = document.createElement('div');cardElement.className = 'tarot-card';cardElement.innerHTML = `<div class="card-front"><h3>${card.name}</h3><p>${card.meaning}</p></div><div class="card-back"></div>`;// 点击翻转cardElement.addEventListener('click', function() {this.classList.toggle('flipped');});deck.appendChild(cardElement);}});
// 模拟星座数据const zodiacData = {aries: {date: "3.21-4.19",today: "事业运旺盛,适合谈判",lucky: "红色"},// 其他11个星座...};// 渲染星座卡片function renderZodiacCards() {const grid = document.querySelector('.zodiac-grid');for (const [sign, data] of Object.entries(zodiacData)) {const card = document.createElement('div');card.className = 'zodiac-card';card.innerHTML = `<img src="icons/${sign}.png" alt="${sign}" class="zodiac-icon"><h3>${sign.charAt(0).toUpperCase() + sign.slice(1)}</h3><p>${data.date}</p><p>今日运势: ${data.today}</p><p>幸运色: ${data.lucky}</p>`;grid.appendChild(card);}}// 页面加载时执行document.addEventListener('DOMContentLoaded', renderZodiacCards);
<div class="spread-selector"><button class="spread-btn active" data-spread="single">单牌</button><button class="spread-btn" data-spread="three">三牌阵</button><button class="spread-btn" data-spread="celtic">十字牌阵</button></div>
// 牌阵切换逻辑document.querySelectorAll('.spread-btn').forEach(btn => {btn.addEventListener('click', function() {// 更新活动状态document.querySelector('.spread-btn.active').classList.remove('active');this.classList.add('active');// 存储当前牌阵currentSpread = this.dataset.spread;});});
// 生成分享图片function shareResult() {const canvas = document.createElement('canvas');const ctx = canvas.getContext('2d');// 设置画布尺寸canvas.width = 400;canvas.height = 600;// 绘制背景ctx.fillStyle = '#f8f9fa';ctx.fillRect(0, 0, canvas.width, canvas.height);// 添加文字(实际项目可使用更复杂的排版)ctx.font = '20px Arial';ctx.fillStyle = '#333';ctx.fillText('我的今日运势', 50, 50);// 转换为图片URLconst imageUrl = canvas.toDataURL('image/png');// 创建分享链接(需适配不同平台)const link = document.createElement('a');link.href = imageUrl;link.download = 'star-fortune.png';link.click();}
loading="lazy"属性优化星座图标加载此实现方案兼顾了视觉效果与交互体验,开发者可根据实际需求调整卡牌数量、动画复杂度等参数。建议先完成核心功能,再逐步添加社交分享、历史记录等增强功能。