CSS - 打破网格元素并在列中拉伸到最宽

Posted

技术标签:

【中文标题】CSS - 打破网格元素并在列中拉伸到最宽【英文标题】:CSS - Break grid elements and stretch to widest in column 【发布时间】:2021-02-25 09:25:07 【问题描述】:

我有一排有两个按钮,一个比另一个宽。如果视口变得太小,按钮应该“中断”,这意味着它们位于一列中。在这种情况下,较小的按钮应将其宽度拉伸到较宽按钮的宽度。

我准备了一个模拟我当前立场的代码笔:

.outer 
  display: flex;
  justify-content: center;


.inner 
  display: inline-grid;
  grid-template-columns: repeat(2, minmax(min-content, max-content));
  grid-gap: 16px;


button 
  border: none;
  background: transparent;
  padding: 10px 48px;


.stroke 
  border-bottom: 2px solid black;


.flat 
  background: black;
  color: white;
<div class="outer">
  <div class="inner">
    <button class="stroke">
      <span>WIDER BUTTON</span>
    </button>
    <button class="flat">
      <span>BUTTON</span>
    </button>
  </div>
</div>

https://codepen.io/simonmeier/pen/xxOMKQg

按钮中的文本是动态的,这意味着我不知道里面会有什么,所以“硬编码”宽度不起作用。

普通的 (s)css 可以做到这一点吗?

提前致谢。

【问题讨论】:

【参考方案1】:

您可以在容器上使用 flex 而不是 inline-grid。

然后通过应用flex-wrap: wrap;,如果不合适,内容将自动换行到下一行。

flex-grow: 1; 放在较小的按钮上,这样按钮就会变大以适应容器。

.outer 
  display: flex;
  justify-content: center;


.inner 
  display: flex;
  flex-wrap: wrap;
  margin: 0 -16px;


button 
  border: none;
  background: transparent;
  padding: 10px 48px;
  margin: 0 16px;


.stroke 
  border-bottom: 2px solid black;
  width: 300px;


.flat 
  background: black;
  color: white;
  width: 200px;
  flex-grow: 1;
<div class="outer">
  <div class="inner">
    <button class="stroke">
      <span>WIDER BUTTON</span>
    </button>
    <button class="flat">
      <span>BUTTON</span>
    </button>
  </div>
</div>

【讨论】:

工作正常,直到它坏了。 flex-grow: 1 的按钮延伸到视口的整个宽度,在我从 .flat 和 .stroke ...一个选项,因为我不知道文本会是什么【参考方案2】:

解决方案可以使用flex-wrap: wrap.inner 中的display 属性更改为flex,并将flex: 1 1 auto; 更改为您的button

如果您想对布局进行更多控制,请考虑使用@media queries。

.outer 
    display: flex;
    justify-content: center;


.inner 
    /*display: inline-grid;
    grid-template-columns: repeat(2, minmax(min-content, max-content));*/
    display: flex;
    flex-wrap: wrap;
    /*grid-gap: 16px;*/

button 
    border: none;
    margin: 8px;
    flex: 1 1 auto;
    background: transparent;
    padding: 10px 48px;


.stroke 
    border-bottom: 2px solid black;


.flat 
    background: black;
    color: white;
<div class="outer">
    <div class="inner">
        <button class="stroke">
            <span>WIDER BUTTON</span>
        </button>
        <button class="flat">
            <span>BUTTON</span>
        </button>
    </div>
</div>

【讨论】:

以上是关于CSS - 打破网格元素并在列中拉伸到最宽的主要内容,如果未能解决你的问题,请参考以下文章

包装css网格并拉伸一个网格项以占用所有空列[重复]

从定义了宽度和高度的代码中拉伸网格

使用 <canvas> 元素绘制的网格看起来被拉伸了

【PyQt】网格布局 QGridLayout

在列的可用空间中拉伸小部件

css中拖拽输入和选择的相关属性