css flex:1;详解,配合demo效果解答

news2025/1/19 13:10:23

前言

给设置了display:flex的子组件设置了flex:1;就能让他填满整个容器,如果有多个就平均

flex:1;是另外三个样式属性的简写,等同

flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;

 我们就针对上面3个属性结合代码来进行讲解

基本demo代码如下

css

 .flex{
            display: flex;
            width: 300px;
            height: 300px;
            border:1px solid red

        }
        .flex-item{
            border:1px solid blue;
            /**
                我们后面的css代码都放在这里
            **/
        }

html

<body>
    <div class="flex">
        <div class="flex-item"></div>
    </div>
</body>

效果

问题:交叉轴方向为什么子元素高度填满

为什么flex-item没有设置高度,但是他就等同容器交叉轴方向的高度呢

答案: 父容器align-items默认值是stretch

这是因为,display:flex;的容器默认设置了 align-items:stretch;设置了所有一级子元素在交叉轴方向的高度,如果给容器设置成align-items: flex-start;,就能看到没设置高度的子元素成了一个点,效果如下

 问题:为什么主轴方向元素宽度没有填满父容器

答案

因为子原始默认flex-grow为0,也就是即使有足够的空间,也不自动填充

修改

.flex-item{
            border:1px solid blue;
            flex-grow: 1;/*新增*/
}

效果:子元素主轴,交叉轴都填满了父容器

 第二个例子:子元素分割主轴宽度

添加一个新的子元素样式为

.item2{
            background-color: pink;
        }

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .flex{
            display: flex;
            width: 300px;
            height: 300px;
            border:1px solid red

        }
        .flex-item{
            border:1px solid blue;
            flex-grow: 1;
        }
        .item2{
            background-color: pink;
        }
    </style>
</head>
<body>
    <div class="flex">
        <div class="flex-item">1</div>
        <div class="flex-item item2" >2</div>
    </div>
</body>
</html>

预览效果

问题:为什么两个子元素宽度平均了父容器的宽度

答案

因为子元素设置了flex-grow:1;会根据子元素flex-grow的值来平均分配宽度,如果第二个设置了flex-grow:2;那第二个子元素,会占据1/3的宽度

第三个例子:子元素宽度相加超出了父容器宽度

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .flex{
            display: flex;
            width: 300px;
            height: 300px;
            border:1px solid red

        }
        .flex-item{
            border:1px solid blue;
            width:120px;
        }
        .item2{
            background-color: pink;
            width:200px;
        }
    </style>
</head>
<body>
    <div class="flex">
        <div class="flex-item">1</div>
        <div class="flex-item item2" >2</div>
    </div>
</body>
</html>

效果

问题:为什么子元素渲染后的宽度变小了

因为flex容器的一级子元素默认允许缩放,也就是flex-shrink:1;我们把css代码样式改为

.flex-item{
            border:1px solid blue;
            width:120px;
            flex-shrink: 0;/*新增*/
}

这时候,那容器就超出父元素了

第四个例子:flex-basis

样式修改

 .flex-item{
            border:1px solid blue;
            box-sizing: border-box;
        }
        .item2{
            background-color: pink;
            flex-basis:200px; /*新增代码*/
            width:100px;/*新增代码*/
        }

效果

 flex-basis设置了具体单位只后,width属性无效

那设置auto值呢

如果设置了width就读取width,否则子元素等于子元素自身的高度

其次子元素的宽度还会收到flex-grow和flex-shrink的影响

width属性的优先级别低于flex-grow和flex-shrink

第五个例子:容器呗子元素撑大

子元素嵌套display:flex的子元素容器子元素容器背它的子元素撑大,导致文本超出无法显示省略号

代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .flex {
            display: flex;
            width: 300px;
            height: 300px;
            border: 1px solid red
        }

        .flex-item {
            border: 1px solid blue;
            box-sizing: border-box;
            width: 100px;

        }

        .item2 {
            background-color: pink;
            flex-grow: 1;
            display: flex;
        }

        .innerbox {
            display: flex;
            flex: 1;
            outline: 2px solid brown;
            /* width: 100%; */
        }

        .innerbox .inner-item {
            /* width: 300px; */
            background-color: green;
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
            -o-text-overflow: ellipsis;

        }
    </style>
</head>

<body>
    <div class="flex">
        <div class="flex-item">1</div>
        <div class="flex-item item2">
            <div class="innerbox">
                <div class="inner-item">
                    12121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212
                </div>
            </div>
        </div>
    </div>
</body>

</html>

效果

解决

给子元素容器添加width:100%或者overflew:hidden;

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

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

相关文章

idea插件推荐——Bito提高编码效率

Bito是一款在IntelliJ IDEA编辑器中的插件&#xff0c;Bito插件是由ChatGPT团队开发的&#xff0c;它是ChatGPT团队为了提高开发效率而开发的一款工具。Bito插件的强大之处在于它可以帮助开发人员更快地提交代码&#xff0c;同时还提供了一些有用的功能&#xff0c;如自动补全提…

it设备综合监控系统

IT综合监控系统是一系列IT管理产品的总称&#xff0c;具有功能齐全、应用便捷、解决方案齐全的产品&#xff0c;可一站式服务满足消费者的各种IT管理需求。该产品涵盖网络管理、服务器管理、存储系统、安全管理等方面&#xff0c;可为企业提供对整个IT系统的全方位监控和管理。…

【UIPickerView案例06-省市选择界面数据展示02-省市显示到Label上 Objective-C语言】

