利用弹性盒子完成移动端布局(第二次实验作业)

需要实现的效果如下:

下面是首先是这个项目的框架:

然后是html页面的代码:

<!DOCTYPE html>
<html lang="en">

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

<body>
  <div class="container">
    <!-- head部分开始 -->
    <div class="nav1">
      <div class="nav1-1">热点</div>
      <div class="nav1-2">关注</div>
    </div>
    <div class="nav2">
      <ul>
        <li>校园生活</li>
        <li>校园学习</li>
        <li>校园活动</li>
      </ul>
    </div>
    <!-- head部分结束 -->

    <!-- 主体部分开始 -->
    <div class="main">
      <ul>
        <li><img src="images/1.jpg" alt=""><span>秋天来了</span></li>
        <li><img src="images/2.jpg" alt=""><span>南华大学</span></li>
        <li><img src="images/2.jpg" alt=""><span>南华大学</span></li>
        <li><img src="images/2.jpg" alt=""><span>南华大学</span></li>
        <li><img src="images/2.jpg" alt=""><span>南华大学</span></li>
        <li><img src="images/2.jpg" alt=""><span>南华大学</span></li>
        <li><img src="images/2.jpg" alt=""><span>南华大学</span></li>
        <li><img src="images/2.jpg" alt=""><span>南华大学</span></li>
      </ul>
    </div>
    <!-- 主体部分结束 -->

    <!-- 尾部部分开始 -->
    <div class="footer">
      <ul>
        <li><img src="images/卡券.png" alt=""><span>卡券</span></li>
        <li><img src="images/游戏充值.png" alt=""><span>游戏充值</span></li>
        <li><img src="images/去中.png" alt="" style="height: 15vh; width: 15vh;"></li>
        <li><img src="images/转账.png" alt=""><span>转账</span></li>
        <li><img src="images/口碑外卖.png" alt=""><span>口碑外卖</span></li>
      </ul>
    </div>
    <!-- 尾部部分结束 -->
  </div>

  <script>
    const hot = document.querySelector('.nav1-1');
    const attention = document.querySelector('.nav1-2');
    hot.addEventListener('mouseover', () => {
      hot.style.backgroundColor = 'rgb(110, 230, 174)';
      attention.style.backgroundColor = '#1ead6a';
    })
    hot.addEventListener('mouseout', () => {
      hot.style.backgroundColor = '#1ead6a';
      attention.style.backgroundColor = 'rgb(110, 230, 174)';
    })
    attention.addEventListener('mouseover', () => {
      attention.style.backgroundColor = '#1ead6a';
      hot.style.backgroundColor = 'rgb(110, 230, 174)';
    })
    attention.addEventListener('mouseout', () => {
      attention.style.backgroundColor = 'rgb(110, 230, 174)';
      hot.style.backgroundColor = '#1ead6a';
    })

  </script>
</body>

</html>

 然后是CSS代码(标全了注释):

* {
  /* 去除页面中所有元素的内、外边距 */
  padding: 0;
  margin: 0;
}

.container {
  /* 为整个容器添加弹性布局 */
  display: flex;
  /* 确定为竖向布局 */
  flex-direction: column;
  /* 容器高度占满整个视口,即看到的窗口大小 */
  height: 100vh;
  /* 设置整个容器的背景 */
  background-color: #f4f2f2;
}


.nav1 {
  /* 为导航栏添加弹性布局 */
  display: flex;
  /* 设置为横向布局 */
  flex-direction: row;
  /* 设置最上面的绿色导航栏占视口的8份 */
  height: 8vh;
  /* 设置元素在主轴上居中对齐 */
  justify-content: center;
  /* 设置元素在交叉轴上居中对齐 */
  align-items: center;
  /* 设置导航栏的背景颜色 */
  background-color: #4CAF50;
}

.nav1 div {
  /* 设置宽高 */
  width: 15vh;
  height: 5vh;
  /* 保持文字上下左右居中 */
  text-align: center;
  line-height: 5vh;
  /* 设置文字颜色为白色 */
  color: white;
 
}

