探秘Flex布局下子元素宽度超出的那些烦心事

嘿,小伙伴们!你们有没有遇到过用Flex布局的时候,子元素的宽度莫名其妙地超出了父元素的情况?别着急,今天我就来给大家揭秘这个问题的来龙去脉,以及一些解决方案。让我们一起来深入探讨!

发现问题

首先,让我们先了解一下为什么会出现这个问题。想象一下,你在布局中使用了Flex,左边是一个小盒子,右边是一个大盒子,但右边的内容一多,就开始溢出了。这不是我们预期的Flex自动调整吗?为什么会出现这种情况呢?

实际上,问题出在我们对Flex布局的一些误解上。并不是所有的属性都能完美解决问题,这就需要我们深入了解Flex布局的原理。

Flex布局的误解

问题的根源在于我们对于flex: 1 这段语法的误解,flex: 1 经常出现在Flex布局中,它实际上是 flex-grow, flex-shrink, 和 flex-basis 这三个属性的缩写。要完全理解 flex: 1 的含义,让我们逐个解释这三个属性。

1. flex-grow

flex-grow 属性定义了项目的放大比例,默认为0,即如果存在剩余空间,也不放大。如果所有项目的 flex-grow 属性都为1,则它们将等分剩余空间。如果一个项目的 flex-grow 属性为2,而另一个项目的 flex-grow 属性为1,则前者占据的剩余空间将是后者的两倍。简而言之,flex-grow 控制了弹性盒子中各个项目在剩余空间分配上的比例。

2. flex-shrink

flex-grow 相对应的是 flex-shrink 属性。它定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的 flex-shrink 属性都为1,则它们将等比例缩小,以便适应空间。如果一个项目的 flex-shrink 属性为0,其他项目为1,则空间不足时,前者不缩小。

3. flex-basis

flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。它可以是一个长度(如 20%100px),也可以是 auto(项目的本来大小)。默认值为 auto。在 flex-growflex-shrink 生效之前,项目所占据的空间大小由 flex-basis 决定。

解决方案

方案1:限制子元素的内容

我们可以尝试给超出的子元素来一波限制。通过设置 overflow: hidden;,我们可以让多余的内容隐藏起来,而且可以通过 white-space: nowrap;text-overflow: ellipsis; 让溢出的文本显示为省略号,这样既解决了问题,又让界面更加美观。

但需要注意的是,有些时候,即使我们设置了 overflow: hidden;,子元素的宽度还是会超出父元素,这时候就需要换个方法了。

方案2:设置子元素的最小宽度

通常情况下,当子元素的内容是自动宽度时,flex-basis 会默认为 auto,这意味着子元素会尽可能地撑开以容纳其内容。而这就导致了即使我们设置了 overflow: hidden;,子元素的宽度仍然会超出父元素的情况。这里,我们可以使用 min-width: 0; 来解决。

这个小技巧的原理是,通过将 flex-basis 设置为0,我们强制子元素在分配剩余空间之前不占据任何空间。这样一来,即使子元素的内容很多,也会被限制在父元素的范围内,而不会再溢出。

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

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

相关文章

Android 蓝牙实战——蓝牙音乐播放进度(二十)

对于蓝牙音乐的开发来说,播放进度是一个比较重要的数据参数,这里我们就来分析一下蓝牙音乐播放进度的相关回调。 一、回调流程 1、AvrcpControllerService 源码位置:/packages/apps/Bluetooth/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerService.java /…

Agent AI智能体的未来探讨

背景 Agent AI智能体,作为人工智能技术的一种重要形态,正逐渐融入我们的日常生活并扮演着越来越重要的角色。随着技术的不断发展和智能化水平的提高,Agent AI在未来社会中的角色、发展路径以及其它方面可能带来的挑战备受广泛关注。本…

代码随想录算法训练营第四十五天| 70. 爬楼梯 (进阶), 322. 零钱兑换,279.完全平方数

目录 题目链接:70. 爬楼梯 (进阶) 思路 代码 题目链接:322. 零钱兑换 思路 代码 题目链接:279.完全平方数 思路 代码 总结 题目链接:70. 爬楼梯 (进阶) 思路 依旧是转换成…

package.json.依赖版本修改判断

package.json. 的dependencies已经改了axios版本"axios": “^1.6.8”, 查看dist\cdn\axios\1.0.0\axios.min.js中内容还是:/* axios v0.17.1 | © 2017 by Matt Zabriskie */以为没有更新axios版本 查看当前项目使用的包以及版本,不包括依…

自然语言处理: RAT = CoT + RAG

