当前位置: 首页 > news >正文

Flex布局最后一行元素的对齐的解决方案

问题的产生

使用Flex布局,设置justify-content: space-between;让元素在主轴上两队对齐。

 <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 class="item">6</div><div class="item">7</div></div>
      .box {display: flex;flex-wrap: wrap;justify-content: space-between;width: 500px;border: 1px solid red;}.item {width: 120px;height: 100px;margin-bottom: 10px;background-color: aquamarine;}

假如一行显示4个元素,最后一行在不够4个元素的时候,按照两端对齐显示,效果显得不好,我们希望假如最后一行不足4个元素的时候,默认从左向右排列。
在这里插入图片描述

解决方法

这个问题有很多的解决方法,先说最简单也是最常用,兼容性最好的一种。

1. 使用i或者span补齐

假如我们这里一行最多显示4个元素,我们就再列表项的末尾补充4个i元素。

    <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 class="item">6</div><div class="item">7</div><!-- 补充4个i元素 --><i></i><i></i><i></i><i></i></div>

同时设置css样式:

      .box {display: flex;flex-wrap: wrap;justify-content: space-between;width: 500px;border: 1px solid red;}.item {width: 120px;height: 100px;margin-bottom: 10px;background-color: aquamarine;}/* 针对i元素的样式 */.box i {width: 120px;height: 0;}

显示效果为:
在这里插入图片描述

这种方式的原理是:
首先末尾的4个元素宽度和列表项一致,但是高度为0,我们先设置高度不为0看下效果:

      /* 针对i元素的样式 */.box i {width: 120px;height: 30px;background-color: brown;}

四个元素其中一个充当了之前最后一行的末尾元素,剩下的3个元素按照两端对齐,显示在下一行,此时高度设置为0,元素不显示,也不会多占据一行,但是可以在主轴方向上填补之前的空白区域。
在这里插入图片描述
为什么需要4个,当然是为了考虑到最后一行可能剩2,3的情况。
在这里插入图片描述
在这里插入图片描述
如果最后一行剩一个元素,默认会左对齐,如果剩4个元素,那就是正好两端对齐,所以我们需要考虑的就是剩2个或者3个的情况,但是为了统一,直接放置4个在末尾,高度为0,也不会占据高度,只是会额外的创建html元素。

2. 使用Css选择器

还是使用flex布局,使用justify-content: space-between;,不额外创建html元素。我们假设一行只显示4个元素,根据上一节,我们只需要考虑处理剩2个或者3个元素的情况。

这里我们的每个列表项的宽度使用%单位、

    <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 class="item">6</div><div class="item">7</div></div>
      * {box-sizing: border-box;margin: 0;padding: 0;list-style: none;}.box {width: 500px;/* 父元素设置高度,子元素会默认拉伸 */display: flex;flex-wrap: wrap;justify-content: space-between;background-color: lightslategray;}.item {width: 24%;height: 100px;margin-bottom: 5px;background-color: bisque;}

在这里插入图片描述
我们通过css选择器,选中最后一个元素,设置他的margin-right,

/*一行4个元素,4n就是选中第4,8,12个元素...,n从0开始,相当于选中每一行的第4个,但是我们要选中的是每一行的第3个,所以就有了4n-1但是考虑到只针对最后一行,就有了下面的选择器是最后一个元素的同时 还是每一行中的第三个
*/.item:last-child:nth-child(4n - 1) {margin-right: calc(24% + 4% / 3);}

宽度:由于每一个item元素没有设置margin,item宽度为24%,一行4个,就是96%,还剩4%的空白空间,这4%的空白空间平均分成了3分,才有了下面的间距
在这里插入图片描述
针对最后一行的最后一个元素即7号,它应该和3号元素对齐:

24%是一个元素的空间,再加上原本的间距
margin-right: calc(24% + 4% / 3);

在这里插入图片描述

同样针对剩2个元素的情况,可以有如下的选择器:

      .item:last-child:nth-child(4n - 2) {margin-right: calc(48% + 8% / 3);}

6号和2号对齐,右侧的空间是24% * 2 + 4% / 3 * 2 ,即48% + 8% / 3
在这里插入图片描述
所以我们有了下面的代码

    <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 class="item">6</div><div class="item">7</div></div>
      * {box-sizing: border-box;margin: 0;padding: 0;list-style: none;}.box {width: 500px;display: flex;flex-wrap: wrap;justify-content: space-between;background-color: lightslategray;}.item {width: 24%;height: 100px;margin-bottom: 5px;background-color: bisque;}.item:last-child:nth-child(4n - 2) {margin-right: calc(48% + 8% / 3);}.item:last-child:nth-child(4n - 1) {margin-right: calc(24% + 4% / 3);}
