使用 display: flex 实现动态布局:每行两个 item,单数时最后一个占满整行

在这里插入图片描述

文章目录

  • 使用 `display: flex` 实现动态布局:每行两个 item,单数时最后一个占满整行 🎯
    • 一、需求分析
    • 二、实现思路
    • 三、代码实现
      • 1. HTML 结构
      • 2. CSS 样式
      • 关键点解析:
    • 四、效果演示
      • HTML 示例:
      • 效果:
    • 五、完整代码


使用 display: flex 实现动态布局:每行两个 item,单数时最后一个占满整行 🎯

这两天看到一个面试题有感而发,面试题如下
在这里插入图片描述

在前端开发中,灵活布局是一个常见的需求。今天我们来探讨如何使用 display: flex 实现一个动态布局:每行显示两个 item,间隔为 20px,并且当 item 数量为单数时,最后一个 item 占满整行。🧑‍💻

本文将详细介绍实现方法,并附上完整代码,帮助你轻松掌握这一技巧!

效果展示:
> 这里是导文

一、需求分析

我们需要实现以下效果:

  1. 每行显示两个 item,且 item 之间的间隔为 20px
  2. item 数量为单数时,最后一个 item 占满整行。
  3. item 的数量 n 是动态的,布局需要自动适应。

二、实现思路

为了实现上述需求,我们可以借助 display: flex 的强大功能:

  1. 弹性盒子布局:使用 flex 实现灵活的排列方式。
  2. 换行功能:通过 flex-wrap: wrap 实现自动换行。
  3. 动态宽度:通过 calc() 计算每个 item 的宽度,并处理单数情况。

三、代码实现

1. HTML 结构

首先,我们定义一个容器 .box,并在其中动态生成 item

<div class="box"><div v-for="item in n" :key="item" class="item"></div>
</div>
  • .box 是容器,用于包裹所有 item
  • v-for 是 Vue 的语法,用于动态生成 item(假设 n 是动态的)。

2. CSS 样式

接下来,我们通过 CSS 实现布局效果:

.box {display: flex;flex-wrap: wrap; /* 允许换行 */gap: 20px; /* 设置 item 之间的间隔 */
}.item {flex: 1 1 calc(50% - 10px); /* 每行两个 item,减去间隔的一半 */box-sizing: border-box;background-color: #ccc;height: 100px; /* 设置 item 的高度 */border: 1px solid #999;
}/* 当 n 为单数时,最后一个 item 占满整行 */
.item:last-child:nth-child(odd) {flex: 1 1 100%;
}

关键点解析:

  1. display: flex:将容器设置为弹性盒子,实现灵活的布局。
  2. flex-wrap: wrap:允许内容换行,确保每行只有两个 item
  3. gap: 20px:设置 item 之间的间隔为 20px
  4. flex: 1 1 calc(50% - 10px)
    • flex-grow: 1:允许 item 扩展。
    • flex-shrink: 1:允许 item 收缩。
    • flex-basis: calc(50% - 10px):设置 item 的基础宽度为 50% 减去间隔的一半(因为每行有两个 item,总间隔为 20px,每个 item 分摊 10px)。
  5. item:last-child:nth-child(odd)
    • n 为单数时,最后一个 item 会匹配 :last-child:nth-child(odd)
    • 设置 flex: 1 1 100%,使其占满整行。

四、效果演示

假设 n = 5,效果如下:

  • 前两行每行有两个 item,宽度各为 50%,间隔为 20px
  • 最后一行只有一个 item,宽度为 100%

HTML 示例:

<div class="box"><div class="item">1</div><div class="item">2</div><div class="item">3</div><div class="item">4</div><div class="item">5</div>
</div>

效果:

  • 第一行:item 1item 2
  • 第二行:item 3item 4
  • 第三行:item 5 占满整行。

五、完整代码

