代码编织梦想

效果

 主要功能:

左侧滚动条

 购物车加减功能

麦当劳购物车

分析结构

本次任务重点是非轮播图部分;轮播图估计会单独做一期js原生版本讲解

购物车部分

左上角细节圆角

css圆角_hello_xujj的博客-CSDN博客_css圆角^v51^control,201^v3^control&utm_term=%E5%9C%86%E8%A7%92&spm=1018.2226.3001.4187

11

分析结构

 不多说,上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: auto;
            padding: auto;
            list-style: none;
            /*对应消除li标签固定样式 */
            box-sizing: border-box;
            /* 正常情况下为了方便我们都用怪异盒子;
            因为标准盒子要计算padding和border;
            不方便我们接到设计稿后的开发(你要单独量取这些东西,是不准确的,误差最后可能导致很大的布局变动)
             */
        } 
        html{
            font-size:62.5% ;
            /* 一般的,各大主流浏览器的font-size默认值为 16px,此时 1rem = 16px(所以 12px = 0.75rem);

把 html 设置成 font-size: 62.5%,此时 1rem = 16px*62.5% = 10px(所以 12px = 1.2rem);(1:10的比例更好换算)

html{
  font-size: 62.5%;  
}

注:rem 是 css3 中新增加的一个单位属性,是相对长度单位。相对于根元素(即html元素) font-size计算值的倍数
 */
        }
        main{
            height: 100vh;
            padding-bottom: 60px;
            display: flex;
        }
        main aside{
            width:100px;
            height: 100% ;
             /* 滚动 */
             overflow: scroll;
        }
        
        main aside .item{
            /* 改回正常盒模型 */
            /* 想想为什么这里改回正常盒模型了 */
            /* 因为不需要弹性即可达成效果... */
            /* bug 空格 */
            
            box-sizing: content-box;
            font-size: 1.2rem;
            padding: 2rem 0;
            /* 上下有间距,左右没有 */
            text-align: center;
           background-color: #ffffff;
           
             
        }
        main  .info{
            /* bug */
            width: 0;
            height: 100%;
            flex-grow: 1;
            /* 剩余的空间占满 */
            /* 仅仅对弹性盒子有用 */
            /* 所以这里上面的思考,可能对应这里 */
           
        }
        main .info li{
            height: 120px;
            display: flex;
        }
        main .info li img{
            /* margin-left: 0; */
            width: 75px;
            height: 75px;
            /* background-image: url(./图片2/Snipaste_2022-09-19_18-22-04.png); */
            /* 原因是下面的div里image里的url空着忘记加了 */
            /* float: left; */
            margin: 15px;
            margin-right: 15px;
        }

        main .info li div {
            width: 0;

            height: 95px;
           flex-grow: 1;
           height: 95px;
            margin: 5px;
        
            /* bug */
            /* background-image: url(./图片2//Snipaste_2022-09-19_18-22-04.png); */
        }
        /* 图片右边的4列文字 */
        main .info li div p:nth-of-type(1){
            font-size: 1.6rem;
            line-height: 20px;
        }
        main .info li div p:nth-of-type(2){
            font-size: 1.4rem;
            line-height: 20px;
        }
        main .info li div p:nth-of-type(3){
            font-size: 1.4rem;
            line-height: 20px;
        }
        main .info li div p:nth-of-type(4) .price{
            font-size: 1.8rem;
            line-height: 25px;
            color: #ff544b;
            float: left;
        }
        main .info li div p:nth-of-type(4) .add{
          float: right;
          width: 20px;
          height: 20px;
          line-height: 20px;
          text-align: center;
          background-color: #fdbd4e;
        }
        main .info li div p:nth-of-type(4) .num{
            float: right;
          width: 20px;
          height: 20px;
          line-height: 20px;
          text-align: center;
            
        }
        main .info li div p:nth-of-type(4) .sub{
          float: right;
          width: 20px;
          height: 20px;
          line-height: 20px;
          text-align: center;
          /* 浅灰色 */
          border:1px solid lightgray;
          border-radius: 50%;
          font-size: large;

            
        }

    
        /* 底部导航栏 */

        nav{
            width: 100%;
            height: 60px;
            background-color: #39393a;
            position: fixed;
            /* 固定定位 */
            bottom: 0%;
        }
        nav img{
            float: left;
            width: 50px;
            margin-left: 20px;
            /* 突出 */
            margin-top: -30px;
        }
        nav .all_money{
            font-size: 2.4rem;
            line-height: 60px;
            float: left ;
            margin-left:20px ;
            color: white;

        }
        nav div{
            width: 80px;
            height: 60px;
            line-height: 60px;
            background-color: #fdbd4e;
            float: right;
            font-size: 1.2rem;
            text-align: center; 
        }
    </style>
