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

效果图

相关推荐
NoneCoder2 小时前
CSS系列(14)--后处理器详解
前端·css
靠谱杨2 小时前
【Linux服务器nginx前端部署详解】ubantu22.04,前端Vue项目dist打包
linux·服务器·前端·vue.js·经验分享·阿里云·腾讯云
猫猫村晨总2 小时前
前端样式练手:阴阳图+时钟的组合
前端·css·css3
远洋录2 小时前
前端单元测试实战:从零开始构建可靠的测试体系
前端·人工智能·react
李明一.2 小时前
探索 Echarts 绘图:数据可视化的奇妙之旅
前端·信息可视化·echarts
下雪了 ~4 小时前
HTTP和HTTPS的区别有哪些?
服务器·前端·笔记·网络协议·计算机网络
Krorainas4 小时前
将PDF流使用 canvas 绘制然后转为图片展示在页面上(二)
前端·javascript·pdf·react
吉吉安5 小时前
使用echarts实现3d柱状图+折线图
前端·javascript·echarts
yanlele5 小时前
企业级 AI Coding 已经来临, 目前其发展可能已经超越想象,对此我的一些思考
前端·后端·openai