有一个similar question处理的input
元素具有由size
参数确定的固有最小宽度。
我正在尝试设计一种布局,其中有一个inline-flex
带有flex-direction: column
的块,如下所示:
.item {
border: 1px solid gray;
display: inline-flex;
flex-direction: column;
}
<div>
<div class="item">
short
<progress />
</div>
<div class="item">
long on long so long yes long very long certainly longer than the default width of a progress
<progress />
</div>
</div>
<p>
I want the first progress to be as long as the text "short" is.
</p>
当文本较长时,progress
会正确地沿可用宽度延伸,该宽度由文本的长度决定,因为父级div
为inline-flex
,所以它本身不会t在其父级中水平拉伸。
但是,当文本很短时,progress
不会收缩到与文本相同的长度。相反,它保持在某个最低值(可能是UA特定的)。我可以使用width
来影响其宽度,但是除了需要一个固定的数字外,我还需要它跟随文本的开头并复制其宽度。
对于链接的问题中的input
,可以设置一个小的size
并解决问题,但是对于progress
,不存在这样的属性。
是否有一种解决此布局问题的方法,以便进度宽度始终遵循文本宽度?
答案 0 :(得分:1)
请注意,在撰写本文时,以下解决方案适用于Chrome和Edge,但不适用于Firefox。
将此添加到您的代码中:
progress { width: auto }
现在progress
元素将跟踪其内联级别父级的宽度。
浏览器在progress
元素上设置默认宽度。 Chrome使用width: 10em
。
通过设置自己的宽度,您可以覆盖默认值。
.item {
border: 1px solid gray;
display: inline-flex;
flex-direction: column;
}
progress {
width: auto;
}
<div>
<div class="item">
short
<progress></progress>
</div>
<div class="item">
long on long so long yes long very long certainly longer than the default width of a progress
<progress></progress>
</div>
</div>
<p>I want the first progress to be as long as the text "short" is.</p>
答案 1 :(得分:1)
除了Michael_B答案,这里还有另一个 hack ,它将强制progress
标签的宽度为100%
,并且也可以在firefox上使用:
.item {
border: 1px solid gray;
display: inline-flex;
flex-direction: column;
}
progress {
width: 0;
min-width: 100%;
}
<div>
<div class="item">
short
<progress></progress>
</div>
<div class="item">
long on long so long yes long very long certainly longer than the default width of a progress
<progress></progress>
</div>
</div>
<p>I want the first progress to be as long as the text "short" is.</p>