蓝桥杯前端Web赛道-自适应页面

蓝桥杯前端Web赛道-自适应页面

题目链接:1.自适应页面 - 蓝桥云课 (lanqiao.cn)

先看题目要求:
在这里插入图片描述

img

简单的来说就是需要完成上面规定的布局和要求当800px及以下的时候要显示移动端布局来完成下面gif的效果,那么我们先一步一步来

首先想到的就是使用媒体查询来完成当800px的时候改变页面的布局

媒体查询通俗易懂的来说就是可以针对不同的屏幕尺寸设置不同的样式,非常符合当前题目的要求。它是css3出现的新语法,以下链接可以学习它的用法

@media - CSS:层叠样式表 | MDN (mozilla.org)

确定了大概的方向之后,我们再来观察这个页面需要我们做什么事情,先通过

在这里插入图片描述

控制台的这个地方帮助我们调到800px的大小

在这里插入图片描述

通过观察和对比可以发现

  • 需要将导航栏从横向排列变成了竖向排列
  • 以及下面的文字和图片应该从横向排列变成竖向排列

容易想到使用flex布局来完成要求,这样能够快速并且不添加冗余的代码来完成要求

那么我们先改变导航栏和下面内容的排布

值得注意的是第44行左右有媒体查询的语法,即使不记得也可以复制一份

@media (max-width: 800px) {
  .collapse,
  .row {
    display: flex;
    flex-direction: column;
  }
}

以上代码的效果如下

在这里插入图片描述

虽然布局大体相同,问题在于题目要求点击了一个三横线的按钮然后才会展开这个菜单,那么我们可以利用display:none先隐藏这个导航栏,然后通过这个导航栏再控制菜单出现即可。

请注意题目中有提到过

在这里插入图片描述

打开控制台找到该类名之后可以发现它被隐藏了

在这里插入图片描述
在这里插入图片描述

由于我们只需要那三根横线的图标,所以只把一个打开即可,记住要在媒体查询的括号里面书写以下代码

 label.menu-btn {
    display: block;
    height: 54px;
  }

在这里插入图片描述

此时出现了我们想要的图标,根据题目的要求将它的高度设置为54px,题目并没有要求按钮显示的位置所以可以不用管它。然后我们再隐藏下面的菜单

修改刚刚的代码,于是现在的代码就变成

@media (max-width: 800px) {
  .collapse {
    display: none;
  }
  .row {
    display: flex;
    flex-direction: column;
  }
  label.menu-btn {
    display: block;
    height: 54px;
  }
}

这个时候我们通过观察页面可以发现,紧邻着按钮的下面有个单选框,当我们在控制台点击按钮的时候,会发现单选框也会被选上,所以通过这个特性我们可以使用在css中使用单选框checked这个动作来控制ul,现在问题在于该怎么使用选择器

在这里插入图片描述

以上动画是演示点击按钮可以控制单选框的选中

通过观察dom结构我们可以发现input和我们需要控制的菜单的dom是兄弟关系,有两个选择器可以让我们选择,一个是+一个是~

在这里插入图片描述

那么该选择哪个呢,先看这两个选择器的定义

“+” 相邻兄弟选择器
A+B{} 这个+是选择相邻兄弟,称作“相邻兄弟选择器”,如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器,(兄弟的意思就是相邻,可以不是同一种元素)

“~” 兄弟选择器
A~B选择器 A之后出现的所有B。
两种元素必须拥有相同的父元素,但是 B不必直接紧随A。

由于我们需要选择ul这一整个结构,所以我们选择~选择器,其实也可以排除法+不行就用~,忘记定义也可以使用。

于是代码更新为:

@media (max-width: 800px) {
  .collapse {
    display: none;
  }
  .row {
    display: flex;
    flex-direction: column;
  }
  label.menu-btn {
    display: block;
    height: 54px;
  }
  input.menu-btn:checked~ul {
    display: flex;
    flex-direction: column;/*仅仅出现还不够,必须得让菜单一整个按照竖向排列*/
  }
}

在这里插入图片描述

现在我们完成了这个功能。接下来还有两个问题需要去解决

  • 菜单是浮在内容之上的
  • 二级菜单是竖向排列的

