十六、flex应用练习做淘宝按钮界面

news2024/11/22 23:45:42

目录:

  1. 目标
  2. 小技巧
  3. 实现
  4. 最终代码

一、目标:我们要做一个手机版本的淘宝网,蓝色框住的按钮这部分。

二、 小技巧:如何在网页上看手机版本的页面

  • 首先在网页上打开淘宝网,然后按F12,进入调试状态;(mac电脑要按出F12 - 长按fn - bar条上就自动显示F1 - F12 - 然后在点击)
  • 点击这个类似pad按钮,就可以切换成手机版本 -》 然后切换下成手机如iphone12 pro或者其他 -》 然后再点击顶部的刷新按钮 -》 接下来页面就会变成手机版的页面。 -》 观察你要做的页面;

三、实现

1.准备工作 - 搭骨架

先后顺序分别是:

  • 最外层容器nav;
  • 两行nav-inner;
  • 每行里面的按钮item;
<!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: 0;
            padding: 0;
        }

        /* 设置外层容器 */
        /* 因为两行div本身就是垂直排列,所以不用把nav设置成弹性容器,所以不用管nav */
        .nav{
             /* 外层容器和屏幕是一样宽的,当然不写也一样 */
            width: 100%;
        }

        /* 设置每一行的容器 */
        /* nav-inner 里面的div元素因为需要横向排列,直接把他设置为弹性容器 */
        .nav-inner{
            display: flex;
        }

    </style>
</head>
<body>
    <!-- 创建一个最外层容器 -->
    <nav class="nav">
        <!-- 第一行行按钮 -->
        <div class="nav-inner">
            <!-- 单个按钮 -->
            <div class="item">
                <a href="#">
                    <img src="img/16/1.png">
                </a>
            </div>

            <div class="item">
                <a href="#">
                    <img src="img/16/2.png">
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/3.png">
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/4.png">
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/5.png">
                </a>
            </div>
            
        </div>


        <!-- 第二行行按钮 -->
        <div class="nav-inner">
             <!-- 单个按钮 -->
             <div class="item">
                <a href="#">
                    <img src="img/16/6.png">
                </a>
            </div>

            <div class="item">
                <a href="#">
                    <img src="img/16/7.png">
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/8.png">
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/9.png">
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/10.png">
                </a>
            </div>
        </div>

    </nav>
    
</body>
</html>

2.优化

缺陷:我们发现即使在外层容器nav,设置了width:100%,右侧依然也有空白。
-这是因为我们设置了nav-inner 为弹性容器后,默认是没有弹性增长系数。 flex-grow 和flex可以去设置。

解决代码:

 /* 设置弹性元素 - 按钮 */
        .item{
            background-color: #bfa;
            /* 设置了这个后,里面元素会随着视口的宽度改变而自动改变,撑满 */
            flex:auto;
        }

3.优化item图片样式

缺陷:目前我们的item图片图标,过大,而且随视口大小的变化,也很大。item与item之间没有间隙。
- 这是因为我们设置了flex:auto; 会弹性增长来占空白区域,item对应被拉大。

解决代码:(步骤是按照1,2,3,4来操作的)

  /* 设置每一行的容器 */
        .nav-inner{
            /* 设置为弹性容器 */
            display: flex;
            /* 4. 设置主轴上的空白分布 */
            justify-content: space-around;
  
        }
        /* 设置弹性元素 - 按钮 */
        .item{
            background-color: #bfa;
            /*3. 一定要注释这句 */
            /* flex:auto; */

            /*2. 固定下item的宽度比例,让用户拖动改变视口时,图标大小都差不多符合视觉
            */
             /*这个值越小,item与item之间间隙空间越大
            */
            width:18%;
        }

        /* 防止图片撑大 */
        .item img{
            /* 1. 设置图片的宽度和父元素的宽度一样,所以设置width:100%  */
            width:100%;
        }

- item把背景颜色也去掉,最终的代码效果:

	  .nav-inner{
            display: flex;
            justify-content: space-around;
        }
        .item{
            width:18%;
        }
        .item img{
            width:100%;
        }

4. 图标下的添加文字span

<body>
    <!-- 创建一个最外层容器 -->
    <nav class="nav">
        <!-- 第一行行按钮 -->
        <div class="nav-inner">
            <!-- 单个按钮 -->
            <div class="item">
                <a href="#">
                    <img src="img/16/1.png">
                    <span>天猫</span>
                </a>
            </div>

            <div class="item">
                <a href="#">
                    <img src="img/16/2.png">
                    <span>聚划算</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/3.png">
                    <span>天猫国际</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/4.png">
                    <span>外卖</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/5.png">
                    <span>天猫超市</span>
                </a>
            </div>
            
        </div>


        <!-- 第二行行按钮 -->
        <div class="nav-inner">
             <!-- 单个按钮 -->
             <div class="item">
                <a href="#">
                    <img src="img/16/6.png">
                    <span>充值中心</span>
                </a>
            </div>

            <div class="item">
                <a href="#">
                    <img src="img/16/7.png">
                    <span>飞猪旅行</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/8.png">
                    <span>领金币</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/9.png">
                    <span>拍卖</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/10.png">
                    <span>分类</span>
                </a>
            </div>
        </div>

    </nav>
    
