HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用

拿走请吱一声,点个关注吧,代码如下,网页有移动端适配

HTML

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="/index.css">
    </link>
    <title>Document</title>
</head>

<body style="margin: 0;">
    <div id="app">
        <div class="meun-btn" @click="showMeun"></div>
        <div id="sidebar" class="sidebar">
            <img class="close-btn" src="img/close.svg" @click="closeMeun" />
            <div class="content">
                <ul>
                    <li>Home</li>
                    <li>Track My Order</li>
                    <li>Contact us</li>
                </ul>
                <ul>
                    <li>FAQs</li>
                    <li>Return Policy</li>
                    <li>Payment Methods</li>
                    <li>Terms of Service</li>
                    <li>Privacy Policy</li>
                    <li>Shipping Policy</li>
                </ul>
            </div>
        </div>
        <div class="overlay" v-show="show" @click="closeMeun"></div>
        <div style="background-color: #f7f7f7">
            <div class="logo">
                <img src="img/logo.gif" width="100">
            </div>
            <div class="content">
                <div class="left">
                    <div class="img" :style="{backgroundImage: `url('/img/${optionIndex}.jpg')`}"></div>
                    <div class="img-bar">
                        <div class="front" @click="frontImg">
                            <img src="img/zuojiantou.svg" alt="">
                        </div>
                        <div class="product-bar">
                            <div class="product-image" v-for="(item, index) in options" :key="index"
                                @click="optionIndex=index">
                                <img :src="`img/${index}.jpg`">
                            </div>
                        </div>
                        <div class="next" @click="nextImg">
                            <img src="img/youjiantou.svg" alt="">
                        </div>
                    </div>
                </div>
                <div class="right">
                    <h1>🔥LAST DAY 60% OFF🎁Intelligent Electric Heating Scarf🔥</h1>
                    <div class="price">
                        <span class="old">$45.96 </span>
                        <span class="new">$22.98</span>
                    </div>
                    <hr>
                    <div class="text">
                        <p>HURRY! ONLY <span style="color: red;">250</span> LEFT IN STOCK.</p>
                        <p>
                            <span>98%</span> customer buy <span>3-5</span> items to use
                            daily and gifts for their beloved
                            one
                        </p>
                        <p><span>3555</span> People are viewing right now</p>
                    </div>
                    <p style="color: #626262;">Sale ending in</p>
                    <div class="bar">
                        <div class="value"></div>
                    </div>
                    <p class="timer">08:41</p>
                    <h4>Color</h4>
                    <div class="options">
                        <div class="item" :class="optionIndex==index?'active':''" v-for="(item, index) in  options"
                            :key="index" @click="optionIndex=index">{{item}}
                        </div>
                    </div>
                    <div class="pay">
                        <div class="top">
                            <div class="count">
                                <span @click="count--">➖</span>
                                <input v-model="count"></input>
                                <span @click="count++">➕</span>
                            </div>
                            <div class="block cart">
                                <img src="img/card.svg" width="20">
                                <span>Add to cart</span>
                            </div>
                            <div class="block now">
                                <img src="img/buy.svg" width="20">
                                <span>Buy it now</span>
                            </div>
                        </div>
                        <div class="center">
                            <img src="img/paypal.svg" height="20">
                        </div>
                        <img src="img/safe-checkout.png" width="100%">
                    </div>
                </div>
            </div>
        </div>
        <div class="description">
            <div class="left">
                Description
            </div>
            <div class="right">
                <p><span>The Newly Upgraded Scarf</span></p>
                <p style="margin: 25px 0 5px;"><span>It adopts the principle of infrared heating, rapid heating,
                        three-speed</span></p>
                <p style="margin: 0;"><span>temperature adjustment, not afraid of cold winter.</span></p>
                <img src="img/img1.jpg" width="100%">
                <p style="font-size: 25px;">FEATURES</p>
                <ul>
                    <li>
                        ⭐<span>Intelligent Heating</span>: Heats up in 3 seconds with an efficient graphene carbon fiber
                        heating
                        system. Intelligent heating settings (35°C-45°C-55°C/95°F-113°F-131°F) to suit your needs.
                    </li>
                    <li>
                        ⭐<span>Comfortable Material</span>: Breathable and ultra-light material. Comfortable and soft
                        cotton with
                        decent elasticity.
                    </li>
                </ul>
                <img src="img/img2.jpg" width="100%">
                <ul>
                    <li>
                        ⭐<span>Health Benefits:</span> Graphene heating technology and release of 8-9mm far-infrared
                        rays aid blood
                        circulation and help relax tense neck muscles. The position of the heated pad can be adjusted
                        for targeted therapy.
                    </li>
                    <li>
                        ⭐<span>Human-friendly</span>: The output current is 5V, which is a weak current within
                        the
                        acceptable range
                        of the human body and will not cause harm to the body.
                    </li>
                    <li>
                        ⭐<span>Notes:</span> It is washable (hand wash, machine wash); an external power bank is
                        required. Please be
                        sure to remove the mobile power supply before washing.
                    </li>
                </ul>
                <p style="font-size: 25px;"><span> SPECIFICATION</span></p>
                <ul>
                    <li><span>Material:</span> Cotton</li>
                    <li><span>Current:</span>5V</li>
                    <li><span>Color:</span>red; pink; gray; blue; navy blue; black</li>
                    <li><span>Weight:</span> 110g / 0.24lb</li>
                    <li><span>Size:</span> 80*10cm / 31.49*3.93in</li>
                </ul>
                <p style="font-size: 25px;"><span>PACKAGE INCLUDED</span></p>
                <ul>
                    <li>1 × Upgraded Heating Scarf</li>
                </ul>
                <p>Power Bank not included</p>
            </div>
        </div>
        <div class="footer">
            <div class="left">
                <p><span>Order</span></p>
                <p>Track My Order</p>
                <p>Shipping Policy</p>
                <p style="margin-bottom: 30px;">Return & Refund Policy</p>
                <p><span>How can we help you?</span></p>
                <div class="btn">
                    Contact Us
                </div>
            </div>
            <div class="center">
                <p><span>Resources</span></p>
                <p>About Us</p>
                <p>FAQs</p>
                <p>Payment Methods</p>
                <p>Terms of Service</p>
                <p>Privacy Policy</p>
            </div>
            <div class="right">
                <div class="btn">sigmakin.com</div>
                <div class="email">
                    <img src="img/email.svg" width="20">
                    <span>
                        support@sigmakin.com
                    </span>
                </div>
            </div>
        </div>
        <div class="info">
            <div class="left">
                <p>© 2024 sigmakin.com. All rights reserved.</p>
            </div>
            <div class="right" @click="goTop">
                <p> Go to top⬆</p>
            </div>
        </div>
    </div>
