flex设置为1后为什么要设置width为0,和布局超出省略号为什么会超出容器,为什么会没有用

news2024/12/28 3:11:53

前言

  • 最近在做手机端的页面,制作过程出现了flex布局的一些问题,再次记录在解决办法
  • 关于在flex:1的情况下设置为width的效果
    • 如果没有设置width,当内部元素的内容大小超过平均分配的剩余空间时,元素的宽度等于内容大小,如果设置了width并且这个width的大小小于平均分配的剩余空间大小时,取平均分配的剩余空间;当flex设置为 1 时 相当于 剩余空间大小 = 父元素的宽度 因此平均的剩余空间大小等于 = 父元素的宽度 / 元素的个数,直接设置width为0可以保证元素宽度平分父元素宽度
    • 说简单点就是设置了flex:1的情况下不设置width:0,那么就会导致父元素宽度等于等元素的宽度,而不会等于剩下空间的长度,这样子就会超出空间了
    • 具体可看@地址

最终效果

  • 可以看到,完成了基本布局和超出显示省略号的功能

开始

  • 有时候我就感觉很奇怪,为什么有的用margin,有的用padding,后面才知道,margin是透明的,填充不会被填充到,padding则会被填充

  • 开启flex在主内容区域,并设置每一个item项目高度为80px

  • 稍加完善就成为了这样子,注意,此时还没有设置超出显示省略号的效果
  • 此时的代码
*{
  margin: 0;
  padding: 0;
}
:root{
  --self-top:50px;
  --self-bottom:40px;
  --self-leftTab:60px;
}
.wrapper{
  width: 100%;
  //顶部,一般是搜索栏
  .top{
    height: var(--self-top);
    background-color: red;
  }
  .main{
    display: flex;
    flex-flow: row nowrap;
    background-color: gray;
    //计算剩余高度,当然,后期计算可能需要通过js来手动计算
    height: calc(100% - var(--self-top) - var(--self-bottom));
    // 左侧,一般是分栏,用于切换不同栏目,一般是固定的宽度
    .main-left{
      width: var(--self-leftTab);
      background-color: aquamarine;
    }

    //右侧,一般是数据展示,才用flex布局一般,手机不用flex布局是否可用
    .main-right{
      display: flex;
      flex-flow: column wrap;
      flex: 1;//让其子元素占满
      //每一个的item项目
      &-item{
        height: 80px;//假设为80px
        background-color: brown;
        margin-bottom: 10px;
        /* 假设这是一个描述信息 */
        &_description{
          white-space: nowrap;
          text-overflow:ellipsis;
          overflow: hidden;
        }
      }
    }
  }
  /* 底部一般是底部导航,一般会固定高度 */
  .bottom{
    height:var(--self-bottom);
    background-color: hotpink;
  }
}
  • 这样子写看上去没有什么问题,但是如果item项的描述信息过多的时候,就会导致下面动图演示的问题了
    • 可以看到,随着超人字段的增加,左侧tab栏被挤压了

  • 这个时候只需要设置类名为main-right的div宽度为0即可(也就是设置item项的外层div容器宽度为0),就恢复正常了
.main-right{
      display: flex;
      flex-flow: column wrap;
      flex: 1;
      width: 0; //重点,避免挤压其他的
      &-item{
      	.....
       }
}
恢复正常了
  • 但是依旧没有省略号,那是因为没有约束每一个item项的宽度,导致item项的宽度会被子元素撑开,这里约束下就好
 .main-right{
      display: flex;
      flex-flow: column wrap;
      flex: 1;
      width: 0;//避免挤压左侧tab栏
      &-item{
       	//....
       	//设置item的宽度为父元素100%
       	//避免被挤压
        width: 100%;
      }
}
  • 完成

完整代码

  • 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>
  <link rel="stylesheet" href="./1.css">
</head>
<body>
  <div class="wrapper">
    <div class="top">顶部</div>

    <div class="main">
      <div class="main-left">

      </div>
      <div class="main-right">
        <div class="main-right-item">
          <div class="main-right-item_description">我是描述我是描述我是描述我是描述我是描述我是描述我是描述我是描述我是描述我是描述我是描述我是描述我是描述我是描述我是描述</div>
        </div>
        <div class="main-right-item">
          <div class="main-right-item_description">我是描述我是描述我是描述我是描述我是描述</div>
        </div>
        <div class="main-right-item">
          <div class="main-right-item_description">我是描述我是描述我是描述我是描述我是描述</div>
        </div>
      </div>
    </div>

    <div class="bottom">底部</div>
  </div>
</body>
</html>
  • less代码