</head>
<body>
    <div class="container">
        <main>
            <!-- 侧边栏 -->
            <!-- https://blog.csdn.net/weixin_45587319/article/details/105492156?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166358802316800192278013%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166358802316800192278013&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-105492156-null-null.142^v47^pc_rank_34_ecpm25,201^v3^add_ask&utm_term=aside标签&spm=1018.2226.3001.4187 -->
           <!-- 关于其样式的改变,建议用element-ui
            https://blog.csdn.net/lijiabin102/article/details/109718609?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166359185516781432994979%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166359185516781432994979&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~pc_rank_34-2-109718609-null-null.142^v47^pc_rank_34_ecpm25,201^v3^add_ask&utm_term=aside样式&spm=1018.2226.3001.4187 -->
            <aside>
               <!-- div.item{item$}*10 -->
                <div class="item">item1</div>
                <div class="item">item2</div>
                <div class="item">item3</div>
                <div class="item">item4</div>
                <div class="item">item5</div>
                <div class="item">item6</div>
                <div class="item">item7</div>
                <div class="item">item8</div>
                <div class="item">item9</div>
                <div class="item">item10</div>
            </aside>
            <ul class="info">
                <li>
                    <img src="./image/hanbao.png" alt="">
                    <div>
                        <p>汉堡</p>
                        <p>巴拉巴拉</p>
                        <p>多少钱呢</p>
                        <p>
                            <!-- 当我们写了price的变量后,实际起作用的是price里的number -->
                            <span class="price" price="22">¥22起</span>
                            <span class="add">+</span>
                            <span class="num">0</span>
                            <span class="sub">-</span>
                        </p>
                    </div>
                </li>
                <li>
                    <img src="./image/hanbao.png" alt="">
                    <div>
                        <p>汉堡</p>
                        <p>巴拉巴拉</p>
                        <p>多少钱呢</p>
                        <p>
                            <span class="price" price="24">¥24起</span>
                            <span class="add">+</span>
                            <span class="num">0</span>
                            <span class="sub">-</span>
                        </p>
                    </div>
                </li>
                <li>
                    <img src="./image/hanbao.png" alt="">
                    <div>
                        <p>汉堡</p>
                        <p>巴拉巴拉</p>
                        <p>多少钱呢</p>
                        <p>
                            <span class="price" price="20">¥20起</span>
                            <span class="add">+</span>
                            <span class="num">0</span>
                            <span class="sub">-</span>
                        </p>
                    </div>
                </li>
            </ul>
        </main>
        <nav>
            <!-- 弄张图片来 -->
            <img src="./image/user.png" alt="">
            <p class="all_money">¥0</p>
            <div>去结算</div>
        </nav>
    </div>
