资讯专栏INFORMATION COLUMN

flex布局被子元素撑开,如何保持内容不超出容器

hearaway / 1936人阅读

摘要:而且因为设置了会发现文字会将撑开,导致内容超出了屏幕。尝试取消父元素的,无效。因此猜测是布局的问题,进一步猜测省略符需要对父元素限定宽度。

移动端里面,flex 布局很好用,它能够根据设备宽度来自动调整容器的宽度,但是最近在做项目的时候发现一个问题:

一个li里面设置了flex,flex: 0 0 33.333%,然后想让子元素里面的文字超出flex定义宽度后自动省略。

  • 小米小米小米小米小米小米小米小米小米小米小米小米

  • ul{
         display: flex;
    }
    li{
        -webkit-box-flex: 0;
        -ms-flex: 0 0 33.333%;
        flex: 0 0 33.333%;
        text-align: center;
        padding: 0 1.333vw;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
        margin-bottom: 2.667vw;
    }
    li p{
        font-size: 3.2vw;
        color: #8F8E94;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    这时候会发现,p的文字可能会非常长,一些设备下需要隐藏显示,即不换行,并留下省略符…作标记。
    这里会发现text-overflow: ellipsis不生效,省略符根本没有出现。而且因为设置了 nowrap 会发现文字会将 content 撑开,导致内容超出了屏幕。所以必须要解决这个问题。

    尝试取消父元素.li的flex: 0 0 33.33%,无效。 
    尝试取消ul容器的display: flex,省略号出现。

    因此猜测是flex布局的问题,进一步猜测省略符需要对父元素限定宽度。
    尝试对父元素li设置width: 100%无效,但是设置width: 0可行。即:

    li{
        flex: 0 0 33.333%;
        width: 0
    }

    如果不设置宽度,li可以被子节点无限撑开;因此p总有足够的宽度在一行内显示所有文本,也就不能触发截断省略的效果。测试还有一种方法可以达到效果:

    li{
        flex: 0 0 33.333%;
        overflow: hidden;
    }

    上面的二种方法都可以达到我们需要的效果,即给 li 设置了 flex 的值 的时候,它会动态的获得父容器的剩余宽度,且不会被自己的子元素把内容撑开。

    给html, body设置max-width,元素似乎能强行撑开页宽; 
    给body设置overflow,页宽不能被撑开了,但元素宽度还在,即元素本身还是溢出;
    给html, body同时设置max-width和overflow,页宽限定在max-width内,元素本身还是溢出;
    给.main容器设置overflow: hidden,同理.main是不溢出了,.notice本身还是溢出;
    给.notice元素设置width或max-width,虽然宽度受限,但在特定宽度下省略符…显示不全,有时只显示两个点..

    文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

    转载请注明本文地址:https://www.ucloud.cn/yun/114833.html

    相关文章

    • 常用CSS布局

      摘要:此时,是不好用的,因为它只能应用于清除左侧或右侧的浮动。而是傲娇的小公举,有她自己的布局规则内部的会在垂直方向,一个接一个地放置。用来在内部元素超出时显示进度条。这样在页面高度变化,或者内部的高度变化时,都始终可以保持正常的三行布局。 1.导航条垂直居中 导航条nav 从左到右分为 nav-left , nav-mid , nav-mid ,怎样达到从左到右依次排列,且全部垂直居中的效...

      mikasa 评论0 收藏0
    • 常用CSS布局

      摘要:此时,是不好用的,因为它只能应用于清除左侧或右侧的浮动。而是傲娇的小公举,有她自己的布局规则内部的会在垂直方向,一个接一个地放置。用来在内部元素超出时显示进度条。这样在页面高度变化,或者内部的高度变化时,都始终可以保持正常的三行布局。 1.导航条垂直居中 导航条nav 从左到右分为 nav-left , nav-mid , nav-mid ,怎样达到从左到右依次排列,且全部垂直居中的效...

      mozillazg 评论0 收藏0
    • Flex布局的总结与思考

      摘要:主轴方向的多余空间的出现是因为容器宽度元素项宽度之和。对空间分配的思考是如何计算项的宽度的所有项先按照原始宽度在容器中排列。开发时布局的一般流程根据设计,确定需要多少行来显示所有内容,然后确定每一行有哪些项。对每一项,定义其样式。 阅读本文之前最好对flex布局有基本了解,可以通过参考资料中列举的资源来学习。 flex布局规范的设计目标 一维布局模型(one-dimensional...

      springDevBird 评论0 收藏0
    • CSS6:flex布局

      摘要:主要用来做横向的布局。元素的布局学习我分成两个部分,第一个部分是元素布局。以下几个属性影响着元素的布局。详细还是看分钟彻底弄懂布局讲的非常明白。的时候,伸缩时需要考虑,按照进行等比例伸缩。布局套路学习布局教程实例篇 前言:这是我看过最好的flex布局教程:30分钟彻底弄懂flex布局 传统的布局方法与flex属性通览 showImg(https://segmentfault.com/i...

      Jioby 评论0 收藏0

    发表评论

    0条评论

    最新活动
    阅读需要支付1元查看
    <