不使用justify-content:space-between

在模拟两端对齐效果,中间的gap间隙我们使用margin进行控制。

    <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 class="item">6</div><div class="item">7</div></div>
      .box {display: flex;flex-wrap: wrap;width: 500px;border: 1px solid red;}.item {width: 120px;height: 100px;/*先统一设置mr*/margin-right: calc(20px / 3);margin-bottom: 10px;background-color: aquamarine;}/*每行的最后一个不设置mr*/.item:nth-child(4n) {margin-right: 0;}

或者直接选中除了每一行最后一个元素外的其他元素:

      .item {width: 120px;height: 100px;margin-bottom: 10px;background-color: aquamarine;}/*选择每一行非第4个元素,设置外边距但是外边距的值需要计算出来,或者使用%单位
*/.item:not(:nth-child(4n)) {margin-right: calc((500px - 120px * 4) / 3);}

每一行的最后一个元素是没有外边距的
在这里插入图片描述

还有很多其他方法,或者使用grid布局,最简单容易得应该就是在末尾补充元素,够用就行。

相关文章:

Flex布局最后一行元素的对齐的解决方案

问题的产生 使用Flex布局&#xff0c;设置justify-content: space-between;让元素在主轴上两队对齐。 <div class"box"><div class"item">1</div><div class"item">2</div><div class"item">3&l…...

【ShuQiHere】上章:计算与计算机的基础概念

【ShuQiHere】✨ 在当今数字化社会&#xff0c;计算机已无处不在&#xff0c;从智能手机到人工智能应用&#xff0c;影响深远。然而&#xff0c;计算机并非一开始就如此强大。它经历了从手动工具、机械装置到电子计算机的演变。本章将回顾计算与算法的基本概念&#xff0c;探讨…...

前端框架有哪些?全面解析主流前端框架

一、React React 是由 Facebook 开发和维护的一个前端框架&#xff0c;它专注于构建用户界面。React 采用组件化的开发模式&#xff0c;允许开发者将用户界面拆分成多个可复用的组件。 主要特点 组件化: React 的核心是组件&#xff0c;它允许开发者将界面拆分成独立的、可复…...

4G MQTT网关在物联网应用中的优势-天拓四方

随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;各种设备和系统之间的互联互通变得日益重要。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;作为一种轻量级的发布/订阅消息传输协议&#xff0c;因其高效、可靠、简单的特性&#xff0c;在…...

【网上商城项目结构】

文章目录 前言一、网站前台二、运营商后台三、商家管理后台四、系统架构五、数据库设计六、关键技术总结 前言 网上商城项目结构通常包括网站前台、运营商后台和商家管理后台三个子系统&#xff0c;以及多个功能模块&#xff0c;如门户、搜索、购物车、订单、秒杀、个人中心等…...

VMware-Ubuntu Server安装教程

整理了B站和考拉软件上的信息 VMware安装 1.下载完成后&#xff0c;鼠标右击【VMware Workstation Pro 17.5.1】压缩包&#xff0c;选择【解压至此】 2.打开解压后的文件夹&#xff0c;鼠标右击【VMware17.5】选择【以管理员身份运行】 3.点击【下一步】 4.勾选【我接受许可协…...

从hadoop平台下载文件到本地Windows

一、只能上传文件,不能下载 1、原因: 如果在Windows中没有配置hadoop的环境变量,用idea远程连接上hadoop平台之后,只能往hadoop上推送数据文件,并不能下载文件,因为下载时hadoop会检测本地有无hadoop环境配置,所以我们需要安装winutils,在windows本地模拟一个hadoop环…...

MySQL-CRUD入门2

文章目录 数据的查询(补充)条件查询关于SQL语句的执行顺序分页查询(LIMIT) 数据的修改数据修改基础知识 数据的查询(补充) 这一节接着写, 包括数据的查询(补充), 数据的更新, 数据的删除 条件查询 其实就是根据给定的一些条件, 然后过滤掉不符合实际情况的记录, 把符合条件的…...

高级java每日一道面试题-2024年9月06日-基础篇-Java中的PO、VO、BO、DO、DAO、DTO、POJO是什么意思?

