• 响应式设计: 完美适配桌面、平板和手机。
  • 产品画廊: 多图展示,支持缩放和切换。
  • 核心信息展示: 清晰展示标题、价格、促销信息。
  • SKU 选择器: 颜色、尺码、规格等动态选择,影响库存和价格。
  • 数量选择器: 带有库存限制的加减按钮。
  • 用户评价预览: 展示评分和部分评论。
  • 相关推荐: 横向滚动的推荐商品。
  • 交互反馈: 加入购物车、收藏等按钮的动态效果。

最终效果预览


第一步:HTML 结构 (index.html)

这是整个页面的骨架,使用了语义化的 HTML5 标签。

html5淘宝产品展示模板
(图片来源网络,侵删)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">经典款小白鞋 - 产品详情</title>
    <!-- 引入 Tailwind CSS -->
    <script src="https://cdn.tailwindcss.com"></script>
    <!-- 引入 Font Awesome 图标库 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
</head>
<body class="bg-gray-100">
    <!-- 顶部导航栏 -->
    <header class="bg-white shadow-sm">
        <div class="container mx-auto px-4 py-3 flex items-center justify-between">
            <a href="#" class="text-xl font-bold text-red-600">我的淘宝</a>
            <div class="flex items-center space-x-4">
                <a href="#" class="text-gray-600 hover:text-red-600"><i class="fas fa-search"></i></a>
                <a href="#" class="text-gray-600 hover:text-red-600"><i class="fas fa-shopping-cart"></i></a>
                <a href="#" class="text-gray-600 hover:text-red-600"><i class="fas fa-user"></i></a>
            </div>
        </div>
    </header>
    <main class="container mx-auto px-4 py-8">
        <div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
            <!-- 左侧:产品图片 -->
            <section class="bg-white p-6 rounded-lg shadow">
                <div class="main-image mb-4">
                    <img id="main-img" src="https://via.placeholder.com/600x600/FFFFFF?text=Main+Image" alt="产品主图" class="w-full h-auto rounded-lg cursor-zoom-in">
                </div>
                <div class="thumbnail-list flex space-x-2 overflow-x-auto">
                    <img src="https://via.placeholder.com/150x150/EEEEEE?text=Thumb+1" alt="缩略图1" class="thumbnail w-20 h-20 object-cover rounded cursor-pointer border-2 border-red-500">
                    <img src="https://via.placeholder.com/150x150/DDDDDD?text=Thumb+2" alt="缩略图2" class="thumbnail w-20 h-20 object-cover rounded cursor-pointer border-2 border-transparent">
                    <img src="https://via.placeholder.com/150x150/CCCCCC?text=Thumb+3" alt="缩略图3" class="thumbnail w-20 h-20 object-cover rounded cursor-pointer border-2 border-transparent">
                    <img src="https://via.placeholder.com/150x150/BBBBBB?text=Thumb+4" alt="缩略图4" class="thumbnail w-20 h-20 object-cover rounded cursor-pointer border-2 border-transparent">
                </div>
            </section>
            <!-- 右侧:产品信息和购买 -->
            <section class="bg-white p-6 rounded-lg shadow">
                <h1 class="text-2xl font-bold mb-2">2025新款 经典款百搭小白鞋 女款透气防滑运动鞋</h1>
                <div class="mb-4">
                    <span class="text-3xl font-bold text-red-600">¥ 199.00</span>
                    <span class="text-gray-500 line-through ml-2">¥ 299.00</span>
                    <span class="bg-red-100 text-red-600 text-sm px-2 py-1 rounded ml-2">限时特惠</span>
                </div>
                <div class="mb-6">
                    <p class="text-gray-600 mb-2">已售 <span class="text-red-600 font-bold">20,000+</span> 件</p>
                    <p class="text-gray-600">累计评价 <span class="text-red-600 font-bold">5,000+</span> 条</p>
                </div>
                <!-- SKU 选择器 -->
                <div class="mb-6">
                    <h3 class="font-semibold mb-3">选择颜色</h3>
                    <div class="flex space-x-3 mb-4">
                        <button class="sku-option border-2 border-gray-300 rounded px-4 py-2 hover:border-red-500 focus:border-red-500 focus:outline-none" data-sku="color-white">经典白</button>
                        <button class="sku-option border-2 border-gray-300 rounded px-4 py-2 hover:border-red-500 focus:border-red-500 focus:outline-none" data-sku="color-black">神秘黑</button>
                    </div>
                    <h3 class="font-semibold mb-3">选择尺码</h3>
                    <div class="flex flex-wrap gap-2">
                        <button class="size-option border border-gray-300 rounded w-12 h-10 hover:border-red-500 focus:border-red-500 focus:outline-none" data-sku="size-35">35</button>
                        <button class="size-option border border-gray-300 rounded w-12 h-10 hover:border-red-500 focus:border-red-500 focus:outline-none" data-sku="size-36">36</button>
                        <button class="size-option border border-gray-300 rounded w-12 h-10 hover:border-red-500 focus:border-red-500 focus:outline-none" data-sku="size-37">37</button>
                        <button class="size-option border border-gray-300 rounded w-12 h-10 hover:border-red-500 focus:border-red-500 focus:outline-none" data-sku="size-38">38</button>
                        <button class="size-option border border-gray-300 rounded w-12 h-10 hover:border-red-500 focus:border-red-500 focus:outline-none" data-sku="size-39">39</button>
                        <button class="size-option border border-gray-300 rounded w-12 h-10 hover:border-red-500 focus:border-red-500 focus:outline-none" data-sku="size-40">40</button>
                    </div>
                </div>
                <!-- 数量选择器 -->
                <div class="mb-6">
                    <h3 class="font-semibold mb-3">数量</h3>
                    <div class="flex items-center">
                        <button id="decrease-btn" class="bg-gray-200 text-gray-700 w-10 h-10 rounded-l-lg hover:bg-gray-300 focus:outline-none">
                            <i class="fas fa-minus"></i>
                        </button>
                        <input id="quantity" type="number" value="1" min="1" max="99" class="w-16 h-10 text-center border-t border-b border-gray-300 focus:outline-none">
                        <button id="increase-btn" class="bg-gray-200 text-gray-700 w-10 h-10 rounded-r-lg hover:bg-gray-300 focus:outline-none">
                            <i class="fas fa-plus"></i>
                        </button>
                        <span class="ml-4 text-gray-600">库存 <span id="stock" class="text-red-600 font-bold">99</span> 件</span>
                    </div>
                </div>
                <!-- 购买按钮 -->
                <div class="flex space-x-4 mb-6">
                    <button class="flex-1 bg-red-600 text-white py-3 rounded-lg font-bold hover:bg-red-700 transition duration-300">
                        立即购买
                    </button>
                    <button id="add-to-cart-btn" class="flex-1 bg-orange-500 text-white py-3 rounded-lg font-bold hover:bg-orange-600 transition duration-300">
                        加入购物车
                    </button>
                </div>
                <!-- 服务保障 -->
                <div class="border-t pt-4">
                    <div class="flex items-center text-gray-600 text-sm mb-2">
                        <i class="fas fa-check-circle text-green-500 mr-2"></i>
                        <span>正品保证</span>
                    </div>
                    <div class="flex items-center text-gray-600 text-sm mb-2">
                        <i class="fas fa-shipping-fast text-blue-500 mr-2"></i>
                        <span>极速发货</span>
                    </div>
                    <div class="flex items-center text-gray-600 text-sm">
                        <i class="fas fa-undo text-purple-500 mr-2"></i>
                        <span>7天无理由退换</span>
                    </div>
                </div>
            </section>
        </div>
        <!-- 用户评价 -->
        <section class="bg-white mt-8 p-6 rounded-lg shadow">
            <h2 class="text-xl font-bold mb-4">用户评价 (4.8分)</h2>
            <div class="border-b pb-4 mb-4">
                <div class="flex items-center mb-2">
                    <span class="font-semibold">用户A</span>
                    <div class="ml-2 text-yellow-400">
                        <i class="fas fa-star"></i>
                        <i class="fas fa-star"></i>
                        <i class="fas fa-star"></i>
                        <i class="fas fa-star"></i>
                        <i class="fas fa-star"></i>
                    </div>
                </div>
                <p class="text-gray-700">鞋子很舒服,款式也好看,物流很快,下次还会再来!</p>
            </div>
            <div>
                <div class="flex items-center mb-2">
                    <span class="font-semibold">用户B</span>
                    <div class="ml-2 text-yellow-400">
                        <i class="fas fa-star"></i>
                        <i class="fas fa-star"></i>
                        <i class="fas fa-star"></i>
                        <i class="fas fa-star"></i>
                        <i class="far fa-star"></i>
                    </div>
                </div>
                <p class="text-gray-700">尺码标准,穿着很合脚,就是希望颜色能再多一点选择。</p>
            </div>
        </section>
        <!-- 相关推荐 -->
        <section class="mt-8">
            <h2 class="text-xl font-bold mb-4">相关推荐</h2>
            <div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4">
                <div class="bg-white rounded-lg shadow overflow-hidden hover:shadow-lg transition duration-300">
                    <img src="https://via.placeholder.com/200x200/EEEEEE?text=Related+1" alt="相关商品1" class="w-full h-40 object-cover">
                    <div class="p-3">
                        <h3 class="text-sm font-semibold mb-1 truncate">复古帆布鞋</h3>
                        <p class="text-red-600 font-bold">¥ 159.00</p>
                    </div>
                </div>
                <div class="bg-white rounded-lg shadow overflow-hidden hover:shadow-lg transition duration-300">
                    <img src="https://via.placeholder.com/200x200/DDDDDD?text=Related+2" alt="相关商品2" class="w-full h-40 object-cover">
                    <div class="p-3">
                        <h3 class="text-sm font-semibold mb-1 truncate">高帮板鞋</h3>
                        <p class="text-red-600 font-bold">¥ 229.00</p>
                    </div>
                </div>
                <div class="bg-white rounded-lg shadow overflow-hidden hover:shadow-lg transition duration-300">
                    <img src="https://via.placeholder.com/200x200/CCCCCC?text=Related+3" alt="相关商品3" class="w-full h-40 object-cover">
                    <div class="p-3">
                        <h3 class="text-sm font-semibold mb-1 truncate">跑步鞋</h3>
                        <p class="text-red-600 font-bold">¥ 399.00</p>
                    </div>
                </div>
                <div class="bg-white rounded-lg shadow overflow-hidden hover:shadow-lg transition duration-300">
                    <img src="https://via.placeholder.com/200x200/BBBBBB?text=Related+4" alt="相关商品4" class="w-full h-40 object-cover">
                    <div class="p-3">
                        <h3 class="text-sm font-semibold mb-1 truncate">休闲皮鞋</h3>
                        <p class="text-red-600 font-bold">¥ 459.00</p>
                    </div>
                </div>
                <div class="bg-white rounded-lg shadow overflow-hidden hover:shadow-lg transition duration-300">
                    <img src="https://via.placeholder.com/200x200/AAAAAA?text=Related+5" alt="相关商品5" class="w-full h-40 object-cover">
                    <div class="p-3">
                        <h3 class="text-sm font-semibold mb-1 truncate">登山鞋</h3>
                        <p class="text-red-600 font-bold">¥ 599.00</p>
                    </div>
                </div>
                <div class="bg-white rounded-lg shadow overflow-hidden hover:shadow-lg transition duration-300">
                    <img src="https://via.placeholder.com/200x200/999999?text=Related+6" alt="相关商品6" class="w-full h-40 object-cover">
                    <div class="p-3">
                        <h3 class="text-sm font-semibold mb-1 truncate">洞洞鞋</h3>
                        <p class="text-red-600 font-bold">¥ 89.00</p>
                    </div>
                </div>
            </div>
        </section>
    </main>
    <!-- 页脚 -->
    <footer class="bg-gray-800 text-white mt-12 py-8">
        <div class="container mx-auto px-4 text-center">
            <p>&copy; 2025 我的淘宝. All rights reserved.</p>
        </div>
    </footer>
    <!-- 引入自定义 JavaScript -->
    <script src="script.js"></script>