</body>

5.调整字的样式 - 至此结束

  • 文字样式
  /* 设置a里面span文字的样式 */
        .item a{
            color:#333;
            font-size: 16px;
            text-decoration: none;
        }

  • 设置span文字的居中效果。
        .item{
            width:18%;
            /* span文字的居中要在item这个父类设置,否则无效 */
            text-align: center;
        }

四、最终代码

总结:

  • 通过设置弹性容器display:flex ,可以做到用户拖动改变视口,里面的图标大小自适应。
  • 对于弹性容器出现的空白,我们通过设置item宽度width:18%; 和 分配nav-inner 里面的空白主轴左右环绕 justify-content: space-around; 将多的空白,作为我们item与item之间的间隙。
  • 这样做的好处,可以控制item的大小不过于大,同时自适应。
<style>
        *{
            margin: 0;
            padding: 0;
        }

        .nav{
            width: 100%;
        }
        .nav-inner{
            display: flex;
            justify-content: space-around;
            
        }
        .item{
            width:18%;
            text-align: center;
        }
        .item img{
            width:100%;
        }
        .item a{
            color:#333;
            font-size: 16px;
            text-decoration: none;
        }

    </style>
<body>
    <!-- 创建一个最外层容器 -->
    <nav class="nav">
        <!-- 第一行行按钮 -->
        <div class="nav-inner">
            <!-- 单个按钮 -->
            <div class="item">
                <a href="#">
                    <img src="img/16/1.png">
                    <span>天猫</span>
                </a>
            </div>

            <div class="item">
                <a href="#">
                    <img src="img/16/2.png">
                    <span>聚划算</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/3.png">
                    <span>天猫国际</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/4.png">
                    <span>外卖</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/5.png">
                    <span>天猫超市</span>
                </a>
            </div>
            
        </div>


        <!-- 第二行行按钮 -->
        <div class="nav-inner">
             <!-- 单个按钮 -->
             <div class="item">
                <a href="#">
                    <img src="img/16/6.png">
                    <span>充值中心</span>
                </a>
            </div>

            <div class="item">
                <a href="#">
                    <img src="img/16/7.png">
                    <span>飞猪旅行</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/8.png">
                    <span>领金币</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/9.png">
                    <span>拍卖</span>
                </a>
            </div>
            <div class="item">
                <a href="#">
                    <img src="img/16/10.png">
                    <span>分类</span>
                </a>
            </div>
        </div>

    </nav>
    
</body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/749812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(一):为什么要关注损耗?

一个具有极快上升沿的信号输入到真实传输线中&#xff0c;在从传输线输出的时候上升时间会很长。例如&#xff0c;一个上升时间为50ps的信号&#xff0c;在经过一段36inch长&#xff0c;50Ohm传输线后&#xff0c;上升时间增加到1ns。上升时间的退化是由于传输线的损耗&#xf…

C#使用跨平台的PdfSharpCore开源库生成PDF文件

一、需求说明 在进行项目开发中,需要将C#程序的一些文本内容导出为PDF文件(能够根据文本自动分行分页),并且要求这个生成PDF文件的程序是可跨平台的;实现类似效果: 二、需求分析 ①将程序的文本内容导出为PDF文件; ②能够将文本内容自动分行分页【且可添加页眉、页脚、…

记录一次nginx日志偶现502报错排查

背景 之前的业务链路 负载均衡–>nginx–>cvm&#xff08;业务后端node&#xff09; 上云后链路 负载均衡–>nginx–>pod&#xff08;业务后端node&#xff09; 上云后nginx日志隔几个小时就出现一波502&#xff0c;查看nginx的日志有两个特征&#xff0c;就是re…

C# Linq 详解二

目录 概述 七、OrderBy 八、OrderByDescending 九、Skip 十、Take 十一、Any 十二、All 概述 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串&#xff0c;没有编译时类型检查或 IntelliSense 支持。 此外&a…

matlab中画有重影的机器人运动过程【给另一个机器人设置透明度】

1、前言如题 2、参考连接如下 How to plot two moving robot in the same figure and change one of them transparency&#xff1f; - MATLAB Answers - MATLAB Central (mathworks.cn)3、代码&#xff1a;【找到figure中对应对象并设置属性】 % Create two instances of a…

【OJ比赛日历】快周末了,不来一场比赛吗? #07.15-07.21 #7场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-07-15&#xff08;周六&#xff09; #3场比赛2023-07-16…

【多线程初阶】Thread类常见方法以及线程的状态