如果有遗漏,评论区告诉我进行补充 面试官: Java中的PO、VO、BO、DO、DAO、DTO、POJO是什么意思? 我回答: PO持久化对象&#xff08;Persistent Object&#xff09; PO是持久化对象&#xff0c;用于表示数据库中的实体或表的映射 通常与数据库表的结构和字段对应 PO的属性对…...

MFC读取PC6408板卡输入信号实例

本程序基于前期我的博客文章《MFC用信号灯模拟工控机数字量输入信号实时采集实例&#xff08;源码下载》 1、在TheradDlg.h中相关代码 ... private:unsigned short nAddr; ... TheradDlg.cpp中相关代码 #include "pc60002k.h"BOOL CTheradDlg::OnInitDialog() { ..…...

@Async的使用说明

在 Spring Boot 中&#xff0c;Async 注解用于实现异步方法调用&#xff0c;允许方法在单独的线程中执行&#xff0c;从而避免阻塞主线程&#xff0c;提升应用的并发处理能力。 1. 基本用法 在 Spring Boot 中使用 Async 很简单&#xff0c;主要步骤如下&#xff1a; 步骤 1…...

经验笔记:SQL调优

SQL调优经验笔记 引言 SQL调优是确保数据库系统高效运行的重要环节。通过对查询语句、数据库配置、硬件资源等方面进行优化&#xff0c;可以显著提升数据库性能&#xff0c;进而增强应用程序的整体表现。以下是基于常见调优手段和实践经验整理的一份经验笔记。 1. 查询语句优…...

Selenium使用浏览器用户配置进行测试

本文主要介绍了如何在使用Selenium WebDriver进行自动化测试时&#xff0c;创建和使用自定义的Firefox配置文件。 什么是Firefox配置文件&#xff1f; Firefox会将用户的个人信息&#xff0c;如书签、密码和用户偏好设置存储在一个称为配置文件的文件集合中&#xff0c;这些文…...

virsh命令的使用

virsh 是一个用于管理虚拟机的命令行工具&#xff0c;它与 libvirt 服务配合使用&#xff0c;支持对虚拟机的创建、配置、启动、停止等操作。 1、列出虚拟机 列出正在运行的虚拟机&#xff1a; virsh list列出所有虚拟机&#xff08;包括未启动的&#xff09;&#xff1a; …...

【来学Vue吧】创建一个Vue项目

&#x1f31f; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30d; 2024&#xff0c;每日百字&#xff0c;记录时光&#xff0c;感谢有你一路同行。 &#x1f680; 携手启航&#xff0c;探索未知&#xff0c;激发潜能&#xff0c;每一步都意义非凡。 首先需要配置Vue环境…...

C#迭代器方法和yield用法

一.迭代器方法介绍 可使用foreach循环进行遍历的方法&#xff0c;称为迭代器方法。 迭代器方法使用yield return语句返回元素。 到达yield return语句时&#xff0c;会记住当前在代码中的位置。 下次调用迭代器函数时&#xff0c;将从该位置开始执行。换言之&#xff0c;如果…...

斗破C++编程入门系列之二十六:数组、指针和字符串:动态内存分配和释放(一星斗师)

斗破C目录&#xff1a; 斗破C编程入门系列之前言&#xff08;斗之气三段&#xff09; 斗破C编程入门系列之二&#xff1a;Qt的使用介绍&#xff08;斗之气三段&#xff09; 斗破C编程入门系列之三&#xff1a;数据结构&#xff08;斗之气三段&#xff09; 斗破C编程入门系列之…...

Servlet 和 Spring Boot 的请求处理流程区别和例子

当然可以为您绘制一个流程图&#xff0c;展示 Servlet 和 Spring Boot 的请求处理流程。这将帮助我们更直观地比较两者的工作方式。 #mermaid-svg-PgFEmecUmDhvxxtQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-P…...

C++笔记之map的实用操作

C++笔记之map的实用操作 文章目录 C++笔记之map的实用操作1.初始化1.1.使用列表初始化1.2.使用 `insert` 方法1.3.使用 `emplace` 方法1.4.复制构造1.5.移动构造2.赋值2.1.列表赋值2.2.插入元素2.3.批量插入3.取值3.1.使用 `[]` 操作符3.2.使用 `at()` 方法3.3.检查键是否存在3…...

Lombok失效:报错 找不到符号 Springboot项目

错误原因&#xff0c;Springboot项目为Lombok提供了版本管理的支持&#xff0c;所以引入Lombok依赖的时候&#xff0c;无需手动指定版本&#xff0c;手动指定了可能会导致依赖冲突。 去掉手动指定的版本&#xff0c;问题解决...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...