</body>
</html>

第二步:CSS 样式 (style.css)

虽然我们使用了 Tailwind CSS,但为了处理一些特定的交互效果(如图片缩放),我们还需要一些自定义 CSS。

创建一个名为 style.css 的文件,并将其链接到 HTML 的 <head> 中(在 Tailwind CSS 之后)。

/* style.css */
/* 图片缩放效果 */
.zoom-overlay {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.9);
    z-index: 1000;
    cursor: zoom-out;
    justify-content: center;
    align-items: center;
}
.zoom-overlay img {
    max-width: 90%;
    max-height: 90%;
    object-fit: contain;
}
/* 选中 SKU 时的样式 */
.sku-option.selected,
.size-option.selected {
    border-color: #ef4444 !important; /* Tailwind red-500 */
    background-color: #fee2e2; /* Tailwind red-100 */
    color: #dc2626; /* Tailwind red-600 */
}
/* 数量输入框样式优化 */
#quantity {
    -moz-appearance: textfield; /* Firefox */
}
#quantity::-webkit-outer-spin-button,
#quantity::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

别忘了在 index.html<head> 中添加这个链接:

<link rel="stylesheet" href="style.css">

第三步:JavaScript 交互 (script.js)

这是让页面“活”起来的关键部分,处理图片切换、SKU选择、数量增减等所有交互逻辑。