.nav1-1{
  /* 为热点单独设置圆角 */
   border-radius: 2.5vh 0 0 2.5vh;
  /* 设置背景颜色 */
  /* 默认选择热点模块 */
   background-color: #1ead6a;
  }



.nav1-2{
  /* 为关注单独设置圆角 */
   border-radius: 0 2.5vh 2.5vh 0;
 /* 设置背景颜色 */
  background-color: rgb(110, 230, 174);
  }

  .nav2 {
    /* 设置导航栏2占视口的6份 */
   height: 6vh;
   /* 设置背景颜色 */
   background-color: #f5f5f5;
  }

  .nav2 ul {
  /* 设置为弹性布局 */
    display: flex;
  /* 设置为横向布局 */
   flex-direction: row;
   /* 宽高占满 */
   width: 100%;
   height: 100%;
  }

  .nav2 ul li {
    /* 设置为弹性布局 */
      display: flex;
    /* 去除小圆点的默认样式 */
    list-style: none;
    /* 设置每个li的宽高 */
    height: 6vh;
    width: 33%;       
    /* 设置字体的大小 */
    font-size: large;
    /* 设置元素在交叉轴上居中对齐 */
    align-items: center;
    /* 设置元素在主轴上居中对齐 */
     justify-content: center;
  }

  .main {
    /* 设置主体部分的高度为占整个视口的75份 */
    height: 75vh;
    /* 设置为弹性布局 */
    display: flex;
    /* 设置为纵向布局 */
    flex-direction: column;
    /* 加入垂直滚动条 */
    overflow-y: scroll;
  }

  .main ul{
    /* ul的宽占满整个主体部分 */
    width: 100%;
    /* height: 100%; 不知道为什么这里设置高上下的li就无法贴合在一起 */
    /* 设置为弹性布局 */
    display: flex;
    /* 设置为横向布局 */
    flex-direction: row;
    /* 允许Flex项目换行 */
    flex-wrap: wrap;
  }

  .main ul li{
    /* 设置为弹性布局 */
    display: flex;
    /* 设置为纵向布局 */
    flex-direction: column;
    /* 设置每个li的宽高 */
    width:49%;
    height: 30vh;
    /* 设置边距 */
    margin: 4px;
    /* 设置背景颜色 */
    background-color: white;
    /* 设置边框 */
    border: 1px solid #000;
    /* 边框大小不影响盒子的长和宽 */
    box-sizing: border-box;
    /* 设置字体大小 */
    font-size: 2.5vh;
    /* 设置文字的行高 */
    line-height: 6vh;
  }

   .main ul li span{
     /* 设置文字的左边距 */
     padding-left: 2vh;
   }

  .main ul li img{
    /* 设置图片的宽高 */
    width: 100%;
    height: 80%;
  }

  .footer {
    /* 设置底部高度 */
    height: 11vh;
    /* 设置底部的背景颜色 */
    background-color: rgb(249, 244, 245);
  }

  .footer ul {
    /* 设置ul的宽度 */
   width: 100%;
   /* 设置ul的高度 */
   height: 11vh; 
   /* 设置弹性布局 */
   display: flex;
   /* 设置为横向布局 */
   flex-direction: row;
  }

  .footer ul li {
    /* 设置li的宽高 */
    height: 11vh;
    width: 25%;
    /* 设置弹性布局 */
    display: flex;
    /* 设置为纵向布局 */
    flex-direction: column;
    /* 设置元素在交叉轴上居中对齐 */
    align-items: center;
    /* 设置元素在主轴上居中对齐 */
    justify-content: center;
    /* 取消小圆点的默认样式 */
    list-style: none;
  }

  .footer ul li img {
    /* 设置图片的宽高 */
    width: 8vh;
    height: 8vh;  
  }

  /* 主体的CSS样式已经全部写完,下面开始写媒体查询的代码,使页面的响应式布局更加完善 */
  /* 当页面的宽度小于830px时, <div class="main"> 即主体部分中的每张图片各占一行 */
  @media screen and (max-width: 830px) {
    .main ul li {
      width: 100%;
    }
  }

