flex 子元素设置了 flex: 1,为什么还是被长内容撑宽了?

Mores小栋博客!

左右两栏布局,右栏设置了 flex: 1。右栏里有一段很长的链接(或者一个宽表格)时,右栏会超出容器,把整个页面撑出横向滚动条。不是应该占据剩余空间吗?

回答 1阅读 0

1 个回答

  1. Mores小栋博客!

    原因在于 flex 子元素的 min-width 默认值是 auto:子元素不会收缩到比它内容的最小宽度更窄。一段没有空格的长链接,最小宽度就是它的整个长度,于是 flex: 1 也压不住它。

    给这个子元素加上 min-width: 0 就行:

    CSS
    .main {
      flex: 1;
      min-width: 0;
    }

    然后再按内容决定怎么处理溢出:

    • 长链接、长单词:overflow-wrap: anywhere; 允许在任意位置换行。
    • 表格、代码块:外面包一层 overflow-x: auto 的容器,让它在自己的区域里横向滚动。

    grid 布局里也有同样的现象:1fr 的最小值同样是 auto。把列写成 minmax(0, 1fr) 就能解决。

0 条回复

A文章作者M管理员
上传评论图片

暂无讨论,说说你的看法吧