</body>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
    const { createApp, ref, watch } = Vue
    createApp({
        setup() {

            const options = ref([
                'Red', 'Pink', 'Gray', 'Navy Blue', 'Yellow',
                'Brown', 'Beige', 'Black',
                'SET 2(Red+Pink)🔥50% OFF And Extra 10%🔥',
                'SET 2(Gray+Blue)🔥50% OFF And Extra 10%🔥',
                'SET 2(Navy Blue+Yellow)🔥50% OFF And Extra 10%🔥',
                'SET 2(Brown+Beige)🔥50% OFF And Extra 10%🔥',
                'SET 2(Red+Pink+Gray)🔥50% OFF And Extra 10%🔥',
                'SET 2(Blue+Navy Blue+Yellow)🔥50% OFF And Extra 10%🔥',
                'SET 2(Beige+Brown+Gray)🔥50% OFF And Extra 10%🔥'
            ])

            const optionIndex = ref(0)
            const count = ref(1)
            const show = ref(false)

            function frontImg() {
                const productBar = document.querySelector('.product-bar')
                productBar.scrollLeft -= 50;
            }
            function nextImg() {
                const productBar = document.querySelector('.product-bar')
                productBar.scrollLeft += 50;
            }
            function showMeun() {
                const sidebar = document.querySelector('#sidebar')
                sidebar.style.left = '0';
                show.value = true;
            }
            function closeMeun() {
                const sidebar = document.querySelector('#sidebar')
                sidebar.style.left = '-300px';
                show.value = false;
            }
            watch(optionIndex, newVal => {
                const productBar = document.querySelector('.product-bar')
                const image = document.querySelectorAll('.product-image')[newVal]
                productBar.scrollLeft = image.offsetLeft
            })
            function goTop() {
                window.scrollTo({
                    top: 0,
                    behavior: 'smooth' // 平滑滚动
                });
            }
            return {
                options, optionIndex,
                frontImg, nextImg, count,
                showMeun, closeMeun, show, goTop
            }
        }
    }).mount('#app')
