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;
  }
}

效果图

相关推荐
啃火龙果的兔子3 分钟前
前端单元测试覆盖率工具有哪些,分别有什么优缺点
前端·单元测试
小宁爱Python11 分钟前
FastAPI+Sqlite+HTML的登录注册与文件上传系统:完整实现指南
sqlite·html·fastapi
「、皓子~31 分钟前
后台管理系统的诞生 - 利用AI 1天完成整个后台管理系统的微服务后端+前端
前端·人工智能·微服务·小程序·go·ai编程·ai写作
就改了34 分钟前
Ajax——在OA系统提升性能的局部刷新
前端·javascript·ajax
凌冰_36 分钟前
Ajax 入门
前端·javascript·ajax
京东零售技术1 小时前
京东小程序JS API仓颉改造实践
前端
老A技术联盟1 小时前
从小白入门,基于Cursor开发一个前端小程序之Cursor 编程实践与案例分析
前端·小程序
风铃喵游1 小时前
构建引擎: 打造小程序编译器
前端·小程序·架构
说私域1 小时前
基于开源AI智能名片链动2+1模式S2B2C商城小程序的抖音渠道力拓展与多渠道利润增长研究
人工智能·小程序·开源
sunbyte1 小时前
50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ThemeClock(主题时钟)
前端·javascript·css·vue.js·前端框架·tailwindcss