*{
  margin: 0;
  padding: 0;
}
:root{
  --self-top:50px;
  --self-bottom:40px;
  --self-leftTab:60px;
}
.wrapper{
  width: 100%;
  //顶部,一般是搜索栏
  .top{
    height: var(--self-top);
    background-color: red;
  }
  .main{
    display: flex;
    flex-flow: row nowrap;
    background-color: gray;
    //计算剩余高度,当然,后期计算可能需要通过js来手动计算
    height: calc(100% - var(--self-top) - var(--self-bottom));
    // 左侧,一般是分栏,用于切换不同栏目,一般是固定的宽度
    .main-left{
      width: var(--self-leftTab);
      background-color: aquamarine;
    }

    //右侧,一般是数据展示,才用flex布局一般,手机不用flex布局是否可用
    .main-right{
      display: flex;
      flex-flow: column wrap;
      flex: 1;//让其子元素占满
      width: 0;
      //每一个的item项目
      &-item{
        height: 80px;//假设为80px
        background-color: brown;
        margin-bottom: 10px;
        width: 100%;
        /* 假设这是一个描述信息 */
        &_description{
          white-space: nowrap;
          text-overflow:ellipsis;
          overflow: hidden;
        }
      }
    }
  }
  /* 底部一般是底部导航,一般会固定高度 */
  .bottom{
    height:var(--self-bottom);
    background-color: hotpink;
  }
}
  • less编译后的css代码