以下是完整的 HTML + CSS 代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flex 布局示例</title><style>.box {display: flex;flex-wrap: wrap;gap: 20px;}.item {flex: 1 1 calc(50% - 10px);box-sizing: border-box;background-color: #ccc;height: 100px;border: 1px solid #999;}.item:last-child:nth-child(odd) {flex: 1 1 100%;}</style>
</head>
<body><div class="box"><div class="item">1</div><div class="item">2</div><div class="item">3</div><div class="item">4</div><div class="item">5</div></div>
</body>
</html>

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

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

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

相关文章

preloaded-classes裁剪

系统预加载了哪些class类&#xff1f;system/etc/preloaded-classes 修改源代码&#xff1f; frameworks\base\config\preloaded-classes 默认位置&#xff0c;如果改了不生效&#xff0c;可能有其它模块的mk文件指定了preloaded-classes覆盖了framework模块&#xff0c;例如…

华为配置篇-OSPF基础实验

OSPF 一、简述二、常用命令总结三、实验3.1 OSPF单区域3.2 OSPF多区域3.3 OSPF 的邻接关系和 LSA 置底 一、简述 OSPF&#xff08;开放式最短路径优先协议&#xff09; 基本定义 全称&#xff1a;Open Shortest Path First 类型&#xff1a;链路状态路由协议&#xff08;IGP&…

Orale数据文件加错位置,你直接rm引发的故障

数据库可能面临硬件故障、人为错误、恶意攻击、自然灾害等多种潜在风险&#xff0c;那么今天这个故障就是由于业务人员加错数据文件的位置&#xff0c;然后直接从物理层面rm -f了&#xff0c;导致了生产的故障&#xff01; 以下是针对Oracle数据库物理删除数据文件后的快速修复…

ChromeDriver下载 最新版本 134.0.6998.35

平时为了下个驱动&#xff0c;到处找挺麻烦&#xff0c;收集了很多无偿分享给需要的人&#xff0c;仅供学习和交流。 ChromeDriver及浏览器134.0.6998.35 ChromeDriver及浏览器133.0.6943.141 ChromeDriver 102.0.5005.61 ChromeDriver 105.0.5195.102 ChromeDriver 108.0…

QEMU源码全解析 —— 块设备虚拟化(2)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(1) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回讲解了几种虚拟化方式(全虚拟化、半虚拟化和硬件辅助虚拟化)的优缺点及其对比…

Redis——缓存穿透、击穿、雪崩

缓存穿透 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中&#xff0c;导致请求直接到了数据库上&#xff0c;根本没有经过缓存这一层。举个例子&#xff1a;某个黑客故意制造我们缓存中不存在的 key 发起大量请求&#xff0c;导致大量请求落到数据库…

DELETE/ UPDATE/ INSERT 语句会自动加锁

在数据库系统中&#xff0c;DELETE、UPDATE 和 INSERT 语句通常会自动加锁&#xff0c;以确保数据的一致性和并发控制。具体的锁类型和效果取决于数据库的实现&#xff08;如 MySQL、PostgreSQL 等&#xff09;以及事务的隔离级别。以下是这些操作通常加锁的行为和效果&#xf…

【从零开始学习计算机科学】硬件设计与FPGA原理

硬件设计 硬件设计流程 在设计硬件电路之前,首先要把大的框架和架构要搞清楚,这要求我们搞清楚要实现什么功能,然后找找有否能实现同样或相似功能的参考电路板(要懂得尽量利用他人的成果,越是有经验的工程师越会懂得借鉴他人的成果)。如果你找到了的参考设计,最好还是…

SpringCloud—概述—01

一、微服务 1&#xff09;单体架构 业务的所有功能实现都打包在一个 war 包或者 jar 包中&#xff0c;这种方式就称为 单体架构 例如&#xff0c;学校中实现的博客系统&#xff0c;前端后端数据库实现&#xff0c;都是在一个项目中 把所有模块都写在一个 web 项目中&#x…

C++ 学生成绩管理系统

一、项目背景与核心需求 成绩管理系统是高校教学管理的重要工具,本系统采用C++面向对象编程实现,主要功能模块包括: 学生信息管理(学号/姓名/3门课程成绩) 成绩增删改查(CRUD)操作 数据持久化存储 统计分析与报表生成 用户友好交互界面 二、系统架构设计 1. 类结构设计 …

go的grpc

GRPC介绍 目录 单体架构微服务架构问题原始的grpc 服务端客户端原生rpc的问题 grpc的hello world 服务端客户端 proto文件proto语法 数据类型 基本数据类型其他数据类型 编写风格多服务 单体架构 只能对整体扩容一荣俱荣&#xff0c;一损俱损代码耦合&#xff0c;项目的开…

1.12.信息系统的分类【ES】

专家系统&#xff08;ES&#xff09;技术架构深度解析 一、ES核心定义 &#x1f9e0; 智能决策中枢 由三大核心能力构建的领域专家模拟系统&#xff1a; 存储专家级领域知识&#xff08;10^4规则量级&#xff09;支持不确定性推理&#xff08;置信度>85%&#xff09;动态…

考研数一非数竞赛复习之Stolz定理求解数列极限

在非数类大学生数学竞赛中&#xff0c;Stolz定理作为一种强大的工具&#xff0c;经常被用来解决和式数列极限的问题&#xff0c;也被誉为离散版的’洛必达’方法&#xff0c;它提供了一种简洁而有效的方法&#xff0c;使得原本复杂繁琐的极限计算过程变得直观明了。本文&#x…

html播放本地音乐

本地有多个音乐文件&#xff0c;想用 html 逐个播放&#xff0c;或循环播放&#xff0c;并设置初始音量。 audio 在 html 中播放音乐文件用 audio 标签&#xff1a; controls 启用控制按钮&#xff0c;如进度条、播放、音量、速度等。不加不显示任何 widget。autoplay 理应启…

DeepSeek-Manus精品课合集【附下载】

AI消息不断&#xff0c;继DeepSeek之后&#xff0c;又出了一个颠覆性的AI产品Manus&#xff0c;号称全球第一个通用型AI。相比与DeepSeek&#xff0c; Manus拥有更强的自主性和执行力。 如果说DeepDeek是一个最强大脑&#xff0c;那么Manus就是一个完整的人&#xff01; DeepS…

MySQL复习笔记

MySQL复习笔记 1.MySQL 1.1什么是数据库 数据库(DB, DataBase) 概念&#xff1a;数据仓库&#xff0c;软件&#xff0c;安装在操作系统&#xff08;window、linux、mac…&#xff09;之上 作用&#xff1a;存储数据&#xff0c;管理数据 1.2 数据库分类 关系型数据库&#…

从源到目标:深度学习中的迁移学习与领域自适应实践

引言&#xff1a;数据驱动的智能时代与迁移挑战 在深度学习快速发展的今天&#xff0c;模型训练对数据量和质量的依赖成为核心瓶颈。面对新场景时&#xff0c;标注数据不足、数据分布差异等问题常导致模型性能骤降。迁移学习&#xff08;Transfer Learning&#xff09;与领域自…

【网络】HTTP协议、HTTPS协议

HTTP与HTTPS HTTP协议概述 HTTP&#xff08;超文本传输协议&#xff09;&#xff1a;工作在OSI顶层应用层&#xff0c;用于客户端&#xff08;浏览器&#xff09;与服务器之间的通信,B/S模式 无状态&#xff1a;每次请求独立&#xff0c;服务器不保存客户端状态&#xff08;通…

Jmeter使用介绍

文章目录 前言Jmeter简介安装与配置JDK安装与配置JMeter安装与配置 打开JMeter方式一方式二 设置Jmeter语言为中文方法一&#xff08;仅一次性&#xff09;方法二(永久设置成中文) Jmeter文件常用目录 元件与组件元件组件元件的作用域元件的执行顺序第一个案例添加线程组添加 H…

【NLP 32、文本匹配任务 —— 深度学习】

大劫大难以后&#xff0c;人不该失去锐气&#xff0c;不该失去热度&#xff0c;你镇定了却依旧燃烧&#xff0c;你平静了却依旧浩荡&#xff0c;致那个从绝望中走出来的自己&#xff0c;共勉 —— 25.1.31 使用深度学习在文本匹配任务上主要有两种方式&#xff1a;① 表示型 ②…