卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章1829本站已运行4109

孟菲斯风格天气HTML卡片源码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>孟菲斯风格天气卡片</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            background-color: #f5f5f5;
            font-family: 'Arial', sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            background: #fdf5e6;
        }
         
        .container {
            width: 90%;
            max-width: 600px;
            background: white;
            border-radius: 20px;
            overflow: hidden;
            padding: 25px;
            position: relative;
            box-shadow: 8px 8px 0px #FF6B6B;
            border: 3px solid #000;
        }
         
        /* 孟菲斯风格装饰元素 */
        .memphis-dot {
            position: absolute;
            width: 20px;
            height: 20px;
            background: #FFD166;
            border-radius: 50%;
            border: 2px solid #000;
        }
         
        .memphis-dot-1 {
            top: 15px;
            right: 20px;
        }
         
        .memphis-dot-2 {
            bottom: 20px;
            left: 25px;
            background: #4ECDC4;
        }
         
        .memphis-zigzag {
            position: absolute;
            top: 70px;
            right: 30px;
            width: 60px;
            height: 15px;
            background: repeating-linear-gradient(45deg, #FF6B6B, #FF6B6B 10px, transparent 10px, transparent 20px);
            transform: rotate(-15deg);
            border: 2px solid #000;
        }
         
        .memphis-square {
            position: absolute;
            bottom: 100px;
            right: 40px;
            width: 30px;
            height: 30px;
            background: #06D6A0;
            border: 2px solid #000;
            transform: rotate(30deg);
        }
         
        .memphis-triangle {
            position: absolute;
            top: 150px;
            left: 20px;
            width: 0;
            height: 0;
            border-left: 25px solid transparent;
            border-right: 25px solid transparent;
            border-bottom: 40px solid #118AB2;
            z-index: 0;
        }
         
        .header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 25px;
            position: relative;
            z-index: 1;
        }
         
        .location {
            font-size: 1.8rem;
            font-weight: bold;
            color: #073B4C;
            background: #FFD166;
            padding: 5px 15px;
            border-radius: 10px;
            border: 2px solid #000;
            box-shadow: 4px 4px 0px #000;
        }
         
        .date-time {
            font-size: 0.9rem;
            color: #073B4C;
            background: #4ECDC4;
            padding: 5px 10px;
            border-radius: 8px;
            border: 2px solid #000;
        }
         
        .main-info {
            display: flex;
            justify-content: space-between;
            margin-bottom: 30px;
            position: relative;
            z-index: 1;
        }
         
        .temperature {
            font-size: 3.5rem;
            font-weight: bold;
            color: #073B4C;
            background: #FF6B6B;
            padding: 5px 15px;
            border-radius: 15px;
            border: 2px solid #000;
            box-shadow: 6px 6px 0px #000;
        }
         
        .weather-icon {
            font-size: 3rem;
            margin-right: 20px;
            background: white;
            width: 70px;
            height: 70px;
            display: flex;
            align-items: center;
            justify-content: center;
            border-radius: 50%;
            border: 2px solid #000;
            box-shadow: 4px 4px 0px #000;
        }
         
        .weather-desc {
            color: #073B4C;
            font-size: 1.2rem;
            margin: 10px 0;
            font-weight: bold;
            background: #F4F1DE;
            padding: 5px 10px;
            border-radius: 8px;
            border: 2px solid #000;
        }
         
        .details {
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 15px;
            margin-bottom: 30px;
            position: relative;
            z-index: 1;
        }
         
        .detail-item {
            background-color: white;
            padding: 12px;
            border-radius: 10px;
            border: 2px solid #000;
            box-shadow: 4px 4px 0px #000;
        }
         
        .detail-item:nth-child(odd) {
            background: #F4F1DE;
        }
         
        .detail-item:nth-child(even) {
            background: #E2F0CB;
        }
         
        .detail-label {
            font-size: 0.9rem;
            color: #073B4C;
            margin-bottom: 5px;
            font-weight: bold;
        }
         
        .detail-value {
            font-size: 1.1rem;
            color: #118AB2;
            font-weight: bold;
        }
         
        .forecast {
            margin-top: 30px;
            overflow-x: auto;
            position: relative;
            z-index: 1;
        }
         
        .forecast-title {
            color: #073B4C;
            margin-bottom: 15px;
            font-size: 1.3rem;
            font-weight: bold;
            background: #FFD166;
            display: inline-block;
            padding: 5px 15px;
            border-radius: 10px;
            border: 2px solid #000;
            box-shadow: 4px 4px 0px #000;
        }
         
        .forecast-container {
            display: flex;
            padding-bottom: 15px;
        }
         
        .forecast-item {
            min-width: 90px;
            text-align: center;
            margin-right: 15px;
            background-color: white;
            padding: 12px;
            border-radius: 10px;
            border: 2px solid #000;
            box-shadow: 4px 4px 0px #000;
        }
         
        .forecast-item:nth-child(1) { background: #FFD166; }
        .forecast-item:nth-child(2) { background: #06D6A0; }
        .forecast-item:nth-child(3) { background: #118AB2; color: white; }
        .forecast-item:nth-child(4) { background: #F4F1DE; }
        .forecast-item:nth-child(5) { background: #FF6B6B; }
         
        .forecast-time {
            font-size: 0.9rem;
            color: #073B4C;
            margin-bottom: 8px;
            font-weight: bold;
        }
         
        .forecast-temp {
            font-size: 1.3rem;
            color: #073B4C;
            margin: 8px 0;
            font-weight: bold;
        }
         
        .forecast-desc {
            font-size: 0.9rem;
            color: #073B4C;
            font-weight: bold;
        }
 
        .air-quality {
            margin-top: 30px;
            padding: 15px;
            background-color: #F4F1DE;
            border-radius: 15px;
            border: 2px solid #000;
            box-shadow: 6px 6px 0px #000;
            position: relative;
            z-index: 1;
        }
         
        .air-quality-title {
            color: #073B4C;
            margin-bottom: 15px;
            font-size: 1.3rem;
            font-weight: bold;
            background: #FF6B6B;
            display: inline-block;
            padding: 3px 10px;
            border-radius: 8px;
            border: 2px solid #000;
        }
         
        .air-quality-grid {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 10px;
        }
         
        .air-quality-item {
            background: white;
            padding: 8px;
            border-radius: 8px;
            border: 2px solid #000;
            text-align: center;
        }
         
        .air-quality-label {
            color: #073B4C;
            font-weight: bold;
            font-size: 0.9rem;
        }
         
        .air-quality-value {
            color: #118AB2;
            font-weight: bold;
            font-size: 1.2rem;
        }
         
        .air-quality-message {
            margin-top: 15px;
            color: #073B4C;
            background: #06D6A0;
            padding: 8px;
            border-radius: 8px;
            border: 2px solid #000;
            font-weight: bold;
        }
         
        .indices {
            margin-top: 30px;
            position: relative;
            z-index: 1;
        }
         
        .indices-title {
            color: #073B4C;
            margin-bottom: 15px;
            font-size: 1.3rem;
            font-weight: bold;
            background: #4ECDC4;
            display: inline-block;
            padding: 5px 15px;
            border-radius: 10px;
            border: 2px solid #000;
            box-shadow: 4px 4px 0px #000;
        }
         
        .indices-container {
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
        }
         
        .index-item {
            background: #F4F1DE;
            padding: 8px 12px;
            border-radius: 8px;
            border: 2px solid #000;
            font-weight: bold;
            color: #073B4C;
            display: flex;
            align-items: center;
        }
         
        .index-item span {
            color: #118AB2;
            margin-left: 5px;
        }
         
        /* 适配移动设备 */
        [url=home.php?mod=space&uid=945662]@media[/url] (max-width: 600px) {
            .details {
                grid-template-columns: 1fr;
            }
             
            .air-quality-grid {
                grid-template-columns: repeat(2, 1fr);
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <!-- 孟菲斯风格装饰元素 -->
        <div class="memphis-dot memphis-dot-1"></div>
        <div class="memphis-dot memphis-dot-2"></div>
        <div class="memphis-zigzag"></div>
        <div class="memphis-square"></div>
        <div class="memphis-triangle"></div>
         
        <div class="header">
            <div class="location">东湖区</div>
            <div class="date-time">2025-02-26 20:58</div>
        </div>
         
        <div class="main-info">
            <div>
                <div class="temperature">11.2°C</div>
                <div class="weather-desc">当前天气: 霾</div>
                <div class="weather-desc">今日: 9°C - 20°C</div>
            </div>
            <div class="weather-icon">&#9729;&#65039;</div>
        </div>
         
        <div class="details">
            <div class="detail-item">
                <div class="detail-label">风向/风力</div>
                <div class="detail-value">西北风 1级 (2km/h)</div>
            </div>
            <div class="detail-item">
                <div class="detail-label">湿度</div>
                <div class="detail-value">72%</div>
            </div>
            <div class="detail-item">
                <div class="detail-label">能见度</div>
                <div class="detail-value">6km</div>
            </div>
            <div class="detail-item">
                <div class="detail-label">气压</div>
                <div class="detail-value">1016 hPa</div>
            </div>
            <div class="detail-item">
                <div class="detail-label">日出</div>
                <div class="detail-value">06:45</div>
            </div>
            <div class="detail-item">
                <div class="detail-label">日落</div>
                <div class="detail-value">18:14</div>
            </div>
        </div>
         
        <div class="air-quality">
            <div class="air-quality-title">空气质量数据 [AQI: 78 - 良]</div>
            <div class="air-quality-grid">
                <div class="air-quality-item">
                    <div class="air-quality-label">PM2.5</div>
                    <div class="air-quality-value">57</div>
                </div>
                <div class="air-quality-item">
                    <div class="air-quality-label">PM10</div>
                    <div class="air-quality-value">76</div>
                </div>
                <div class="air-quality-item">
                    <div class="air-quality-label">CO</div>
                    <div class="air-quality-value">0.7</div>
                </div>
                <div class="air-quality-item">
                    <div class="air-quality-label">NO2</div>
                    <div class="air-quality-value">34</div>
                </div>
                <div class="air-quality-item">
                    <div class="air-quality-label">SO2</div>
                    <div class="air-quality-value">5</div>
                </div>
                <div class="air-quality-item">
                    <div class="air-quality-label">O3</div>
                    <div class="air-quality-value">65</div>
                </div>
            </div>
            <div class="air-quality-message">
                空气好,除极少数对污染物特别敏感的人群以外,对公众没有危害!
            </div>
        </div>
         
        <div class="forecast">
            <div class="forecast-title">未来预报</div>
            <div class="forecast-container">
                <div class="forecast-item">
                    <div class="forecast-time">21:00</div>
                    <div class="forecast-temp">10°C</div>
                    <div class="forecast-desc">多云</div>
                </div>
                <div class="forecast-item">
                    <div class="forecast-time">22:00</div>
                    <div class="forecast-temp">10°C</div>
                    <div class="forecast-desc">多云</div>
                </div>
                <div class="forecast-item">
                    <div class="forecast-time">23:00</div>
                    <div class="forecast-temp">10°C</div>
                    <div class="forecast-desc">阴</div>
                </div>
                <div class="forecast-item">
                    <div class="forecast-time">00:00</div>
                    <div class="forecast-temp">10°C</div>
                    <div class="forecast-desc">小雨</div>
                </div>
                <div class="forecast-item">
                    <div class="forecast-time">01:00</div>
                    <div class="forecast-temp">10°C</div>
                    <div class="forecast-desc">小雨</div>
                </div>
            </div>
        </div>
         
        <div class="indices">
            <div class="indices-title">生活指数</div>
            <div class="indices-container">
                <div class="index-item">钓鱼 <span>适宜</span></div>
                <div class="index-item">感冒 <span>易发</span></div>
                <div class="index-item">过敏 <span>不易</span></div>
                <div class="index-item">洗车 <span>较适宜</span></div>
                <div class="index-item">运动 <span>较适宜</span></div>
                <div class="index-item">紫外线 <span>最弱</span></div>
            </div>
        </div>
    </div>
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 定义API请求地址
    const token = "你的token";
    const apiUrl = 'https://v3.alapi.cn/api/tianqi?token='+token;
     
    // 发起API请求
    fetch(apiUrl)
        .then(response => {
            if (!response.ok) {
                throw new Error('网络响应异常');
            }
            return response.json();
        })
        .then(data => {
            if (data.success) {
                // 获取天气数据成功,更新页面
                updateWeatherData(data.data);
            } else {
                console.error('获取天气数据失败:', data.message);
            }
        })
        .catch(error => {
            console.error('请求天气数据出错:', error);
        });
});
 
// 更新页面上的天气数据
function updateWeatherData(data) {
    // 更新位置和时间
    document.querySelector('.location').textContent = data.city;
    document.querySelector('.date-time').textContent = data.date + ' ' + data.update_time.split(' ')[1];
     
    // 更新主要天气信息
    document.querySelector('.temperature').textContent = data.temp + '°C';
    document.querySelector('.weather-desc').textContent = '当前天气: ' + data.weather;
    document.querySelector('.weather-desc:nth-child(3)').textContent = '今日: ' + data.min_temp + '°C - ' + data.max_temp + '°C';
     
    // 更新天气图标 (这里可以根据weather_code设置不同的图标)
    updateWeatherIcon(data.weather_code);
     
    // 更新详细信息
    const detailValues = document.querySelectorAll('.detail-value');
    detailValues[0].textContent = data.wind + ' ' + data.wind_power + ' (' + data.wind_speed + ')';
    detailValues[1].textContent = data.humidity;
    detailValues[2].textContent = data.visibility;
    detailValues[3].textContent = data.pressure + ' hPa';
    detailValues[4].textContent = data.sunrise;
    detailValues[5].textContent = data.sunset;
     
    // 更新空气质量数据
    document.querySelector('.air-quality-title').textContent = '空气质量数据 [AQI: ' + data.aqi.air + ' - ' + data.aqi.air_level + ']';
     
    const aqiValues = document.querySelectorAll('.air-quality-value');
    aqiValues[0].textContent = data.aqi.pm25;
    aqiValues[1].textContent = data.aqi.pm10;
    aqiValues[2].textContent = data.aqi.co;
    aqiValues[3].textContent = data.aqi.no2;
    aqiValues[4].textContent = data.aqi.so2;
    aqiValues[5].textContent = data.aqi.o3;
     
    document.querySelector('.air-quality-message').textContent = data.aqi.air_tips;
     
    // 更新未来预报
    updateForecast(data.hour);
     
    // 更新生活指数
    updateIndices(data.index);
}
 
// 更新天气图标
function updateWeatherIcon(weatherCode) {
    let icon = '&#9729;&#65039;'; // 默认图标
     
    // 根据天气代码设置不同的图标
    switch(weatherCode) {
        case 'qing':
            icon = '&#9728;&#65039;';
            break;
        case 'duoyun':
            icon = '&#9925;';
            break;
        case 'yin':
            icon = '&#9729;&#65039;';
            break;
        case 'yu':
        case 'xiaoyu':
            icon = '&#127783;&#65039;';
            break;
        case 'dayu':
            icon = '&#127783;&#65039;';
            break;
        case 'xue':
            icon = '&#10052;&#65039;';
            break;
        case 'mai':
            icon = '&#127787;&#65039;';
            break;
        // 可以添加更多天气代码对应的图标
    }
     
    document.querySelector('.weather-icon').textContent = icon;
}
 
// 更新未来预报
function updateForecast(hourData) {
    const forecastItems = document.querySelectorAll('.forecast-item');
     
    // 只显示未来5个小时的预报
    for (let i = 0; i < 5 && i < hourData.length; i++) {
        const hour = hourData[i];
        const time = hour.time.split(' ')[1].substring(0, 5);
         
        forecastItems[i].querySelector('.forecast-time').textContent = time;
        forecastItems[i].querySelector('.forecast-temp').textContent = hour.temp + '°C';
        forecastItems[i].querySelector('.forecast-desc').textContent = hour.wea;
    }
}
 
// 更新生活指数
function updateIndices(indexData) {
    const indexItems = document.querySelectorAll('.index-item');
     
    // 遍历生活指数数据
    indexData.forEach((item, index) => {
        if (index < indexItems.length) {
            const nameElement = document.createTextNode(item.name.replace('指数', '') + ' ');
            const spanElement = document.createElement('span');
            spanElement.textContent = item.level;
             
            // 清空原有内容
            indexItems[index].innerHTML = '';
             
            // 添加新内容
            indexItems[index].appendChild(nameElement);
            indexItems[index].appendChild(spanElement);
        }
    });
}
</script>
</body>
</html>
 
卓越飞翔博客
上一篇: HTML 反应速度测试工具
下一篇: deepseek自动生成的html九宫格抽奖页面
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