</script>

</html>

CSS

css 复制代码
.logo {
  height: 200px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.meun-btn {
  cursor: pointer;
  width: 20px;
  height: 20px;
  position: absolute;
  top: 80px;
  left: 50px;
  background-image: url("img/menu.svg");
  background-size: 100% 100%;
}
#sidebar {
  z-index: 1001;
  margin: 0;
  height: 100%;
  width: 250px;
  position: fixed;
  left: -300px;
  background-color: #1b1b1b;
  color: white;
  transition: 0.3s;
  padding: 20px;
  box-shadow: 2px 0 5px rgba(0, 0, 0, 0.5);
}
#sidebar .content {
  height: 90%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
#sidebar .content ul {
  list-style-type: none;
  padding-left: 20px;
}
#sidebar .content ul li {
  margin: 30px 0;
  cursor: pointer;
}
#sidebar .content ul:nth-child(1) {
  font-size: 20px;
}
#sidebar .content ul:nth-child(2) {
  font-size: 12px;
  color: #878787;
}
#sidebar .close-btn {
  color: white;
  font-size: 30px;
  cursor: pointer;
  width: 15px;
  margin-left: 20px;
  margin-top: 20px;
}
.overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.8);
  z-index: 1000;
}
.content {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  padding-bottom: 50px;
}
.content .left {
  width: 30%;
  min-width: 400px;
  margin-right: 20px;
}
.content .left .img {
  background-size: 100% 100%;
  height: 450px;
  border-radius: 10px;
}
.content .left .img-bar {
  display: flex;
  margin-top: 10px;
}
.content .left .img-bar .front,
.content .left .img-bar .next {
  width: 20px;
  height: 80px;
  display: flex;
  align-items: center;
  cursor: pointer;
}
.content .left .img-bar .product-bar {
  scroll-behavior: smooth;
  margin: 0 10px;
  height: 100px;
  width: 90%;
  overflow-x: hidden;
  white-space: nowrap;
  overflow-y: hidden;
  position: relative;
}
.content .left .img-bar .product-bar .product-image {
  cursor: pointer;
  display: inline-block;
  height: 80px;
  width: 80px;
  margin-right: 10px;
}
.content .left .img-bar .product-bar .product-image img {
  width: 100%;
  height: 100%;
}
.content .right {
  width: 30%;
  min-width: 300px;
}
.content .right .price .old {
  text-decoration: line-through;
  color: #717171;
}
.content .right .price .new {
  color: #008000;
  font-size: 20px;
}
.content .right .text p:nth-child(1) {
  font-size: 20px;
  margin-bottom: 0;
}
.content .right .text p:nth-child(2) {
  font-size: 18px;
  font-style: italic;
  margin: 5px 0;
}
.content .right .text p:nth-child(2) span {
  color: red;
  font-size: 20px;
  font-weight: bold;
}
.content .right .text p:nth-child(3) {
  font-size: 15px;
}
.content .right .text p:nth-child(3) span {
  font-size: 20px;
  font-weight: bold;
}
.content .right .bar {
  border-radius: 10px;
  height: 10px;
  background-color: #efefef;
}
.content .right .bar .value {
  width: 80px;
  border-radius: 10px;
  height: 10px;
  background-color: #cccccc;
}
.content .right .timer {
  color: #df4848;
  font-size: 25px;
}
.content .right h4 {
  margin: 0;
}
.content .right .options {
  display: flex;
  flex-wrap: wrap;
}
.content .right .options .item {
  cursor: pointer;
  margin: 5px;
  line-height: 30px;
  padding: 5px 8px;
  width: max-content;
  border: 1px solid #cccccc;
  border-radius: 5px;
  font-size: 13px;
}
.content .right .options .active {
  background-color: #ec7526;
  color: white;
}
.content .right .pay {
  margin-top: 50px;
}
.content .right .pay .top {
  display: flex;
  flex-wrap: wrap;
}
.content .right .pay .top .count {
  margin: 10px 0;
  border: 1px solid #cccccc;
  width: 90px;
  height: 50px;
  display: flex;
  justify-content: space-around;
  align-items: center;
  background-color: white;
}
.content .right .pay .top .count input {
  text-align: center;
  width: 30px;
  height: 30px;
  border-width: 0;
  font-size: 15px;
}
.content .right .pay .top .count span {
  cursor: pointer;
}
.content .right .pay .top .block {
  margin: 10px 5px;
  cursor: pointer;
  width: 150px;
  height: 50px;
  border-radius: 5px;
  display: flex;
  justify-content: center;
  align-items: center;
  color: white;
}
.content .right .pay .top .block img {
  margin-right: 20px;
}
.content .right .pay .top .cart {
  background-color: black;
}
.content .right .pay .top .now {
  background-color: #ff4343;
}
.content .right .pay .center {
  cursor: pointer;
  border-radius: 5px;
  margin: 10px 0;
  height: 50px;
  background-color: #ffc439;
  display: flex;
  justify-content: center;
  align-items: center;
}
.content .right .pay .center:hover {
  background-color: #f2ba36;
}
.description {
  padding-top: 80px;
  padding-bottom: 50px;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}
