display: flex
和 display: inline-flex
是 CSS 中的两种显示模式,它们都涉及到了 CSS 的一个模块,叫做弹性盒布局(Flexible Box Layout),简称 Flexbox。Flexbox 是一种一维布局方法,为盒状模型提供了更加灵活的排列方式。
display: flex
当你给一个元素设置 display: flex
属性时,这个元素会成为一个块级的弹性容器(flex container),意味着该元素将表现出块级元素的特性。具体来说,有以下几点:
- 块级元素特性:就像
display: block
的元素一样,display: flex
的元素会在页面中单独占据一行,前后都会有换行。 - Flex容器:该元素内部的直接子元素会成为弹性项目(flex items),并且这些子元素会按照 flex 模型进行排列,不再是默认的块级或者内联流。
- 布局控制:对于子元素,你可以使用 flexbox 提供的一系列属性来控制它们的对齐、方向、顺序等,例如
justify-content
,align-items
,flex-direction
,order
,flex-grow
等。
例如,如果你有一个导航栏或者一列卡片,可能会希望它们占满整个容器的宽度,并且希望它们能够灵活地伸缩以适应不同屏幕大小,那么 display: flex
就是一个很好的选择。
display: inline-flex
而当你使用 display: inline-flex
时,你的元素还是会成为一个弹性容器,但它表现为一个内联级的容器。这意味着:
- 内联元素特性:
display: inline-flex
的元素不会单独占据一行,它会像display: inline
元素一样,和其他内联元素或者文字在同一行流中排列,除非空间不足以容纳它。 - Flex容器:内部子元素的表现与
display: flex
一样,会成为弹性项目并根据 flexbox 属性进行排列。 - 排列特性:尽管
display: inline-flex
的元素在外部表现为内联元素,但内部子元素的排列仍然是一个完整的 flexbox 布局环境。
此时,display: inline-flex
适用于当你需要一个内容区块在文本流中表现为内联元素,同时还想在这个区块内部使用 flexbox 排列其内部元素。例如,一个小的工具条或按钮组可能就会使用到 display: inline-flex
。
总结
简单来说,最主要的区别在于外部的排列模式,display: flex
会让元素表现为块级元素,而 display: inline-flex
则是内联元素。选择哪个取决于你想如何在页面流中定位你的弹性容器以及其内部的元素。