Flexbox不给与元素相同的宽度
尝试flexbox导航,最多有5个项目,只有3,但它没有在所有元素之间平分宽度。
小提琴
我正在build模的教程是http://www.sitepoint.com/responsive-fluid-width-variable-item-navigation-css/
上海社会科学院
* { font-size:16px; } .tabs { max-width: 1010px; width:100%; height: 5rem; border-bottom:solid 1px grey; margin:0 0 0 6.5rem; display: table; table-layout:fixed; ul { margin:0; display: flex; flex-direction: row; li { flex-grow:1; list-style:none; text-align:center; font-size:1.313rem; background: blue; color: white; height: inherit; left:auto; vertical-align:top; text-align:left; padding:20px 20px 20px 70px; border-top-left-radius: 20px; border:solid 1px blue; cursor:pointer; &.active { background: white; color: blue; } &:before { content:""; } } } }
HTML
<div class="tabs"> <ul> <li class="active" data-tab="1">Pizza</li> <li data-tab="2">Chicken Noodle Soup</li> <li data-tab="3">Peanut Butter</li> <li data-tab="4">Fish</li> </ul> </div>
文章中没有提及您链接的一个重要位置,这个位置是flex-basis
。 默认情况下, flex-basis
是auto
。
从规格 :
如果指定的弹性基础是自动的,则使用的弹性基础是弹性项目的主要尺寸属性的值。 (这本身可以是关键字auto,它根据其内容来确定Flex项目的大小。)
每个弹性项目都有一个flex-basis
,这是有点像它的初始大小。 然后从这些项目中剩余的空闲空间按比例分配(基于flex-grow
)。 对于auto
,这个基础是内容的大小(或定义的width
等)。 因此,在您的示例中,文本中文本较大的项目会获得更多空间。
如果你想要你的元素是完全平坦的,你可以设置flex-basis: 0
。 这会将弹性基础设置为0,然后基于flex-grow
将剩余空间(这将是所有空间,因为所有基础都为0)按比例分配。
li { flex-grow: 1; flex-basis: 0; /* ... */ }
规范中的这个图表很好地说明了这一点。
这是你的小提琴的一个工作的例子 。
要使用Flex创build具有相同宽度的元素,您应该设置为您的子元素(弹性元素):
flex-grow:0;
弹性基础:25%;
它会给行25%宽度的所有元素。 他们不会一个一个地长大。