</body>
<script>
    let pAllMony=document.querySelector(".all_money")
    let addButs=document.getElementsByClassName("add")
    let subButs=document.getElementsByClassName("sub")
    let money=0;//总价钱
    
    for(let i=0;i<addButs.length;i++)
    {
        addButs[i].onclick=function(){
            // 1.修改数量
            // HTML DOM element.nextElementSibling属性; 返回指定元素之后的下一个兄弟元素
// 使用nextElementSibling属性返回指定元素之后的下一个兄弟元素,(即:相同节点树层中的下一个元素节点)。

// nextSibling属性与nextElementSibling属性的差别:

// nextSibling属性返回元素节点之后的兄弟节点(包括文本节点、注释节点);
// nextElementSibling属性只返回元素节点之后的兄弟元素节点(不包括文本节点、注释节点);
// nextElementSibling属性为只读属性。

            let n=this.nextElementSibling.innerHTML/1
            // /1是为了隐式转换为number型变量
            this.nextElementSibling.innerHTML=(n+1);
            // 2.修改总价
            // 由于我们在if之后,给span添加了price属性,在下面我们要进行..获取
            let thisPrice=this.previousElementSibling.getAttribute("price")/1
            // 隐式转换真是无处不在
            money +=thisPrice;
            pAllMony.innerHTML="¥"+money;
           
        }
        subButs[i].onclick=function(){
            // 1.修改数量
            let n=this.previousElementSibling.innerHTML/1 
          
            if(n<=0){
                return;
            }
            //思考下这里的if,
            // 这里后来改成上一个标签,一开始写成下一个标签(复制的上面)
            this.previousElementSibling.innerHTML=(n-1);
            //2.修改总价钱
            // 这里和加不同的是,我们要获取层级变多,主要还是对this.previousElementSibling的理解,
            // 在这里大体是上一个标签
            let thisPrice=this.previousElementSibling
            .previousElementSibling
            .previousElementSibling
            .getAttribute("price")/1;
            money -=thisPrice;
            pAllMony.innerHTML="¥"+money;

        }
    }

</script>
</html>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ceike/article/details/127156048

麦当劳重金收购一大数据创业公司,持续加码数字化转型-爱代码爱编程

提起麦当劳,大家首先想到的是什么?可能更多是“巨无霸”汉堡,而非大数据吧?但这一切将很快发生变化:快餐业巨头正在以一种规模可观的方式热情拥抱机器学习技术。\n 麦当劳公司即将公布收购Dynamic Yield的交易协议内容。这是一家从事个性化推荐的创业公司,专门为零售商提供算法驱动型“决策逻辑”技术。具体来讲,当用户将商品添加到在线购物车中时,这项技术能够

Java 代码简单模拟商城购物车-爱代码爱编程

