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

news2024/9/23 13:20:37

问题的产生

使用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布局,最简单容易得应该就是在末尾补充元素,够用就行。

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

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

相关文章

考试:软件工程(01)

软件开发生命周期 ◆软件定义时期&#xff1a;包括可行性研究和详细需求分析过程&#xff0c;任务是确定软件开发工程必须完成的总目标&#xff0c; 具体可分成问题定义、可行性研究、需求分析等。 ◆软件开发时期&#xff1a;就是软件的设计与实现&#xff0c;可分成概要设计…

【PPT】文字突然变成方框

文章目录 前言一、问题描述二、解决方案参考文献 前言 在 ppt 画图时遇到的问题 一、问题描述 在 ppt 使用过程中&#xff0c;同一字体&#xff0c;有些变成了方框&#xff0c;有些没有变&#xff08;排除字体缺失问题&#xff09; 二、解决方案 如果是页数多了&#xff0…

【用map解决高频单词问题】返回前k个高频单词

目录 1.前言2.题目简介3.求解思路4.示例代码4.1换个稳定排序解决4.2用仿函数强行进行控制 1.前言 ok&#xff0c;好久不写博客了&#xff0c;这里简单的来写一写用到关于容器map来解决前k个高频单词的问题。 当然&#xff0c;这个问题也可以用优先级队列(堆)来解决&#xff0c…

免费扫描试卷的软件有哪些?5个软件帮助你轻松进行试卷扫描

免费扫描试卷的软件有哪些&#xff1f;5个软件帮助你轻松进行试卷扫描 扫描试卷的软件可以帮助你将纸质试卷转化为电子版&#xff0c;方便保存、分享和编辑。以下是五款免费的试卷扫描软件&#xff0c;它们功能强大且易于使用&#xff0c;能够帮助你轻松完成试卷扫描。 试卷…

【精彩瞬间】2024外滩大会回顾

9月8号&#xff0c;为期3天的“2024 inclusion外滩大会”在上海黄浦圆满落下帷幕。本届大会&#xff0c;共吸引了5.2万人到场参观&#xff0c;无论是参会规模还是国际嘉宾的数量都创下历史新高。 500位演讲嘉宾分别在1场开幕主论坛、36场见解分论坛上聚焦“ai产业新实践”“科技…

基于STM32的保温水壶控制器设计

文章目录 前言资料获取设计介绍功能介绍设计源码具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

【MATLAB】矩阵的合并

矩阵的合并是指将两个或者多个矩阵合并到一起构成一个新的矩阵。矩阵标识符方括号 [ ]&#xff0c;不仅可以用来创建新的矩阵&#xff0c;还可以用来将若干个矩阵合并到一起。表达式 C [A B] 将矩阵A和B在水平方向上合并到一起&#xff0c;而表达式C[A;B]则将矩阵A和B在竖直方…

java反射(reflection)的基本理解和使用

目录 一、什么是反射 二、反射的主要用途&#xff1f; 三、什么情况下使用反射 四、反射有什么优点&#xff1f; 1、增加程序的灵活性 2、避免将固有的逻辑程序写死到代码里 3、提高代码的复用率 4、支持动态代理和动态配置 5、支持自动化测试和代码生成 6、自由度高…

ABAP EXCEL宏函数应用

【应用场景】 1. excel导出项目及对应的分期,楼栋的各个产品类型对应的各个面积指标数据, 分项目/分期/楼栋三个SHEET页签。当用户在楼栋层级编辑完产品类型对应的面积指标时,可以 通过宏函数自下往上先汇总到相同产品类型+面积指标的分期层级,再自动汇总到项目层级面积…

万龙觉醒免费辅助脚本:VMOS云手机助力物资获取与养成!

在《万龙觉醒》中&#xff0c;资源获取和英雄养成是游戏的重要组成部分&#xff0c;而使用VMOS云手机可以为玩家带来更高效的游戏体验。通过使用VMOS云手机&#xff0c;玩家可以轻松实现24小时不间断的游戏辅助&#xff0c;无需反复安装或更新游戏&#xff0c;因为VMOS云手机自…