html5淘宝产品展示模板
(图片来源网络,侵删)

创建一个名为 script.js 的文件,并将其放在 HTML 文件的同级目录下。

// script.js
document.addEventListener('DOMContentLoaded', function () {
    // 1. 图片画廊功能
    const mainImg = document.getElementById('main-img');
    const thumbnails = document.querySelectorAll('.thumbnail');
    thumbnails.forEach(thumb => {
        thumb.addEventListener('click', function() {
            // 移除所有缩略图的选中边框
            thumbnails.forEach(t => t.classList.remove('border-red-500'));
            thumbnails.forEach(t => t.classList.add('border-transparent'));
            // 为当前点击的缩略图添加选中边框
            this.classList.remove('border-transparent');
            this.classList.add('border-red-500');
            // 更新主图
            mainImg.src = this.src;
        });
    });
    // 2. 图片缩放功能
    mainImg.addEventListener('click', function() {
        const overlay = document.createElement('div');
        overlay.className = 'zoom-overlay';
        overlay.innerHTML = `<img src="${this.src}" alt="Zoomed Image">`;
        document.body.appendChild(overlay);
        overlay.style.display = 'flex';
        overlay.addEventListener('click', function() {
            document.body.removeChild(this);
        });
    });
    // 3. SKU 选择功能
    const skuOptions = document.querySelectorAll('.sku-option');
    const sizeOptions = document.querySelectorAll('.size-option');
    let selectedColor = '';
    let selectedSize = '';
    let currentStock = 99; // 初始库存
    // 模拟不同SKU的库存
    const skuStock = {
        'color-white': { 'size-35': 10, 'size-36': 15, 'size-37': 20, 'size-38': 25, 'size-39': 20, 'size-40': 9 },
        'color-black': { 'size-35': 5, 'size-36': 8, 'size-37': 12, 'size-38': 18, 'size-39': 15, 'size-40': 5 }
    };
    skuOptions.forEach(option => {
        option.addEventListener('click', function() {
            skuOptions.forEach(o => o.classList.remove('selected'));
            this.classList.add('selected');
            selectedColor = this.dataset.sku;
            updateAvailableSizes();
        });
    });
    sizeOptions.forEach(option => {
        option.addEventListener('click', function() {
            sizeOptions.forEach(o => o.classList.remove('selected'));
            this.classList.add('selected');
            selectedSize = this.dataset.sku;
            updateStock();
        });
    });
    function updateAvailableSizes() {
        sizeOptions.forEach(option => {
            const sizeKey = option.dataset.sku;
            if (skuStock[selectedColor] && skuStock[selectedColor][sizeKey] > 0) {
                option.disabled = false;
                option.classList.remove('opacity-50', 'cursor-not-allowed');
            } else {
                option.disabled = true;
                option.classList.add('opacity-50', 'cursor-not-allowed');
            }
        });
        // 清空已选尺码
        sizeOptions.forEach(o => o.classList.remove('selected'));
        selectedSize = '';
        document.getElementById('stock').textContent = '请选择尺码';
    }
    function updateStock() {
        if (selectedColor && selectedSize) {
            currentStock = skuStock[selectedColor][selectedSize];
            document.getElementById('stock').textContent = currentStock;
            // 同步更新数量选择器的最大值
            document.getElementById('quantity').max = currentStock;
            if (parseInt(document.getElementById('quantity').value) > currentStock) {
                document.getElementById('quantity').value = currentStock;
            }
        }
    }
    // 4. 数量选择器功能
    const quantityInput = document.getElementById('quantity');
    const decreaseBtn = document.getElementById('decrease-btn');
    const increaseBtn = document.getElementById('increase-btn');
    decreaseBtn.addEventListener('click', function() {
        let val = parseInt(quantityInput.value);
        if (val > 1) {
            quantityInput.value = val - 1;
        }
    });
    increaseBtn.addEventListener('click', function() {
        let val = parseInt(quantityInput.value);
        if (val < currentStock && val < 99) {
            quantityInput.value = val + 1;
        }
    });
    quantityInput.addEventListener('change', function() {
        let val = parseInt(this.value);
        if (isNaN(val) || val < 1) {
            this.value = 1;
        } else if (val > currentStock) {
            this.value = currentStock;
            alert('您选择的数量已超过库存上限!');
        } else if (val > 99) {
            this.value = 99;
        }
    });
    // 5. 加入购物车按钮反馈
    const addToCartBtn = document.getElementById('add-to-cart-btn');
    addToCartBtn.addEventListener('click', function() {
        if (!selectedColor || !selectedSize) {
            alert('请先选择颜色和尺码!');
            return;
        }
        // 这里可以添加实际的加入购物车逻辑,比如发送AJAX请求
        const originalText = this.innerHTML;
        this.innerHTML = '<i class="fas fa-check mr-2"></i>已加入';
        this.classList.remove('bg-orange-500', 'hover:bg-orange-600');
        this.classList.add('bg-green-500');
        setTimeout(() => {
            this.innerHTML = originalText;
            this.classList.remove('bg-green-500');
            this.classList.add('bg-orange-500', 'hover:bg-orange-600');
        }, 2000);
    });
});

如何使用

  1. 创建文件: 在一个文件夹中创建 index.html, style.css, 和 script.js 三个文件。
  2. 复制代码: 将上面提供的代码分别复制到对应的文件中。
  3. 替换图片: 将占位图片 URL (https://via.placeholder.com/...) 替换为你自己的产品图片路径。
  4. 打开浏览器: 直接用浏览器打开 index.html 文件,即可看到一个功能齐全的产品详情页。

这个模板为你提供了一个坚实的基础,你可以根据实际需求进行修改和扩展,例如添加商品详情描述、规格参数、更复杂的SKU逻辑等。

html5淘宝产品展示模板
(图片来源网络,侵删)