【问题标题】:How to make flex container width adapt to the width (and numbers) of flex items?如何使弹性容器宽度适应弹性项目的宽度(和数量)?
【发布时间】:2021-09-06 02:03:38
【问题描述】:

我有一个 CSS 问题。我不确定有没有一种方法可以为我的布局做我想做的事情(一种只使用 CSS 的方法):

我有一个主容器(flex display,column nowrap flex-flow),里面有一个搜索栏和一个辅助容器。在我的辅助容器(flex display、row wrap flex-flow)中,我有几张卡片。这些卡片的宽度是固定的。

我想要的是让我的辅助容器在我的页面上居中,宽度适合其更大的行,并且顶部的搜索栏与这个辅助容器具有相同的宽度。

我似乎无法使辅助容器宽度适应,它保持窗口的宽度。

<div class="mainContainer">
  <input type="search" placeholder="search" id="search"/>
  <div class="secondaryContainer">
     {returningCards()}
  </div>
</div>

(returningCards 函数返回我的卡片)

.mainContainer {
  width: 100%;
  height: fit-content;
  min-height: 200px;
  padding: 1rem;
  display: flex;
  flex-flow: column nowrap;
  justify-content: flex-start;
  align-items: center;
  row-gap: 1rem;
  column-gap: 0.5rem;
}
#search {
  width: 100%;
  height: 2rem;
  background-color: var(--Mwhite);
  border: 0.05rem solid var(--Mdefault);
  border-radius: 0.5rem;
  color: var(--Mdefault);
  padding: 0 0 0 0.5rem;
  outline: 0.05rem solid transparent;
  transition: outline 0.5s;
}
.secondaryContainer {
  width: 100%;
  display: flex;
  flex-flow: row wrap;
  justify-content: flex-start;
  align-items: flex-start;
  row-gap: 1rem;
  column-gap: 0.5rem;
}
.card {
  background-color: var(--Mwhite);
  border: 0.05rem solid var(--Mdefault);
  width: 12.5rem;
  height: fit-content;
  min-height: 16.25rem;
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  justify-content: space-between;
  box-shadow: var(--Mdefault) 0 0 0;
  transition: box-shadow 0.5s, border 0.5s;
  border-radius: 0.8rem;
}

【问题讨论】:

  • 您能添加通过返回卡创建的 HTML 结构,并最终添加预期结果的屏幕截图或草图吗? (最好是让 yje 最少的代码来重现您的问题)
  • 感谢您的回复。这是它的作用与我想要它做的事情的草图:ibb.co/pZbQfGb

标签: css flexbox


【解决方案1】:

您可以使用单个网格(而不是嵌套的 flexbox)并将输入设置在卡片之间和之前的第一行。

这是一个想法的例子或带有侧面元素https://codepen.io/gc-nomade/pen/NWpVeOY的codepen:

* {
  box-sizing: border-box;
}

.mainContainer {
  min-height: 200px;
  padding: 1rem;
}

#search {
  width: 100%;
  height: 2rem;
  background-color: var(--Mwhite);
  border: 0.05rem solid var(--Mdefault);
  border-radius: 0.5rem;
  color: var(--Mdefault);
  padding: 0 0 0 0.5rem;
  outline: 0.05rem solid transparent;
  transition: outline 0.5s;
  grid-column: 1 / -1;
}

.secondaryContainer {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(12.5rem, max-content));
  justify-content: center;
  row-gap: 1rem;
  column-gap: 0.5rem;
}

.card {
  background-color: var(--Mwhite);
  border: 0.05rem solid var(--Mdefault);
  width: 12.5rem;
  height: fit-content;
  min-height: 16.25rem;
  display: flex;
  flex-flow: column nowrap;
  align-items: center;
  justify-content: space-between;
  box-shadow: var(--Mdefault) 0 0 0;
  transition: box-shadow 0.5s, border 0.5s;
  border-radius: 0.8rem;
}

input#search,
.card {
  border: 1px solid black;
  ;
}
<div class="mainContainer">

  <div class="secondaryContainer">
    <input type="search" placeholder="search" id="search" />
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
    <div class="card">card</div>
  </div>
</div>

【讨论】:

  • 您的解决方案非常完美!但是由于某种原因,当我在它周围添加其他组件(页眉、页脚和一些全局容器)时,它不再起作用了:我的卡片都堆叠在一列中。
  • 你是如何修改你的结构的?,在容器周围添加页眉和页脚对我来说似乎没问题:codepen.io/gc-nomade/pen/NWpVeOY@FlowRan
  • 我不知道为什么,但它现在可以工作了......非常感谢!
猜你喜欢
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2019-04-16
  • 1970-01-01
  • 2018-02-23
相关资源
最近更新 更多