纯Java代码模拟简单购物车功能 1.Product类 import java.util.Objects; public class Product implements Comparable{ private Integer id; private String name; private double price;

web前端入门到实战:仿美团详情页与购物车源码-详情页-爱代码爱编程

项目图 首先是menu.html <!DOCTYPE html> <html> <head> <title>深圳麦当劳前海二餐厅</title> <meta charset="utf-8"> <meta name="viewport" conte

点餐推荐系统_麦当劳智慧餐厅的微信小程序终究将取代人工点餐和自助点餐机...-爱代码爱编程

R e t n e w s | 第 384 期 “自助点餐机是一种过渡形态的产品,微信小程序将取代它成为麦当劳未来智慧餐厅的流量入口和自主点餐主平台。通过微信小程序的在线平台+庞大的线下门店,完成到家+到店业务的融合发展,麦当劳将完成新零售餐厅改造。 文|卜甲 编辑|小荼 微信公众号ID|Retnews 麦当劳北京蓝色港湾智慧餐厅是我经常去的

点餐小程序购物车效果实现-爱代码爱编程

微信小程序点餐系统我们会用到购物车功能,添加菜品到购物车,以及点击数量加减,那么这种点餐小程序购物车效果要如何实现,下面为大家介绍。 自己的第一个点餐小程序,主要包括左右菜单联动、点击数量加减、菜单和购物车数量可以同步加减、购物车动画等,纯前端实现 代码块 主要代码块: // 点击左侧分类切换右侧菜品 changeRightMenu: func

配置 tidb dashboard 使用 sso 登录_添香小铺的博客-爱代码爱编程

TiDB Dashboard 支持基于 OIDC 协议的单点登录 (Single Sign-On)。配置 TiDB Dashboard 启用 SSO 登录后,你可以通过配置的 SSO 服务进行登录鉴权,无需输入 SQL 用户名和密码即可登录到 TiDB Dashboard。 配置 OIDC SSO 启用 SSO 登录 TiDB Dashboard。

第1次任务:购物车程序的面向对象设计_不吃黄瓜的博客-爱代码爱编程

小组成员及分工: 成员任务陈炎彬面向对象设计、功能设计、博客制作徐国城前期调查、编码规范 1.前期调查与功能设计 浏览商品,需要一个商品的类,Product    把商品加入购物车,需要一个购物车类,ShoppingCar 用户进入购物车时,能够看到自己想要购买的商品,商品的数量,商品的单价,商品实际价格,以及购物

每日一学—javascript数字_黛琳ghz的博客-爱代码爱编程

接上文 每日一学—JavaScript Number对象 🧷补充: 关于JavaScript数字 JavaScript只有一种类型的数字。可以使用或不使用小数来编写数字。JavaScript数字始终是64位浮点数 与许多其他编程语言不同,JavaScript没有定义不同类型的数字,如整数,短整数,长整数,浮点数等。JavaScript编号

【vue-router】vue路由从创建到使用_叶子yes的博客-爱代码爱编程

目录 一、路由从创建到使用 1、在html文件中使用路由 第一步:使用CDN引入vue-router插件 第二步:定义组件 第三步:创建路由对象数组 第四步:创建路由器实例对象 第五步:将路由器对象注入到vue实例中 第六步:使用路由 2、vue-cli中使用路由  安装vue-cli 创建一个项目 路由的使用 一、路由从创

css容器查询终于来了_@大迁世界的博客-爱代码爱编程

CSS容器查询终于来了! 它们目前在谷歌浏览器(105)中得到了支持,很快就会在Safari 16中得到支持。这对前端来说容器查询与媒体查询一样重要。 在这节课中,我们介绍一下容器查询是如何工作的,如何使用它们,以及语法是

文章本天成|跟我一起来一场简洁易懂的servlet的过滤器filter的学习吧_北溟南风起的博客-爱代码爱编程

filter的前身今生 0、fiter是什么1、filter有啥用2、filter在哪里3、filter做了啥4、filter代码实现4.1 依赖包4.2 代码4.2.1 MyFirstfilter.java4.2.

前端之html篇(二)——html标签详解_今晚务必早点睡的博客-爱代码爱编程

1.开发工具 1.1VSCode的使用 1.双击打开软件 2.新建文件(Ctrl + N) 3.保存(Ctrl + S),注意移动要保存的.html文件 4.Ctrl + 加号键, Ctrl - 建号键 可以放

springboot 开发 web flux_tonysong111073的博客-爱代码爱编程

一、什么是响应式编程   1.1 什么是WebFlux         WebFlux是从Spring Framework5.0以后开始引入的响应式web编程框架。与传统的Spring mvc不同WebFlux不需要Servlet API,在完全异步且无阻塞的通过Reactor项目实现Reactive Streams 规范。        WebFl

vite + vue3 —— vue地图大屏项目_vue大屏展示项目实例-爱代码爱编程

​回顾  前期  ​        前端利器 —— 提升《500倍开发效率》 传一张设计稿,点击一建生成项目 好牛_0.活在风浪里的博客-CSDN博客如果非要说它有什么缺点,那么我觉得就是它会,让你cv大法都没处使!!!比如:公司让你写一个小程序、或h5web页面、UI给了你30张UI图,说让你自己切图,你当时就准备拍案而起,拳棒相加,但

springboot购物车功能开发步骤与范例_基于springboot框架的购物车-爱代码爱编程

一、需求分析 (1)添加购物车(子功能) 在进行加入购物车功能时,先到数据库查询是否有同一商品存在,如有,则需要更改数量即可,如无,则需要添加到购物车当中。 (2)展示购物车的商品列表(子功能) 用户在登录的情况下,可以看到购物车的商品列表。 (3)购物车页面商品数量的增加和减少(子功能) 在查询到用户的购物车商品后,能通过控件来实现商品的增加

【html】前端网页开发工具vscode中doctype和lang以及字符集的作用_doctype charset uft-爱代码爱编程

 😊博主页面:鱿年年的学习之路 👉博主推荐专栏:《前端基础学习》👈 ​💓博主格言:追风赶月莫停留,平芜尽处是春山❤️   目录 前言 Vscode工具生成骨架标签新增代码 一、<!DOCTYPE>标签 1.文档类型声明标签 二、lang语言种类 三、Charset字符集 四、总结 前言 下载安装并解析好前端