多线程初阶系列目录 持续更新中 1.第一次认识线程 2.Thread类常见方法以及线程的状态 … 文章目录 多线程初阶系列目录前言1. Thread 类及常见方法1.1 常见构造方法1.2 常见属性1.3 重要方法1.3.1 启动一个线程 ---- start()1.3.2 中断一个线程 ---- interrupt()1.3.3 等待一…

有PMP有没有必要换cspm?未来的发展前景如何?

最近 CSPM 证书很热门&#xff0c;CSPM 相关问题大家都很关心&#xff0c;今天本橘座就给大家全面解答一下 CSPM到底是何方神圣&#xff1f; 文章主要是解答下面几个常见问题&#xff0c;其他问题可以留言或者私信咨询我哦~ 一、什么是 CSPM证书&#xff1f;跟PMP是什么关系&a…

启动、关闭nacos

下载 进入官网 http://nacos.io/zh-cn/ 页面打开后&#xff0c;点击【前往Github】 进入Github页面&#xff0c;往下拖动&#xff0c;找到 latest stable release 选择当时最新的版本下载即可&#xff0c;这里选择.zip的文件下载 安装 Nacos 是免安装的&#xff0c;我们下…

备战秋招008(20230713)

文章目录 前言一、今天学习了什么&#xff1f;二、关于问题的答案1.集合2.JUC02、底层原理03、内存泄漏 总结 前言 提示&#xff1a;这里为每天自己的学习内容心情总结&#xff1b; Learn By Doing&#xff0c;Now or Never&#xff0c;Writing is organized thinking. 目前…

python - leetcode - 64. 最小路径和【经典题解 - 矩阵数组动态规划】

一. 题目&#xff1a;64. 最小路径和 描述&#xff1a; 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#…

【SpringBoot3】--02.Web开发

文章目录 SpringBoot3-Web开发0.WebMvcAutoConfiguration原理1.生效条件2.效果3.WebMvcConfigurer接口4. 静态资源规则源码5. EnableWebMvcConfiguration 源码6. 为什么容器中放一个WebMvcConfigurer就能配置底层行为7. WebMvcConfigurationSupport 1.Web场景1.1自动配置1.2默认…

51单片机-串口通信(串口向电脑发送信息电脑通过串口控制LED)

文章目录 前言一、串行通信口的功能以及串行通信口的结构及原理1.1 串行通信口的功能1.2 51单片机串口的结构 二、串行通信口的控制寄存器2.1 串行控制寄存器SCON2.2 电源控制寄存器PCON2.3 配置寄存器配置SCON寄存器配置PCON寄存器配置中断 2.4 实验单片机向pc发送数据PC向单片…

文心一言 VS 讯飞星火 VS chatgpt (58)-- 算法导论6.4 2题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;58&#xff09;-- 算法导论6.4 2题 二、试分析在使用下列循环不变量时&#xff0c;HEAPSORT 的正确性&#xff1a;在算法的第 2~5行 for 循环每次迭代开始时&#xff0c;子数组 A[1…i]是一个包含了数组A[1…n]中第i小元素的最大…

[疑难杂症2023-005]dcmtk-movescu访问dcm4chee模拟PACS Server报错问题解析

本文由Markdown语法编辑器编辑完成。 1. 背景 由于要在医院上线一个服务&#xff0c;用来定时从医院的PACS Server上面拉取dicom图像并进行分发。因此&#xff0c;需要首先在公司的内网环境上进行开发&#xff0c;测试和验证。 目前比较流行和开源的PACS Server模拟是基于dc…

python 面向对象编程(2)

文章目录 前言封装多态类属性和实例属性定义以及访问类属性修改类属性实例属性 类方法静态方法 前言 前面我们介绍了 python 类和对象以及继承、私有权限&#xff0c;那么今天我们将来介绍 python面向对象 剩下的两大特性封装、多态&#xff0c;以及如何访问、修改类属性、类方…

机器学习李宏毅学习笔记37

文章目录 前言一、ChatGPT做的事情二、ChatGPT基础介绍三、ChatGPT带来的研究问题总结 前言 ChatGPT简单原理介绍 一、ChatGPT做的事情 Chatgpt以句子为输入&#xff0c;输出这个句子后面接的词汇的概率分布&#xff0c;给每一个可能的符号一个概率&#xff0c;根据这个分布进…

【雕爷学编程】Arduino动手做(160)---HLK-V20离线语音模块2

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

RabbitMQ知识掌握 【进阶篇】

一、如何保证消息的可靠性 &#x1f349; 1.保证消息的可靠性投递 &#x1f95d; 在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c;导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0…

微信小程序活动抽奖简单实现,包教包会

问题&#xff1a; 针对用户使用活动抽奖&#xff0c;获得抽奖得到商品的成就以及满足感&#xff0c;那么我们应该怎么去实现小程序去转盘抽奖活动呢 例如&#xff1a;项目需要抽奖实现相应的奖品奖励 实现方法 实现的效果如下&#xff1a; 实现的主要代码&#xff1a; Page…