如何让弹性容器收缩到最小的合理尺寸?
how to make flex container to shrink to a smallest reasonable size?
我有一个按钮,它是带有两个项目的 flexcontainer。
.flex-container {
display: flex
column-gap: 1rem
align-items: center
margin-right: 10rem /* just for illustration sake */
cursor: pointer
&:hover
opacity: 0.6
}
尽管项目不会拉伸,但它会连续占用所有可用的 space。问题是,当用户从按钮指向右侧时,它的反应就像鼠标在按钮上一样。我希望 flexbox 容器在第二个项目之后结束。它是怎么做到的?
margin-right: auto
无效
尝试使用 display: inline-flex
,这将使它成为一个像行内元素一样呈现的弹性容器。
更新:- 我添加了两种 flex 显示效果的演示。需要意识到的重要一点是,flex 行为是在 flex-container 的子级上进行的,并且两种类型的 flex 之间的布局没有区别。
区别在于父容器相对于周围页面内容的呈现方式。使用 display: flex
- 容器呈现为具有弹性子元素的块级元素。使用 display: inline-flex
- 容器呈现为具有弹性子元素的内联级别元素。
.flex-container {
display: flex;
align-items: center;
border :solid 1px red; /* just for illustration sake */
cursor: pointer;
padding: 0 8px;
}
.inline-flex-container {
display: inline-flex;
align-items: center;
border:solid 1px blue; /* just for illustration sake */
cursor: pointer;
padding: 0 8px;
}
.caret {
width: 0;
height: 0;
border-style: solid;
border-width: 5px 5px 0 5px;
border-color: #000000 transparent transparent transparent;
display: inline-block;
margin-left: 6px;
top: 0;
position: relative;
}
<p>Display: flex (causes a block-level parent container and flexed children)</p>
<div class="flex-container">
<button type="button">Button</button>
<span class="caret"></span>
</div>
<hr/>
<p>Display: inline-flex (causes an inline-level parent container and flexed children</p>
<div class="inline-flex-container">
<button type="button">Button</button>
<span class="caret"></span>
</div>
您可以在 flex 容器上使用 width: max-content
。这将使容器的宽度与其内容匹配。
这类似于 gavgrif 的回答,但这不会建立内联格式化上下文。这对您的用例可能重要,也可能不重要。
我有一个按钮,它是带有两个项目的 flexcontainer。
.flex-container {
display: flex
column-gap: 1rem
align-items: center
margin-right: 10rem /* just for illustration sake */
cursor: pointer
&:hover
opacity: 0.6
}
尽管项目不会拉伸,但它会连续占用所有可用的 space。问题是,当用户从按钮指向右侧时,它的反应就像鼠标在按钮上一样。我希望 flexbox 容器在第二个项目之后结束。它是怎么做到的?
margin-right: auto
无效
尝试使用 display: inline-flex
,这将使它成为一个像行内元素一样呈现的弹性容器。
更新:- 我添加了两种 flex 显示效果的演示。需要意识到的重要一点是,flex 行为是在 flex-container 的子级上进行的,并且两种类型的 flex 之间的布局没有区别。
区别在于父容器相对于周围页面内容的呈现方式。使用 display: flex
- 容器呈现为具有弹性子元素的块级元素。使用 display: inline-flex
- 容器呈现为具有弹性子元素的内联级别元素。
.flex-container {
display: flex;
align-items: center;
border :solid 1px red; /* just for illustration sake */
cursor: pointer;
padding: 0 8px;
}
.inline-flex-container {
display: inline-flex;
align-items: center;
border:solid 1px blue; /* just for illustration sake */
cursor: pointer;
padding: 0 8px;
}
.caret {
width: 0;
height: 0;
border-style: solid;
border-width: 5px 5px 0 5px;
border-color: #000000 transparent transparent transparent;
display: inline-block;
margin-left: 6px;
top: 0;
position: relative;
}
<p>Display: flex (causes a block-level parent container and flexed children)</p>
<div class="flex-container">
<button type="button">Button</button>
<span class="caret"></span>
</div>
<hr/>
<p>Display: inline-flex (causes an inline-level parent container and flexed children</p>
<div class="inline-flex-container">
<button type="button">Button</button>
<span class="caret"></span>
</div>
您可以在 flex 容器上使用 width: max-content
。这将使容器的宽度与其内容匹配。
这类似于 gavgrif 的回答,但这不会建立内联格式化上下文。这对您的用例可能重要,也可能不重要。