Retrieval Augmented Thoughts (RAT) 是一种协同思维链 (CoT) 和检索增强生成 (RAG) 的 AI 提示策略,助力解决具有挑战性的长任务推理和生成。 RAG 有关于RAG的介绍可以参考我之前的博文: 自然语言处理: 第十五章RAG(Retrieval Augmented Generation) 开发能够像人…

DCEP数字人民币:中国法定区块链中数字货币

一、背景 作为全球第二大经济体,中国在数字货币领域的发展一直备受关注。近年来,中国政府积极推动数字货币的研究和试点工作,逐步开放数字货币交易试点,并计划推出中国唯一合法数字货币——数字人民币(RMB Coin&#…

论文| Visual place recognition: A survey from deep learning perspective

2021-Visual place recognition: A survey from deep learning perspective

Broadwell,Broadwell-IBRS,Broadwell-noTSX,Broadwell-noTSX-IBR之间的区别

Broadwell是Intel第五代微架构的处理器系列,基于14纳米制程技术,是对前代Haswell架构的工艺改进(即“Tick”阶段),主要特点是提高了能效和降低了功耗,同时在一定程度上提升了性能。它是为笔记本电脑、移动设…

Spring框架中的ClassUtils工具类深度解析

1. 概述 ClassUtils是Spring框架中提供的一个工具类,主要用于简化Java反射API的使用,提供了一系列便捷的方法来处理类相关的操作,比如获取类的包名、获取类的简单名称、判断类是否可实例化等。 2. 用途 ClassUtils的主要用途包括&#xff1…

一个快速在线生成二维码的工具,文件在线预览,在线报名,在线二维码设计,在线二维码生成器,扫一扫二维码在线预览

在数字化时代,二维码已经成为我们生活中不可或缺的一部分。无论是支付、身份识别,还是信息分享,二维码都以其便捷、高效的特点赢得了广大用户的青睐。然而,对于普通用户而言,如何快速、简单地生成和管理二维码却是一个…

5分钟掌握Pydantic

数据模型定义:使用 Python 类来定义数据模型,这些类可以自动将输入转换为 Python 数据类型。 from pydantic import BaseModelclass User(BaseModel):id: intname: stremail: str类型检查:Pydantic 强制执行类型检查,确保传入的数…

小旋风蜘蛛池优化版

下载地址:小旋风蜘蛛池.zip 配置的时候需要做伪静态 #如果用的是宝塔面板设置伪静态,则去掉 第一行 的 location / { 和最后一行的 } location / { rewrite ^/template/(.*)\.html$ /index.php last; rewrite ^/temp/(data|db|robotlog|tplrules|errp…

前端css中animation(动画)的使用

前端css中animation的使用 一、前言二、主要内容说明(一)、animation-name(名称)属性(二)、animation-duration(持续时间)属性1.前两个属性举例,源码12.源码1运行效果&am…

Redis线程模型

文章目录 💖 Redis 单线程模型⭐ 单线程监听大量的客户端连接⭐ Redis 6.0 之前为什么不用多线程? 💖 Redis多线程⭐ Redis 后台线程⭐ Redis 网络IO多线程 对于读写命令来说,Redis 一直是单线程模型。不过,在 Redis 4…

SinoDB数据库的RAW TABLE

RAW表是不记录日志的永久表,类似于无日志模式数据库中的表。对于RAW表,支持对其进行更新、插入和删除操作,但日志是不会记录这些操作。可以在RAW表上定义索引,但不能在RAW表上定义唯一约束、主键约束或引用约束(refere…

语音识别之特征提取与起始检测

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

关闭前端统一请求库设计与落地

前言 对于一个前端工程师而言,每天都在面对的较多的需求场景就是调用后端的接口,但是因为众所周知的原因,前端目前已经有无数种调用接口的方式,例如:之前有基于 XHR、Axios、Fetch 进行封装的工具,大家都试…

2-qt之信号与槽-简单实例讲解

前言、因实践课程讲解需求,简单介绍下qt的信号与槽。 一、了解信号与槽 怎样使用信号与槽? 概览 还记得 X-Window 上老旧的回调函数系统吗?通常它不是类型安全的并且很复杂。(使用)它(会)有很多…

prometheus+grafana的安装与部署及优点

一、Prometheus 的优点 1、非常少的外部依赖,安装使用超简单; 2、已经有非常多的系统集成 例如:docker HAProxy Nginx JMX等等; 3、服务自动化发现; 4、直接集成到代码; 5、设计思想是按照分布式、微服…

springboot webscoket示例:增加定时心跳逻辑

websocket服务端增加定时发送心跳机制 ServerEndpoint(value "/websocket/{uuid}") Component public class DevMessageHandleController {private static final Logger logger LoggerFactory.getLogger(DevMessageHandleController.class);//concurrent包的线程安…