一、接下来,我要把城市、省、显示到下面的Label上 1.但是呢,我们现在能拿到它的Label吗, 是不是也是一样的,拖线啊 切换到三视图、选择ViewController.m文件 在类扩展里面, 左边这个呢,按住Control键,拖进来, Name:provinceLbl, 右边这个呢,按住Control键,拖进来…

G1 收集器【JVM调优】

文章目录 1. 分区收集器2. G1 收集器 1. 分区收集器 ① G1&#xff1a;分区算法&#xff0c;物理上不分代&#xff0c;逻辑分代。每次只回收快满了的几个小区域&#xff0c;对于较大的 Eden 区&#xff0c;回收效率还不算很高&#xff1b; ② ZGC&#xff1a;分页算法&#xff…

JS 一维数组 和 二维数组之间的相互转换

JS 一维数组 和 二维数组之间的相互转换 二维数组转一维数组一、需求二、分析1. 方法一&#xff08;ES5&#xff09;2. 方法二&#xff08;ES6&#xff09;3. 方法三&#xff08;ES6&#xff09;3. 方法四&#xff08;ES5&#xff09;4. 特殊说明&#xff1a;flat()方法会移除数…

基于Java+SpringBoot+Vue前后端分离电商应用系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

streamlit执行报错WARNING,重新安装碰到问题如何解决

streamlit执行报错WARNING&#xff0c;重新安装碰到问题如何解决 如何解决1、卸载已经安装的程序2、再次安装程序3、出现如下yinstaller 警告问题&#xff1a;4、又出现“which is not on PATH”警告。5、解决方案 发现在安装的时候有很多WARNING出现&#xff0c;但是没有但回事…

C# OpenVino Yolov8 Detect 目标检测

效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using static System.Net.Mime.MediaT…

线性代数(六) 线性变换

前言 《线性空间》定义了空间&#xff0c;这章节来研究空间与空间的关联性 函数 函数是一个规则或映射&#xff0c;将一个集合中的每个元素&#xff08;称为自变量&#xff09;映射到另一个集合中的唯一元素&#xff08;称为因变量&#xff09;。 一般函数从 “A” 的每个元…

数字化时代,企业为什么要做数字化转型?

企业需要在数字时代进行数字化转型的原因是多方面的&#xff1a; 1.竞争优势&#xff1a;数字化转型使企业能够获得竞争优势。通过采用先进技术和数字化运营&#xff0c;他们可以提供创新的产品和服务&#xff0c;比竞争对手更快地满足客户不断变化的需求。 2.提高效率和降低…

删除单链表偶数节点

本题要求实现两个函数&#xff0c;分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下&#xff1a; struct ListNode { int data; struct ListNode *next; }; 函数接口定义&#xff1a; struct ListNode *createlist(); struct ListNode *deleteeven( …

cookies 设置过期时间

1.如何在浏览器中查看cookie过期时间 F12-Application-Cookies可以查看到网页所有设置cookie值&#xff0c; 如果设置了过期时间的cookie是可以看到过期时间的持久cookie&#xff08;persistent cookie&#xff09;&#xff0c; 没有设置过期时间的是会话cookie&#xff08;s…

Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

Linux ubuntu磁盘扩容

1.服务器添加硬盘 2.linux系统重启 reboot 3.查看分区大小 lsblk 4.分配空间 growpart /dev/sda 3 lvextend -l 100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

SpringBoot+Vue 的留守儿童系统的研究与实现,2.0 版本,附数据库、教程

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1.研究背景2. 技术栈3.系统分析4系统设计5系统的详细设计与实现5.1系统功能模块5.2管理员功能模块…

想考PMP,符合报名条件么?怎么报考?

报考PMP第一步就是了解报名条件&#xff1a; PMP考试如何报名&#xff1f; 先在PMI官网报英文报名&#xff0c;再在人才交流基金会上报中文报名以及缴费。 1、英文报名 PMP英文报名就是在PMI网站上提交对应的英文材料信息。不限时间&#xff0c;随时可以报名&#xff0c;报…

【2023高教社杯数学建模国赛】ABCD题 问题分析、模型建立、参考文献及实现代码

【2023高教社杯数学建模国赛】ABCD题 问题分析、模型建立、参考文献及实现代码 1 比赛时间 北京时间&#xff1a;2023年9月7日 18:00-2023年9月10日20:00 2 思路内容 可以参考我提供的历史竞赛信息内容&#xff0c;最新更新我会发布在博客和知乎上&#xff0c;请关注我获得最…

原生js之dom与setInterval/settimeout结合实现动画

动画效果如何实现 那么好,这次我们要讲解的就是利用dom事件和定时方法来实现一个简单的动画效果. 实现这个效果,一共分为三个步骤: 1.实现效果 2.实现点击切换位置 3.实现动画效果 样式 两个div,一个父div,一个子div,用positionrelativeabsolute定位实现左上角效果,两个按钮…

企业如何制定实施MES管理系统的预算方案

随着制造业的不断发展&#xff0c;MES生产管理系统逐渐成为制造企业提高生产效率、优化资源利用和提升质量水平的重要工具。制定实施MES管理系统的预算方案是企业在进行MES选型和实施时必须考虑的问题。本文将介绍制定实施MES管理系统预算方案的关键步骤&#xff0c;包括成本构…

数据结构与算法(六)树的入门

树的基本定义 树是我们计算机中非常重要的一种数据结构&#xff0c;同时使用树这种数据结构&#xff0c;可以描述现实生活中的很多事物&#xff0c;例如家谱、单位的组织架构、等等。 树是由n&#xff08;n>1&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做“…