如果你不是从一个Android转过来写前端的,你不知道安卓程序员对html中弹性布局有多么钟爱。我使用它,最多的场景,是他可以当成安卓布局中LinearLayout + weight的方式,按照比例,使得子元素,按照比例,分配父布局横向和纵向上(其他非使用权重控件占用后剩余的)的空间。

作为最常见的“盒子”元素“div”来说,当你指定了他display:flex,就意味着,你可以在水平方向上,通过指定子元素flex:n的形式,使得某个子元素的宽度,占整个父元素宽度的每个子元素n之和的分之n。
例如:父元素宽度360px,他有两个子元素,一个flex:1另外一个flex:2,那么,第一个元素的宽度,就是120px,第二个元素宽度是240px。关于flex布局详细使用规则,参见写的比较全面

我一直都是这么用的,然而,在最近的一次实践中,观察到了在弹性盒子嵌套 + 超长文字不折行且省略号展示时,弹性盒子的权重约束被破坏的现象。
文字超长+不折行+省略号展示css:

.single-line-ellipsis{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;
}

当flex没有嵌套时,single-line-ellipsis没有破坏弹性盒子的权重约束:

而当在弹性盒子嵌套,且文字超长时,弹性盒子的约束被破坏殆尽。(嵌套时,两个布局的结构完全一致,只是文字超长时,加了single-line-ellipsis单行)


个人感觉,这更像是内核一个渲染bug,解决办法是,给蓝色文字超长布局的max-length属性设置一个合适的值。

下面是实例代码,感兴趣的可以自己跑一跑,谷歌和火狐都是如此,调试模式是手机时,最为明显。

css

.clean-label {background-color: burlywood;display: block;font-size: 20px;width: 100%;color: aqua;
}
.height-appointed {background-color: chartreuse;display: block;font-size: 20px;width: 100%;height: 30px;color: darkorange;
}
.single-line-ellipsis{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;
}
.flex-container{display: flex;height: 90px;background-color: aqua;
}
.fragment-left{flex: 1;background-color: cadetblue;margin: 4px;
}
.fragment-right{display: flex;flex-direction: column;flex: 2;display: flex;background-color: violet;margin: 4px;
}
.item-container{display: flex;flex: 1;border: 1px solid black;
}
.item-left{flex: 1;background-color: khaki;margin-right: 4px;
}
.item-right{flex: 2;background-color: blue;
}
.block{display: block;
}

html

<html><head><meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0"><title>Prod</title><link rel="stylesheet" type="text/css" href="./index.css"><body>
<!-- span 如果没有指定高度,其高度会根据内容多少,自增长;如果指定了高度,但是高度不足以渲染内容,起会over fellow --><label class="clean-label">如果没有指定高度,其高度会根据内容多少,自增长;</label><label class="height-appointed">如果指定了高度,但是高度不足以渲染内容,起会over fellow</label><label class="clean-label" style="color: blueviolet;background-color: aquamarine;">Over fellow的部分,会和下面的元素重合。</label><label class="clean-label single-line-ellipsis">内容超长,不指定高度,但是指定单行,超出部分省略号展示;</label><h2>弹性盒子权重布局</h2><h4>弹性盒子非嵌套时</h4><label>正常的文字长度</label><div class="flex-container" style="height: 30px;"><div class="fragment-left"></div><label class="item-right block" style="color: yellow;margin: 4px;">正常的文字长度</label></div><label>超长的的文字长度,单行省略,不能破坏布局的约束效果;如果不加单行省略,则会overflow</label><div class="flex-container" style="height: 30px;"><div class="fragment-left"></div><label class="item-right block  single-line-ellipsis" style="color: yellow;margin: 4px;">超长的的文字长度,单行省略,不能破坏布局的约束效果;如果不加单行省略,则会overflow</label></div><h4>弹性盒子嵌套时</h4><label>正常的文字长度</label><div class="flex-container"><div class="fragment-left"></div><div class="fragment-right"><div class="item-container"><label class="item-left block"></label><label class="item-right block" style="color: yellow;">正常文字长度</label></div><div class="item-container"></div><div class="item-container"><label class="item-left block"></label><label class="item-right block" style="color: yellow;"></label></div></div></div><label>当文字超长,且加上单行省略时,布局约束效果被破坏</label><div class="flex-container"><div class="fragment-left"></div><div class="fragment-right"><div class="item-container"><label class="item-left block"></label><label class="item-right block" style="color: yellow;">正常文字长度</label></div><div class="item-container"></div><div class="item-container"><label class="item-left block"></label><label class="item-right block single-line-ellipsis" style="color: yellow;">当文字超长,且加上单行省略时,布局约束效果被破坏</label></div></div></div>
</body></html>

