flex布局中的文本溢出(text-overflow:ellipsis)问题

flex的文本溢出问题

使用flex布局的时候经常需要使用文本溢出,但有时候会发现文本溢出并没有效果,百度也没有明确的答案,谷歌了下,找到了一篇解释的不错的文章 The Mystery of CSS Flex Item Shrink,令人豁然开朗,可以访问外网的朋友可以去看原文,方便其他朋友,我简单翻译解释下。

css中flex item 收缩的秘密

flex布局的背景知识

flex布局为我们在不知道子元素尺寸或者子元素尺寸是动态的情况下进行布局提供了一个十分高效的方法,所以叫做flex
在flex布局中,子元素会根据剩余空间进行自动伸缩以避免溢出,尤其是在与方向无关的策略中。

子元素的收缩问题

作为前端开发,我们经常需要在文字超出容器宽度时截取文字并用省略号表示,以避免破坏UI布局的需求,这种情况在移动端尤其普遍

当文本溢出时为了截取文字显示省略号我们可以这样做:

<div class="parent">
  <div class="child">
    <p class="truncate">
      I won't shrink past my minimum intrinsic width, but I probably       should.
    </p>
  </div>
  
  <div class="child">
    <p class="truncate">
      I won't shrink past my minimum intrinsic width, but I probably  should.
    </p>
  </div>
</div>

.parent {
  display: flex;
  
  padding: 1rem;
  background: #C5EFF7;
  border: 2px solid rgba(0, 0, 0, 0.3);
  max-width: 70%;
  margin: 2rem auto;
}
.child {
  border: 6px dashed rgba(0, 0, 0, 0.3);
  margin: 5px;
}
.truncate  {
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

结果
在这里插入图片描述
令人意外的是结果并不像我们想的那样,并且我们没有任何明显的遗漏或错误的flex样式设置
所以为什么flex item 不会忽视他们的内容尺寸进行收缩呢?

flex item的自动最小尺寸

这里我们遇到了一个flex盒子的默认设置问题
flex item的自动最小尺寸:
为了给flex item提供一个合理的默认最小尺寸,flex将flex item的min-width 和 min-height属性设置为了auto

我们可以这样理解auto:
如果flex item的overflow属性在主轴上是visible,那么它的min-size属性将被设置为自动最小尺寸,否则将会计算为0

换句话说,flex item的默认设置为
min-width: auto 水平flex布局
min-height:auto 垂直flex布局

所以我们需要注意这点,flex item在主轴方向上不会比他的内容尺寸还小,这是因为浏览器是根据内容的宽度来计算默认的min-width或者min-height的

解决方法

  1. 分别显式的覆盖flex item的默认设置
    min-width:0 水平布局
    min-height:0 垂直布局
    根据上面的demo我们可以在子item上加点样式,让文本溢出正常显示
.child {
  border: 6px dashed rgba(0, 0, 0, 0.3);
  margin: 5px;
  
  min-width: 0
}

结果
在这里插入图片描述
2.或者,我们也可以将overflow的值设置为visible以外的其他值,如 overflow: hidden

根据flex布局的规则,只有主轴方向上overflow为visible的item上其min-width和min-height 才会被设置为auto,否则min-size属性将会设置为0

这就是为什么我们可以使用overflow:hidden 来实现同样效果的原因,因为overflow:hidden同样也会将min-size设置为0

.child {
  border: 6px dashed rgba(0, 0, 0, 0.3);
  margin: 5px;
  
  overflow: hidden
}

结果
在这里插入图片描述
总结

  • min-width:auto和min-height:auto默认值仅当flex item的overflow属性为visible时才生效
  • 元素自动计算的最小宽度或高度不会比它的内容尺寸小
  • 如果overflow的值不是visible,那么min-size属性将会被设置成0
  • 所以,overflow:hidden 也可以当作min-width:0或min-height:0的代替解决方案
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值