浮在内容之上,简而言之就是需要让它脱离标准流,也就是使用定位和浮动来做,不使用浮动的原因是浮动需要标明是左浮动还是右浮动,这里我们的菜单不需要。

完成以上两个要求的代码如下

 .collapse {
   display: none;
   position: absolute;
    background-color: inherit;/*定位会让背景颜色消失,于是直接继承父亲的颜色*/
    width: 100%;/*宽度需要占满整个屏幕*/
  }
   .dropdown:hover ul {
    display: flex;
    flex-direction: column;
  }

第一组是完成菜单浮动的功能,第二组是完成二级菜单竖向排列的功能,之所以不用子绝父相是因为

原先的代码就已经给我们写好了相对定位,所以我们不需要再写

在这里插入图片描述

接下来就该完成整个页面的布局要求了

在这里插入图片描述

仔细点用控制台观察计算应该隔开多少距离就行,下面直接给出完整代码

@media (max-width: 800px) {
  label.menu-btn {
    display: block;
    height: 54px;
  }
  .collapse {
   display: none;
   position: absolute;
    background-color: inherit;
    width: 100%;
  }
  .row {
    display: flex;
    flex-direction: column;
  }

  input.menu-btn:checked~ul {
    display: flex;
    flex-direction: column;
  }
  .dropdown:hover ul {
    display: flex;
    flex-direction: column;
  }
  .menu {
    margin-bottom: 25px;
  }
  #tutorials .row .box {
    margin-bottom: 15px;
    margin-top: 20px;
  }
  #tutorials .row img {
    margin: 0;
  }
}

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

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

相关文章

逻辑漏洞(pikachu)

#水平,垂直越权,未授权访问 通过个更换某个id之类的身份标识,从而使A账号获取(修改、删除)B账号数据 使用低权限身份的账号,发送高权限账号才能有的请求,获得其高权限操作 通过删除请求中的认…

SpringCloud微服务技术栈-什么是Docker?怎么安装Docker?

初识Docker以及常见技术及其概念概述 1、项目部署存在的问题 大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题: 依赖关系复杂,容易出现兼容性问题 开发、测试、生产环境有差异 Docker如何解决大型项目依赖关系复杂&#xff0…

面试高频率问答题目

索引: 主键索引:表的id (唯一 且 不能为空) 唯一索引:表User 假设有account 字段 ,用户名不重复 (唯一 可以为空) 复合索引:where() 的条件 用户名,密码 …

判断点是否在多边形内

std::vector<cv::Point2d> vanCorner_;bool inArea(const Pose &pos) {cv::Point2d point cv::Point2d(pos.position.x(), pos.position.y());double distance cv::pointPolygonTest(vanCorner_, point, false);return distance > 0; } 似乎效果不太好,会误报 …

springboot236基于springboot在线课程管理系统的设计与实现

基于SpringBoot在线课程管理系统的设计与实现 摘要 本文首先介绍了在线课程管理系统的现状及开发背景&#xff0c;然后论述了系统的设计目标、系统需求、总体设计方案以及系统的详细设计和实现&#xff0c;最后对在线课程管理系统进行了系统检测并提出了还需要改进的问题。本系…

STM32 | 零基础 STM32 第一天

零基础 STM32 第一天 一、认知STM32 1、STM32概念 STM32:意法半导体基于ARM公司的Cortex-M内核开发的32位的高性能、低功耗单片机。 ST:意法半导体 M:基于ARM公司的Cortex-M内核的高性能、低功耗单片机 32&#xff1a;32位单片机 2、STM32开发的产品 STM32开发的产品&a…

李宏毅机器学习入门笔记——第八节

Auto-Encoder 输入图片经过两个网络后&#xff0c;计算他们两个越接近越好。 类似于Cycle GAN。 encoder将高纬度数据降维&#xff0c;作为低纬度向量 假如噪声进行训练&#xff0c;encoder将图片中的噪声去除。 其实BERT而言&#xff0c;就是以后个auto-encoder。 Feature d…

linux之进程理解(1)

目录 1. 冯诺依曼体系结构 2. 操作系统(OS) 2.1 概念 2.2 设计OS的目的 2.3 定位 2.4 理解管理 3. 系统调用和库函数概念 4. 补充 1. 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体…

电子电气架构——AUTOSAR架构下EcuM唤醒源事件详解

