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

弹性容器Flex中的自动外边距(Auto Margins) 的作用

最近在使用Flex布局时,遇到的一个情况:

有以下的代码:

    <div class="toolbox"><button id="decrease">-</button><span id="size">1</span><button id="increase">+</button><!-- 取色器 --><input type="color" id="color" /><button id="clear">X</button></div>

我们给父容器设置Flex布局,简单设置一下内部子元素的宽度和高度

      * {box-sizing: border-box;margin: 0;padding: 0;}.toolbox {display: flex;border: 1px solid lightcoral;width: 500px;}.toolbox > * {height: 50px;width: 50px;}

效果如下:
在这里插入图片描述
很简单的例子,但是如果我给最后一个子元素设置设置一下css代码 :

 .toolbox > *:last-child {margin-left: auto;}

效果变成了以下:
在这里插入图片描述
最后一个元素变成了右对齐,自动把剩余的空间全部变成了他的左外边距margin-left:
在这里插入图片描述
为什么会产生这种情况呢?
关于这个问题,我直接问了GPT3.5,它提到了一个叫做 自动外边距(Auto Margins),但是我并没有搜索到相关的资料,所以只能参考了GPT的回答,其中给出了W3C的候选规范:Aligning with auto margins

This section is non-normative. The normative definition of how margins affect flex items is in the Flex Layout Algorithm section.

Auto margins on flex items have an effect very similar to auto margins in block flow:

  • During calculations of flex bases and flexible lengths, auto margins
    are treated as 0.
  • Prior to alignment via justify-content and align-self, any positive
    free space is distributed to auto margins in that dimension.
  • Overflowing boxes ignore their auto margins and overflow in the end
    direction.

Note: If free space is distributed to auto margins, the alignment properties will have no effect in that dimension because the margins will have stolen all the free space left over after flexing.

在这里插入图片描述

nav > ul {display: flex;
}
nav > ul > #login {margin-left: auto;
}
<nav><ul><li><a href=/about>About</a><li><a href=/projects>Projects</a><li><a href=/interact>Interact</a><li id="login"><a href=/login>Login</a></ul>
</nav>

理解不太容易理解,只能说这就是规范,直接记住结论,关键点如下:
本例中的margin-left: auto;的效果是该方向的外边距尽可能大,直到填充主轴上的所有可用空间为止,在设置 margin-left: auto 的情况下,浏览器会为该元素的左侧自动分配剩余空间,结果是该元素会被推到容器的右侧。

然后副作用是:如果自动外边距吸收了所有可用空间,那么像 justify-content 这样的对齐属性在该维度上将不再有效,因为没有剩余空间来进行对齐。

所以,如果我们设置了父容器的justify-content: center;同时内部的子元素设置了 margin-left: auto ,此时justify-content: center;不生效:

      .toolbox {display: flex;/* justify-content: space-between; */justify-content: center;border: 1px solid lightcoral;width: 500px;}.toolbox > * {height: 50px;width: 50px;}.toolbox > *:nth-child(5) {margin-left: auto;}

效果如下,justify-content: center;不生效
在这里插入图片描述
根据这个效果,我们就可以在一些场景下应用这个,比如类似的导航栏效果:
在这里插入图片描述
实现类似效果还有其他方法,比如弹性盒子的嵌套,或者用定位,但是这种方式代码简单,同时也具备响应式。

另外如果我们修改代码为:

      .toolbox > *:nth-child(4) {margin-left: auto;}

第4个元素以及后面的兄弟元素会一起被左侧边距挤到右侧
在这里插入图片描述

相关文章:

弹性容器Flex中的自动外边距(Auto Margins) 的作用

最近在使用Flex布局时&#xff0c;遇到的一个情况&#xff1a; 有以下的代码&#xff1a; <div class"toolbox"><button id"decrease">-</button><span id"size">1</span><button id"increase">…...

C语言调用子函数时入/出栈(保护/恢复现场)全过程分析:以Cortex-M3为例