upload-labs通关教程

一.第一关&#xff08;前端绕过&#xff09; 首先准备一个php小马 <?php phpinfo();?>这是调用phpinfo这个函数&#xff0c;查看php的配置信息 首先上传1.php发现 使用BP抓不到包&#xff0c;猜测被前端验证了&#xff0c;查看网页源代码 可以看到下面有一段js代码过…

国内超声波清洗机哪个品牌好?非常好用的超声波清洗机

在当今社会快速生活的节奏下&#xff0c;个人健康与生活品质成为了焦点话题。面对传统清洁方法的局限性和可能对物品造成的伤害&#xff0c;人们愈发倾向于探索更高效、安全的清洁方案。超声波清洗技术恰逢其时地步入大众视野&#xff0c;凭借其高效清洁力与环保特性&#xff0…

鸿蒙开发(API 12 Beta6版)【P2P模式】 网络WLAN服务开发

概述 无线局域网&#xff08;Wireless Local Area Networks&#xff0c;WLAN&#xff09;&#xff0c;是通过无线电、红外光信号或者其他技术发送和接收数据的局域网&#xff0c;用户可以通过WLAN实现结点之间无物理连接的网络通讯。常用于用户携带可移动终端的办公、公众环境…

打造无死角安防网:EasyCVR平台如何助力智慧警务实现视频+AI的全面覆盖

一、背景概述 随着科技的飞速发展&#xff0c;智慧城市建设已成为提升社会治理能力、增强公共安全水平的重要途径。在警务领域&#xff0c;智慧警务作为智慧城市的重要组成部分&#xff0c;正通过融合视频监控技术与人工智能&#xff08;AI&#xff09;解决方案&#xff0c;实…

数据库中的主码、候选码、主属性、非主属性

参考链接 候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结 - 知乎 (zhihu.com) 1.码&#xff1a; 能够标识一条记录的属性或者属性集 2.候选码 能够标识一条记录的最小属性集 任一候选键的任何真子集都不能唯一标识一个记录&#xff08;比如在成绩表…

诸葛io:消费金融行业智能运营与数智化经营模型构建

规范化的快速发展已成为消费金融行业的主旋律&#xff0c;消金公司亟待制定数智化转型战略&#xff0c;建设自主营销与精细化运营能力&#xff0c;以找到存量时代的全新增长密码。 容联云旗下诸葛智能公司作为数智化经营领域的杰出代表&#xff0c;凭借数据技术先进性、金融业…

将esp32-s3-eye做为USB网络摄像头(UVC设备)

官方网址&#xff1a;usb_webcam 支持UVC同步、批量传输模型只支持MJPEG传输格式支持板上LCD动画esp32-s3-eye&#xff08;IDF v5.0或更高版本&#xff09; 硬件要求 官方默认的USB WebCam config就是乐鑫带摄像头OV2604的esp32-s3-eye&#xff0c;其他的开发板可以参考官方网…

仿微信QQ聊天系统源码设计开发

一、引言 随着移动互联网的快速发展&#xff0c;即时通讯软件已成为人们日常生活中不可或缺的一部分。仿微信QQ聊天系统作为一种模仿主流聊天软件功能的应用&#xff0c;旨在为用户提供高效、便捷的沟通方式。本文将从系统架构、功能模块等方面详细介绍仿微信QQ聊天系统的设计…

Visual studio自动添加头部注释

记事本打开VS版本安装目录下的Class.cs文件 增加如下内容&#xff1a;

Linux 访问控制列表(Access Control List)

在Linux中&#xff0c;目录或文件的权限是针对的所有者(owner)&#xff0c;所属组(group)&#xff0c;其他人(others)这3种类别来设置的。这种根据类别控制权限的方法无法精确控制每个用户的行为。为了解决这个问题&#xff0c;Linux引入了访问控制列表&#xff08;Access Cont…