最终实现的效果如下图:

将页面缩小布局也能正常按比例缩放(采用flex弹性布局):

当页面的宽度小于830px时,将主体部分的每张图片修改为各占一行(这样响应完后会比较流畅与美观)(采用媒体查询实现):

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue+uniapp的高校教务管理小程序系统设计和实现

2. 详细视频演示 文章底部名片&#xff0c;联系我获取更详细的演示视频 3. 论文参考 4. 项目运行截图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 5. 技…

深入Semantic Kernel:插件开发与实践应用(进阶篇)

文章目录 一、引言二、开发Semantic Kernel插件三、实战3.1 时间信息插件3.2 小部件工厂插件3.3 初始化Semantic Kernel实例3.4 四个实战示例3.4.1 模型幻觉3.4.2 给模型提供时间信息3.4.3 AI自动调用函数3.4.4 AI自动调用和使用枚举 四、结论 一、引言 在上一篇入门文章《探索…

集成方案 | 借助 Microsoft Copilot for Sales 与 Docusign,加速销售流程!

加速协议信息提取&#xff0c;随时优化邮件内容~ 在当今信息爆炸的时代&#xff0c;销售人员掌握着丰富的数据资源。他们能够通过 CRM 平台、电子邮件、合同库以及其他多种记录系统&#xff0c;随时检索特定个人或组织的关键信息。这些数据对于销售沟通至关重要。然而&#x…

Halcon Blob分析提取小光斑

文章目录 算子complement 返回一个区域的补集select_region_point 选择包含指定像素的所有区域intensity 计算灰度值的均值和偏差 案例 算子 complement 返回一个区域的补集 complement(Region : RegionComplement : : )Region (输入对象)&#xff1a;这指的是输入的一个或多…

AI金融攻防赛:金融场景凭证篡改检测(DataWhale组队学习)

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。本文主要讲解如何解决 金融场景凭证篡改检测的核心问题&#xff0c;以及解决思路和代码实现过程。希望…

Zookeeper快速入门:部署服务、基本概念与操作

文章目录 一、部署服务1.下载与安装2.查看并修改配置文件3.启动 二、基本概念与操作1.节点类型特性总结使用场景示例查看节点查看节点数据 2.文件系统层次结构3.watcher 一、部署服务 1.下载与安装 下载&#xff1a; 一定要下载编译后的文件&#xff0c;后缀为bin.tar.gz w…

介绍Java

Java简介 Java是一门由Sun公司&#xff08;现被Oracle收购&#xff09;在1995年开发的计算机编程语言&#xff0c;其主力开发人员是James Gosling&#xff0c;被称为Java之父。Java在被命名为“Java”之前&#xff0c;实际上叫做Oak&#xff0c;这个名字源于James Gosling望向…

非线性激活pytorch

**前置知识&#xff1a; 1、 self.sigmoid1Sigmoid() outputself.sigmoid1(input) 2、常见的非线性激活函数&#xff1a; 3、非线性激活的作用&#xff1a; 线性与非线性 线性函数&#xff1a;假设你用直线去描述波浪的形状。无论你怎么改变直线的斜率&#xff0c;结果都是…

用C++编写信息管理系统(歌单信息管理)

C语言是面向过程的编程语言&#xff0c;而C是面向对象的编程语言&#xff0c;在书写代码时风格有所不同&#xff08;也存在很多共性&#xff09;。 程序说明 本次系统程序使用的是C语言进行编写&#xff0c;主要考虑怎么实现面向对象的问题。 因为本次程序属于小型系统程序&…

react中css样式隔离

使用CSS Modules css模块化 1, 创建组件样式文件时以 xxx.module.css命名, 例如 Home.module.css 代替 Home.css 2, 在组件jsx导入样式文件时使用 import styles from ./xxx.module.css 导入 代替 import ./xxx.css 3, 在组件中需要设置样式的标签上添加class值, classNa…

WebGl学习使用attribute变量绘制一个水平移动的点