0 参考资料&工具 Cortex M3权威指南(中文).pdf keil5&#xff08;用于仿真查看寄存器、栈变化&#xff09;1 C语言调用子函数时出入/出栈&#xff08;保护/恢复现场&#xff09;全过程分析 使用C语言调用子函数是如何保护/恢复现场的呢&#xff1f;本文以Cortex-M3为例&a…...

理解Sigmoid激活函数原理和实现

Sigmoid 激活函数是一种广泛应用于机器学习和深度学习中的非线性函数&#xff0c;特别是在二分类问题中。它的作用是将一个实数值映射到(0, 1)区间&#xff0c;使得输出可以被解释为概率值&#xff0c;这在处理二分类问题时非常有用。 Sigmoid 函数的定义 Sigmoid 函数的数学…...

探秘DevSecOps黄金管道,安全与效率的完美融合

软件应用的安全性已成为企业和用户关注的焦点&#xff0c;DevSecOps作为一种将安全融入开发和运维全过程的理念和实践&#xff0c;旨在消除传统开发模式中安全被后置处理的弊端。DevSecOps黄金管道&#xff08;Golden Pipeline&#xff09;是实现这一理念的核心框架&#xff0c…...

Redis的内存淘汰策略- volatile-lru

volatile-lru 策略简介 在 volatile-lru 策略下&#xff0c;当 Redis 的内存使用达到配置的上限&#xff08;maxmemory&#xff09;时&#xff0c;它会优先删除那些设置了过期时间的键&#xff0c;并且选择最近最少使用的键进行删除。LRU 算法的核心思想是&#xff0c;优先删除…...

HTTP和HTTPS的区别?哪一个更适合你的网站?

什么是 HTTP&#xff1f; HTTP&#xff08;超文本传输协议&#xff09;&#xff08;Hypertext Transfer Protocol&#xff09;它是一组允许网络浏览器与网络服务器&#xff08;托管网站的计算机&#xff09;进行通信的规则。 HTTP 使用请求-响应模型。 例如&#xff0c;当你…...

OpenAI SORA团队负责人 通往智能的方式 报告笔记

OpenAI SORA团队负责人 通往智能的方式 报告笔记 这个报告其实是2024年智源大会的主旨报告&#xff0c;OpenAI SORA和DALL-E团队负责人Aditya Ramesh给出的一段有关多模态大模型的报告。我去听了现场&#xff0c;感觉倍受启发&#xff0c;但是感觉很多并不能当场理解&#xff…...

006-Sleuth(Micrometer)+ZipKin分布式链路追踪

这里写目录标题 1 分布式链路追踪概述1.1 为什么会出现这个技术&#xff1f;需要解决哪些问题&#xff1f;1.2 在分布式与微服务场景下需要解决的问题 2 新一代Spring Cloud Sleuth&#xff1a;Micrometer2.1 官网重要提示2.1.1 新一代Sleuth2.1.2 官网2.1.3 说明2.1.3.1 老项目…...

AI模型:追求全能还是专精?-- 之6 语言复杂度类别(Category 0~3 类)和语言功能性类型(Type 0~Ⅲ 型)之2

Q17、我前面说过&#xff0c;语言复杂度的0~3级&#xff08;Category 0~3&#xff09;表示了语言的的上下文相关性 &#xff1a; 完全不相关&#xff0c; 单相关的 单词上下文&#xff0c; 双相关的句子上下文 全相关的文章上下文 。我准备翻译为 Context - irrelative /relati…...

20240907 每日AI必读资讯

大疆发布 DJI Neo 掌上 Vlog 无人机&#xff01; - DJI Neo 是 DJI 迄今最轻、最小的无人机&#xff0c;无需遥控器&#xff0c;掌上起降即可轻松拍出主角大片… &#xff5c;135 克轻巧便携 丨零门槛掌上起降 丨AI 智能跟拍 &#xff0c;一键成片 丨多种操控&#xff0c;丰富…...

深度学习基础--卷积基础模块