* {
  margin: 0;
  padding: 0;
}
:root {
  --self-top: 50px;
  --self-bottom: 40px;
  --self-leftTab: 60px;
}
.wrapper {
  width: 100%;
  /* 底部一般是底部导航,一般会固定高度 */
}
.wrapper .top {
  height: var(--self-top);
  background-color: red;
}
.wrapper .main {
  display: flex;
  flex-flow: row nowrap;
  background-color: gray;
  height: calc(100% - var(--self-top) - var(--self-bottom));
}
.wrapper .main .main-left {
  width: var(--self-leftTab);
  background-color: aquamarine;
}
.wrapper .main .main-right {
  display: flex;
  flex-flow: column wrap;
  flex: 1;
  width: 0;
}
.wrapper .main .main-right-item {
  height: 80px;
  background-color: brown;
  margin-bottom: 10px;
  width: 100%;
  /* 假设这是一个描述信息 */
}
.wrapper .main .main-right-item_description {
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
.wrapper .bottom {
  height: var(--self-bottom);
  background-color: hotpink;
}
/*# sourceMappingURL=./1.css.map */

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

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

相关文章

[Linux] 如何查看内核 Kernel 版本(查多个Kernel的方法)

上图来源于&#xff1a;turnoff.us&#xff0c;描述了Linux内核结构&#xff0c;有兴趣的同学可以访问原址看看 文章目录什么是Linux内核查看Linux内核Kernel的场景情况查看 Kernel 的几种方式1、使用 uname2、使用 hostnamectl 命令3、查看 /proc/version4、使用 rpm 命令5、使…

2.9 场景式文案,原来是这样子写的【玩赚小红书】

人的生活&#xff0c;就是一个场景连着另一个场景&#xff0c;循环往复&#xff0c;朝朝暮暮。 文案&#xff0c;只要切入了用户的场景&#xff0c;就可以切入他的生活&#xff0c;进而切入他的心。 什么是「 场景化文案」 &#xff1f;可以看一组对比&#xff1a; 非场景文…

Tomcat的概述、部署、优化

文章目录一、Tomcat概述1、Tomcat的概念2、Tomcat的核心组件3、Java Servlet 的概念4、JSP的概念5、Tomcat顶层架构6、Container 结构分析:7、Tomcat请求过程二、Tomcat服务部署1、Tomcat服务部署的步骤1.1 关闭防火墙&#xff0c;将安装 Tomcat 所需软件包传到/opt目录下1.2 安…

C语言第十课(上):编写井字棋游戏(综合练习1)

目录 前言&#xff1a; 一、文件建立&#xff1a; 1.头文件game.h&#xff1a; 2.函数定义文件game.c&#xff1a; 3.工程测试文件test.c&#xff1a; 二、编写井字棋游戏&#xff1a; 1.程序整体执行思路&#xff1a; 2.menu菜单函数实现&#xff1a; 3.game游戏函数逻辑&am…

Linux环境下基于VSCode和CMake实现C/C++开发

layout: post title: Linux环境下基于VSCode和CMake实现C/C开发 description: Linux环境下基于VSCode和CMake实现C/C开发 tag: 开发工具 文章目录Linux开发环境Linux目录结构常用指令选项ls&#xff1a;list directory contentscd&#xff1a;change directorytouch&#xff1a…

【附源码】计算机毕业设计JAVA校园讲座管理

【附源码】计算机毕业设计JAVA校园讲座管理 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybati…

linux驱动之mmap地址映射

应用场景 首先在linux中应用程序无法是直接访问驱动程序的数据的, 需要通过 copy_to_user 和 copy_from_user才能实现数据传输, 那么数据量大了以后如LCD的数据, 那么就会有很长的耗时, 为了解决这一问题, 引入mmap, 将底层物理地址映射出来, 让应用程序得以直接读写这一块内存…

Linux进程控制(下)--->进程程序替换

文章目录什么是进程程序替换为什么要进行进程程序替换怎么进行进程程序替换execlexecvexeclpexecvpexecleexecvpe使用c的可执行程序调用一个python脚本如何理解进程程序替换进程程序替换接口的返回值从进程独立性体会程序替换什么是进程程序替换 在讲进程程序替换之前&#xf…

[附源码]java毕业设计兰州市邮政公司新邮预订户管理信息系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

计算机毕业设计springboot+vue+elementUI在线漫画周边销售购物交流系统

项目介绍 任何系统都要遵循系统设计的基本流程&#xff0c;本系统也不例外&#xff0c;同样需要经过市场进行调研&#xff0c;漫画需求进行分析&#xff0c;概要设计&#xff0c;系统详细设计&#xff0c;测试和编码等步骤&#xff0c;设计并实现了“漫画之家”系统 。系统选用…

web前端设计与开发期末作品_期末大作业-疫情

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业&#xff0c;击疫情致敬逆行者感人类题材 | 致敬逆行者网页设计作品 | 大学生抗疫感动专题网页设计作业模板 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a…

大一学生Web课程设计 红酒美食主题网页制作(HTML+CSS+JavaScript)

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 茶文化网站 | 中华传统文化题材 | 京剧文化水墨风书画 | 中国民间年画文化艺术网站 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运…

通用后台管理系统前端界面Ⅵ——首页、登录页、404页面

登录页 1、为了方便起见&#xff0c;先将element-ui的使用改为全局引入的方式。修改main.js文件如下&#xff1a; import Vue from vue import App from ./App.vue import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css //这个是局部引入&#xff0…

idea创建javaweb项目步骤超详细(2022最新版本)

目录 前言&#xff1a; 一、新建文件 1.在idea里面点击文件-新建-项目 2.新建项目-更改名称为自己想要的项目名称-创建 3.右键自己建立的项目-添加框架支持 4.勾选Web应用程序-确定 5.建立成功界面 二、配置tomcat 6.点击添加配置文件 7.点击这个 8.选择这个tomcat的本…

数据分析利器:XGBoost算法最佳解析

XGBoost是一种经典的集成式提升算法框架&#xff0c;具有训练效率高、预测效果好、可控参数多、使用方便等特性&#xff0c;是大数据分析领域的一柄利器。在实际业务中&#xff0c;XGBoost经常被运用于用户行为预判、用户标签预测、用户信用评分等项目中。XGBoost算法框架涉及到…

javaWeb项目基于tomcat运行部署后访问方案总结

javaWeb项目基于tomcat运行部署后访问方案总结 1.需求背景 最近接到一个老项目,这个是一个前后没有分离的java+jsp项目,所以前后端的代码是在一个项目里面的,因此在这个项目上开发就需要面临第一个问题:启动运行项目。简介:Java Web,是用Java技术来解决相关web互联网领域…

字符串的算法题目-字符串

题目一&#xff1a; 描述 对于一个长度为 n 字符串&#xff0c;我们需要对它做一些变形。 首先这个字符串中包含着一些空格&#xff0c;就像"Hello World"一样&#xff0c;然后我们要做的是把这个字符串中由空格隔开的单词反序&#xff0c;同时反转每个字符的大小写…

【Java】数组中值得说的那些事

文章目录前言一、数组的创建及初始化&#x1f333;1、数组的创建&#x1f333;2、数组的初始化&#x1f351;&#xff08;1&#xff09;动态初始化&#x1f351;&#xff08;2&#xff09;静态初始化二、数组的使用&#x1f333;1、数组中元素访问&#x1f333;2、遍历数组&…

力扣LeatCode算法题-两数之和(二)

力扣算法题第二题&#xff0c;两数相加算法题&#xff1a; 要求&#xff1a; //给出两个 非空 的链表用来表示两个非负的整数。其中&#xff0c;它们各自的位数是按照 逆序 的方式存储的&#xff0c;并且它们的每个节点只能存储 一位 数字。 //如果&#xff0c;我们将这两个数…

企业使用有线和5G主备双链路上网配置案例

场景介绍 典型的企业分支通常还是采用有线链路作为主链路&#xff0c;例如以太链路、MPLS专线等。为了提升分支站点的可靠性&#xff0c;企业一般都会部署两条上行链路&#xff0c;一条为主链路&#xff0c;一条为备链路。如果两条上行链路都采用有线&#xff0c;成本会比较高&…