老牛不知所以然-html中超长文字单行省略对弹性盒子约束的破坏现象相关推荐

  1. 如何设置省略号对其序号 html,html 用css实现table中超长字符串省略号表示 - 天天好心情 - 博客园...

    最近学习样式,想用样式来控制GridView中超长字符的省略显示,可是网上从后台的方式是在让我诟病,当然,个人喜好问题:P  由于GridView最终是Table形式输出,于是从table实现该样式找 ...

  2. 移动常见问题--H5标签之浏览器兼容性、JS之浏览器兼容性、CSS3之浏览器兼容性、移动端动画、click300ms延迟、单行和多行文字溢出省略、水平居中和垂直居中

    1. H5标签之浏览器兼容性 在移动端时可以放心的使用h5相关的标签 但是如果需要兼容一些低版本的浏览器,例如IE6/7/8,此时可以到  [兼容] 下载一个 html5shiv.min.js  文件 ...

  3. html输入时提示文字消失,html中input文字框,初始里边有文字提示。当点选时,文字消失,怎么改?...

    html中input文字框,初始里边有文字提示.当点选时,文字消失,怎么改?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧 ...

  4. 怎么样在迅捷CAD编辑器的图中输入文字

    在随着CAD在日常生活中被使用的越来越多,CAD文件也变得越来越复杂.在一般的CAD图纸文件中都会是有这个文字的,因为我们需要使用不同的文本,来对CAD里的图案来进行不同的标注,那么该怎么在CAD文件 ...

  5. AutoLisp实现通过在图中选择文字对图形字体进行更改

    AutoLisp实现通过在图中选择文字对图形字体进行更改 问题的提出 每次接到一个AutoCad文件,总会遇到文件字体与自己系统里的文字字体不匹配的情况,导致每次都会通过字体设置对话框对不匹配的字体文 ...

  6. lisp 改图元字体式样_GitHub - OnRoadZy/ChangeFontStyle: AutoLisp实现通过在图中选择文字对图形字体进行更改。...

    AutoLisp实现通过在图中选择文字对图形字体进行更改 问题的提出 每次接到一个AutoCad文件,总会遇到文件字体与自己系统里的文字字体不匹配的情况,导致每次都会通过字体设置对话框对不匹配的字体文 ...

  7. 如何使用CAD编辑软件在图纸中添加文字

    我们在CAD编辑软件中对CAD建筑图纸进行查看的过程中,如何使用CAD编辑软件在图纸中添加文字呢?具体要怎么来进行操作呢?那相信很多的小伙伴们都想要知道,那下面小编就来教教大家具体的操作方法,本编教程 ...

  8. php替换视频教程,替换掉视频运动中的文字 | 修改视频文字的内容(附带软件与详细教程)...

    对于广告视频宣传,不知狸友们曾经是否有过这样的想法,利用借势营销的手段,将某段热门的视频影视片段修改成广告的内容,以达到热点广告的目的.在这个互联网比较发达的时代,广告形式各式各样,唯有创新或者比较突 ...

  9. word表格中部分文字显示不全文字右侧或底部不能完整显示

    文字上面好像被削了一样 缩小字体,段落--行距--固定值 调整一下就ok,这个就是段落的问题,调整一下行距就好了. 插入表格--在"自动调整"操作中--点上根据内容调整表格就可以了 ...

最新文章

  1. 在Windows7 下 mingw32 开发环境中采用 glut3.7 学习 OpenGL
  2. 2018-12-04-Python全栈开发-day92-自动登录
  3. 《MongoDB管理与开发精要》——3.2节查询语法
  4. ACM入门之【树状数组习题】
  5. binutils-2.22编译心得
  6. 一年中什么时候申请房贷最容易下款?
  7. 将你一张表的值覆盖_粉一张移动小蓝卡,智慧出行潮选择
  8. CTF杂项题解题思路与方法
  9. wps vba6.3 宏插件下载
  10. 联想电脑硬盘保护系统EDU8.0.1iso安装
  11. 手机淘宝APP怎么复制商品链接发送到微信公众号查询淘宝优惠券及淘宝返利?
  12. 进程、lwp(轻量级进程)和Java线程的理解
  13. MMDetection3D 1.1:统一易用的 3D 感知平台
  14. 四个好看的CSS样式表格
  15. c++中using的几种用法
  16. 涨握在线|马云接班人;外资取限;iPhone后继有人
  17. TCP的连接状态标识 (SYN, FIN, ACK, PSH, RST, URG)
  18. c#中在一个窗体中触发另一个窗体的事件
  19. Android Stuido环境搭建
  20. ssr Android简书,Vue 服务端渲染(SSR)

热门文章

  1. access查询两列信息合并输出_如何在Access中合并两个数据表中的数据
  2. java操作RabbitMQ
  3. 论文笔记-对话系统综述
  4. quartus ii 增量编译
  5. Overload resolution ambiguity. All these functions match. kotlin 开发问题日常记录
  6. 水平面上两直线垂直,且斜率都存在,分别为k1,k2,则k1·k2=-1
  7. 招投标行业114个数据源盘点
  8. (2018干货系列八)最新VR学习路线整合
  9. 汉谷拼形是克服“提笔忘字”最犀利的武器
  10. 教你如何从官网下载ipp,并在vs里面跑起来