前言

最难的果然还是css,工作中经常使用display:flex; 让多个竖直排列的元素变成横向排列,直到今天才发现display:flex; 会导致子标签的宽度失效。

正文

问题

<div class="outer">
    <div class="inner">1</div>
    <div class="inner">2</div>
    <div class="inner">3</div>
</div>

.outer {
    width: 300px;
    border: 1px solid black;
    overflow-x: auto;
    display: flex;

    .inner {
        width: 200px;
        height: 20px;
        background: pink;
        margin-right: 10px;
    }
}

按理说,父元素应该会出现横向滚动条,但实际结果如下:
在这里插入图片描述

原因

百度查了一下,原因如下:

父元素设置了display:flex,那么所有的子标签都会默认加上flex:0 1 auto;其中1 就是 flex中的 flex-shrink 属性,表示开启了元素的收缩功能,所以子元素宽度才会失效。

flex 属性是 flex-grow、flex-shrink 和 flex-basis 属性的简写属性。
flex的默认值就是 0 1 auto

在这里插入图片描述

解决

方法1

flex: 0 0 auto;
width: 200px;

方法2

flex: 0 0 200px;

方法3

flex-shrink: 0;
width: 200px;

方法4

min-width:200px;

效果
在这里插入图片描述

推荐使用方法3

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