电子电气架构——AUTOSAR架构下EcuM唤醒源事件详解 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人…

CDC作业历史记录无法删除问题

背景 数据库开启CDC功能后&#xff0c;每天会生成大量的历史记录&#xff0c;即使达到参数“每个作业的最大历史记录“的阈值后也不会被删除&#xff0c;导致其它作业的历史记录被删除&#xff0c;无法查看以前的执行情况&#xff0c;非常不方便。 现象 数据库开启CDC后会创建…

JavaScript入门学(Web APIs)

1.变量声明 2 DOM介绍 2.1 什么是DOM 2.2 DOM树 2.3 DOM对象&#xff08;重要&#xff09; 3.DOM&#xff08;文档对象模型&#xff09;-获取元素 3.1 获取匹配的第一个元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&…

swoole

php是单线程。php是靠多进程来处理任务&#xff0c;任何后端语言都可以采用多进程处理方式。如我们常用的php-fpm进程管理器。线程与协程,大小的关系是进程>线程>协程,而我们所说的swoole让php实现了多线程,其实在这里来说,就是好比让php创建了多个进程,每个进程执行一条…

Python爬虫——Urllib库-3

目录 ajax的get请求 获取豆瓣电影第一页的数据并保存到本地 获取豆瓣电影前十页的数据 ajax的post请求 总结 ajax的get请求 获取豆瓣电影第一页的数据并保存到本地 首先可以在浏览器找到发送数据的接口 那么我们的url就可以在header中找到了 再加上UA这个header 进行请…

ssm个人学习01

Spring配置文件: spring环境的搭建: 1:导入对应的spring坐标 也就是依赖 2:编写controller, service, dao相关的代码 3:创建配置文件(在resource下面配置文件) 例如:applicationContext.xml <bean id "" class ""> <property name "&…

共同学习|Spring Cloud Alibaba一一Nacos配置

Nacos配置中心 在服务或者应用运行过程中&#xff0c;提供动态配置或者元数据以及配置管理的服务提供者。 从Nacos中拉去配置文件 pom文件 2、bootstrap.yml 修改application.yml为bootstrap.yml spring:cloud: nacos:config:server-addr: localhost:8848 #nacos服务地址…

nginx,php-fpm

一&#xff0c;Nginx是异步非阻塞多进程&#xff0c;io多路复用 1、master进程&#xff1a;管理进程 master进程主要用来管理worker进程&#xff0c;具体包括如下4个主要功能&#xff1a; &#xff08;1&#xff09;接收来自外界的信号。 &#xff08;2&#xff09;向各worker进…

代码随想录刷题笔记 DAY 35 | 无重叠区间 No.435 | 划分字母区间 No.763 | 合并区间 No.56

文章目录 Day 3501. 无重叠区间&#xff08;No. 435&#xff09;<1> 题目<2> 笔记<3> 代码 02. 划分字母区间&#xff08;No. 763&#xff09;<1> 题目<2> 笔记<3> 代码 03. 合并区间&#xff08;No. 56&#xff09;<1> 题目<2&g…

GoFrame:如何简单地搭建一个简单地微服务

一切资料来源于GoFrame官网&#xff0c; 感兴趣的&#xff0c; 可以直接去官网查阅相关资料。 首先下载框架工具&#xff0c; 下载地址&#xff1a;https://github.com/gogf/gf/releases 然后进入你想要放置的项目文件夹&#xff0c; 执行命令行 gf init {project_name} #pr…

Unity AI生成全景图制作天空盒

现在的AI很强大。 其中&#xff0c;有这样一个网站&#xff0c;通过输入提示词&#xff0c;选择某种风格就可以为你生成360全景图。 网页链接 一、生成全景图 打开网页后&#xff0c;如图&#xff1a; 勾选&#xff0c;点击CONFIRM。 点击GET STARTED&#xff0c;进入主页。…

编译链接实战(25)ThreadSanitizer检测线程安全

ThreadSanitizer&#xff08;又称为TSan&#xff09;是一个用于C/C的数据竞争检测器。在并发系统中&#xff0c;数据竞争是最常见且最难调试的错误类型之一。当两个线程并发访问同一个变量&#xff0c;并且至少有一个访问是写操作时&#xff0c;就会发生数据竞争。C11标准正式将…