在WebGL编程中&#xff0c;attribute变量是一种特殊类型的变量&#xff0c;用于从客户端传递数据到顶点着色器。这些数据通常包括顶点的位置、颜色、纹理坐标等&#xff0c;它们是与每个顶点直接相关的信息。attribute变量在顶点着色器中声明&#xff0c;并且对于每个顶点来说都…

Qt-系统线程安全(63)

目录 描述 使用 线程不安全 线程安全 释放锁问题 其他的锁 条件变量和信号量 描述 多线程程序太复杂了 在C/C 和 Linux中&#xff0c;我们为了保证线程安全&#xff0c;简单的方式就是加锁 为此 Qt 也封装了自己的一套锁管理 使用 线程不安全 我们先测验一下线程不安…

【工具】音视频翻译工具基于Whisper+ChatGPT

OpenAI推出的开源语音识别工具Whisper&#xff0c;以其卓越的语音识别能力&#xff0c;在音频和视频文件处理领域大放异彩。与此同时&#xff0c;ChatGPT也在翻译领域崭露头角&#xff0c;其强大的翻译能力备受赞誉。因此&#xff0c;一些字幕制作团队敏锐地捕捉到了这两者的结…

Android中的Activity(案例+代码+效果图)

目录 1.Activity的生命周期 核心生命周期回调 1&#xff09;onCreate() 2&#xff09;onStart() 3&#xff09;onResume() 4&#xff09;onPause() 5&#xff09;onStop() 6&#xff09;onRestart() 7&#xff09;onDestroy() 8&#xff09;生命周期图示 10&#xff09;注意事项…

Golang | Leetcode Golang题解之第468题验证IP地址

题目&#xff1a; 题解&#xff1a; func validIPAddress(queryIP string) string {if sp : strings.Split(queryIP, "."); len(sp) 4 {for _, s : range sp {if len(s) > 1 && s[0] 0 {return "Neither"}if v, err : strconv.Atoi(s); err …

教你把产品图册转为翻页电子书

​在科技飞速发展的今天&#xff0c;产品的宣传方式也在不断创新。为了让产品图册更加吸引眼球&#xff0c;我推出了一款结合动画和音乐的效果惊艳的产品图册。这款产品图册不仅展示了产品的精美外观和独特功能&#xff0c;更通过动态效果和美妙音乐&#xff0c;为观众带来一场…

LabVIEW提高开发效率技巧----点阵图(XY Graph)

在LabVIEW开发中&#xff0c;点阵图&#xff08;XY Graph&#xff09; 是一种强大的工具&#xff0c;尤其适用于需要实时展示大量数据的场景。通过使用点阵图&#xff0c;开发人员能够将实时数据可视化&#xff0c;帮助用户更直观地分析数据变化。 1. 点阵图的优势 点阵图&…

【puppeteer】wvp-puppeteer制作 过程

目录 最后的结论 制作windows&ubuntu的docker 重启桌面上的docker 命令重启 通过 Docker Desktop 图形界面重启 制作centos docker 测试 参考文档 最后的结论 ubuntu && windows 使用 dualvenregistry:5000/wvp-puppeteer:1.0 centos7 使用&#xff1a;…

Word 中脚注和尾注的区别有哪些?如何正确使用它们?

在撰写学术论文、报告或其他需要引用资料的文章时&#xff0c;脚注和尾注是两种常用的标注方法。它们不仅可以为读者提供额外的背景信息&#xff0c;还能帮助整理文章中的引用来源。下面我们就来详细的了解一下什么是脚注和尾注。 脚注 脚注&#xff08;Footnote&#xff09;…

回溯法与迭代法详解:如何从手机数字键盘生成字母组合

在这篇文章中&#xff0c;我们将详细介绍如何基于手机数字键盘的映射&#xff0c;给定一个仅包含数字 2-9 的字符串&#xff0c;输出它能够表示的所有字母组合。这是一个经典的回溯算法问题&#xff0c;适合初学者理解和掌握。 问题描述 给定一个数字字符串&#xff0c;比如 …