.description .left {
  width: 30%;
  font-size: 30px;
  font-weight: bold;
  text-align: center;
}
.description .right {
  width: 40%;
}
.description .right ul {
  padding: 0;
}
.description .right ul li {
  line-height: 30px;
  margin-bottom: 20px;
  font-size: 15px;
}
.description .right span {
  font-weight: bold;
}
.footer {
  margin: 0;
  height: 300px;
  background-color: #242424;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  padding-top: 40px;
}
.footer p {
  color: #929292;
  font-size: 12px;
}
.footer span {
  color: white;
  font-size: 15px;
}
.footer .left {
  width: 20%;
}
.footer .left .btn {
  text-align: center;
  line-height: 40px;
  border-radius: 5px;
  color: white;
  width: 120px;
  height: 40px;
  background-color: #ff4343;
}
.footer .center {
  width: 20%;
}
.footer .right {
  width: 30%;
}
.footer .right .btn {
  cursor: pointer;
  margin: 20px 0px;
  padding-left: 10px;
  width: 300px;
  height: 60px;
  color: white;
  font-size: 30px;
  font-weight: bold;
  line-height: 60px;
}
.footer .right .btn:hover {
  background-color: white;
  color: #485fc7;
}
.footer .right .email {
  display: flex;
  align-items: center;
}
.footer .right .email img {
  margin-right: 20px;
}
.info {
  border-top: 1px solid #333;
  background-color: #242424;
  height: 60px;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
  align-items: center;
}
.info p {
  color: #929292;
  font-size: 12px;
  cursor: pointer;
}
@media screen and (max-width: 730px) {
  .logo {
    padding-left: 10px;
    height: 100px;
    justify-content: left;
  }
  .logo img {
    width: 60px;
  }
  .meun-btn {
    left: auto;
    right: 30px;
    top: 50px;
  }
  .content .left,
  .content .right {
    width: 95%;
  }
  .content .left .pay .top .count,
  .content .right .pay .top .count,
  .content .left .pay .top .block,
  .content .right .pay .top .block {
    width: 100%;
  }
  .description .left {
    display: none;
  }
  .description .right {
    width: 95%;
  }
  .description .right ul {
    padding-left: 20px;
  }
  .footer {
    height: auto;
    padding-bottom: 50px;
    padding-left: 30px;
  }
  .footer .left,
  .footer .center,
  .footer .right {
    width: 95%;
  }
  .info {
    height: 200px;
    flex-direction: column;
  }
}

效果图

相关推荐
@大迁世界6 分钟前
构建 Next.js 应用时的安全保障与风险防范措施
开发语言·前端·javascript·安全·ecmascript
亿坊电商1 小时前
开源且免费的CMS系统有哪几个可以放心用?
开源·cms
IT、木易1 小时前
ES6 新特性,优势和用法?
前端·ecmascript·es6
is今夕1 小时前
postcss.config.js 动态配置基准值
javascript·vue.js·postcss
计算机软件程序设计2 小时前
vue和微信小程序处理markdown格式数据
前端·vue.js·微信小程序
指尖时光.2 小时前
【前端进阶】01 重识HTML,掌握页面基本结构和加载过程
前端·html
前端御书房2 小时前
Pinia 3.0 正式发布:全面拥抱 Vue 3 生态,升级指南与实战教程
前端·javascript·vue.js
NoneCoder2 小时前
JavaScript系列(84)--前端工程化概述
前端·javascript·状态模式
晚安7202 小时前
idea添加web工程
java·前端·intellij-idea