本节主要关注卷积神经网络发展过程中具有里程碑意义的基础模块&#xff0c;了解它们的原理和设计细节 1. 批归一化 在机器学习中&#xff0c;一般会假设模型的输入数据的分布是稳定的。如果这个假设不成立&#xff0c;即模型输入数据的分布发生变化&#xff0c;则称为协变量偏…...

视频智能分析打手机检测算法安防监控打手机检测算法应用场景、算法源码、算法模型介绍

随着智能手机的普及&#xff0c;手机已成为人们生活中不可或缺的一部分。然而&#xff0c;在某些场合&#xff0c;如驾驶、会议、学校课堂等&#xff0c;不当使用手机可能会导致安全隐患或干扰他人。因此&#xff0c;开发出一种能够准确识别并阻止不当使用手机的行为检测算法显…...

6.2图的存储及基本操作

6.2.1顺序存储 邻接矩阵法,用一个一维数组存储图中顶点信息,二维数组存储图中边的信息 无向图 1.无向图的邻接矩阵关于对角线对称,可采用压缩存储 2.边数为e,则邻接矩阵中1为2e; 3.第i行or 第i列非零元素之和恰好为顶点i的度数 4.判断是否有边用0,1 5. 有向图 1.关于对…...

Java语法全解析:掌握基本规则,打造稳固编程基础!

Java基本语法是编写Java程序的核心&#xff0c;它包括了数据类型、运算符、控制结构、类与对象等基本组成部分。这些语法要素共同构成了Java程序的基础框架&#xff0c;掌握它们是进行Java编程的前提。以下是Java基本语法的详细介绍&#xff1a; 数据类型 基本数据类型&#x…...

同时播放多个视频

介绍一款小众的视频播放器&#xff0c;之前有小伙伴找那种可以同时播放多个视频的软件&#xff0c;“恒硕加播放”可以做到这一点&#xff0c;功能不是太多&#xff0c;但是日常播放是足够了。 同时播放多个视频控制多个视频跳到指定进度同时暂停/播放/停止/静音/倍速浏览系统…...

伴奏提取消除人声如何操作?轻松几步玩转音乐世界

你是否梦想着独自演绎一曲&#xff0c;或是进行个性化的混音创作&#xff0c;却又希望摆脱原唱声音的干扰&#xff1f;那么&#xff0c;学会免费伴奏提取就显得尤为关键。 在这篇文章中&#xff0c;我将为你展示四种简单易学的方法&#xff0c;让你能够轻松地从歌曲中提取出伴…...

uniapp二维码生成

uniapp二维码生成 参考文档依赖引入代码html部分生成代码&#xff08;vue3 hook&#xff09;使用 参考文档 【博主&#xff1a;ChoneyLove】uniapp中生成二维码及解决微信小程序端问题总结 依赖引入 npm i uqrcodejs代码 html部分 <canvas type"2d" id"…...

Android UID 和 userID 以及 appID

我们知道Android 操作系统是基于Linux内核的&#xff0c;所以Android 的UID 是基于 Linux UID的。 Linux UID Linux 本身就是一个多用户操作系统&#xff0c;每一个用户都会有一个UID&#xff0c;不同UID 之间的资源访问是受限的。 其中&#xff0c;Linux的DAC权限模型&#…...

Kafka的三高设计原理

1.生产者缓存机制--高性能 生产者缓存机制的主要目的是将消息打包&#xff0c;减少网络IO频率 kafka生产者端存在消息累加器RecordAccumulator&#xff0c;它会对每个Partition维护一个双端队列&#xff0c;队列中消息到达一定数量后 或者 到达一定时间后&#xff0c;通过sen…...

生信圆桌x生信宝库:生物信息学资源与工具的终极指南

介绍 生物信息学作为现代生物科学的重要分支&#xff0c;涉及到大量的数据处理、分析和存储工作。随着领域的不断发展&#xff0c;各类生物信息学资源与工具也如雨后春笋般涌现。这些资源涵盖了从基因组数据、蛋白质结构到代谢路径的方方面面&#xff0c;极大地丰富了科研人员的…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...