当前位置: 首页 > 面试题库 >

使弹性项目连续具有相等的宽度

燕青青
2023-03-14
问题内容

如果您看下面的示例,我希望标头(h4.child-title)在父容器内具有相同的长度。

但是我并没有成功实现这一目标。

任何帮助表示赞赏。

.top-level {

  display: flex;

  flex-flow: row wrap;

}



.section {

  display: flex;

  flex-flow: row nowrap;

  border: 1px solid;

  margin-right: 12px;

  margin-top: 12px;

}



.section-child {

  display: flex;

  flex-flow: column nowrap;

  align-items: center;

  flex: 1 1 0;

}



.child-title {

  white-space: nowrap;

}



.vertical-separator {

  width: 1px;

  background-color: rgba(0, 0, 0, 0.3);

  margin: 8px;

}


<div class="top-level">

  <section class="section">

    <div claas="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

  <section class="section">

    <div claas="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

  <section class="section">

    <div claas="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

</div>

问题答案:

弹性盒法

为了使文本项(.section-child)的宽度相等,您需要使用flex: 1 1 0已完成的。这和说的一样flex: 1

但是,由于两个原因,这本身无法实现目标:

  1. .section-child默认情况下,flex容器的父级,但更大容器中的flex项,仅限于其内容的宽度。因此它不会扩展,文本可能会溢出容器。你需要申请flex: 1.section,也是如此。

  2. 默认情况下,弹性项目不能小于其内容的大小。初始设置为min-width: auto。因此flex: 1,无法均匀分配容器空间,因为弹性项目无法收缩到最长的项目之外。您需要使用覆盖此行为min-width: 0

```
.top-level {

  display: flex;

  flex-flow: row wrap;

}



.section {

  display: flex;

  flex-flow: row nowrap;

  border: 1px solid;

  margin-right: 12px;

  margin-top: 12px;

  flex: 1;

  min-width: 0;

}



.section-child {

  display: flex;

  flex-flow: column nowrap;

  align-items: center;

  flex: 1;

  min-width: 0;

}



.child-title {

  white-space: nowrap;

}



.vertical-separator {

  width: 1px;

  background-color: rgba(0, 0, 0, 0.3);

  margin: 8px;

}

```

<div class="top-level">

  <section class="section">

    <div class="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

  <section class="section">

    <div class="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

  <section class="section">

    <div class="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

</div>

现在,所有伸缩项目的宽度均相等。但是,由于您将文本设置为nowrap,因此它的边界可能会溢出。如果删除nowrap,则一切都很好。

.top-level {

  display: flex;

  flex-flow: row wrap;

}



.section {

  display: flex;

  flex-flow: row nowrap;

  border: 1px solid;

  margin-right: 12px;

  margin-top: 12px;

  flex: 1;

  min-width: 0;

}



.section-child {

  display: flex;

  flex-flow: column nowrap;

  align-items: center;

  flex: 1;

  min-width: 0;

}



.child-title {

  /* white-space: nowrap; */

}



.vertical-separator {

  width: 1px;

  background-color: rgba(0, 0, 0, 0.3);

  margin: 8px;

}


<div class="top-level">

  <section class="section">

    <div class="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

  <section class="section">

    <div class="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

  <section class="section">

    <div class="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

</div>

CSS网格方法

如果您的实际目标是使该行中的所有flex项目都等于最长项目的宽度,那么flexbox无法做到这一点。

Flex可以提供相等宽度和相等高度的Flex项目,因为它flex: 1在主轴上提供。

Flex还可以align-items: stretch在横轴上提供相同宽度和高度的列/行,因为它提供了交叉轴。

但是flexbox规范中没有关于基于特定同级物大小的同等大小flex项目的内容。但是,flexbox的姊妹技术CSS Grid可以做到。

通过使用网格的fr单位,可以将网格中的列宽设置为最长列的宽度。

.top-level {

  display: flex;

  flex-flow: row wrap;

}



.section {

  display: grid;

  grid-template-columns: 1fr 1px 1fr 1px 1fr;

  margin-right: 12px;

  margin-top: 12px;

}



.section-child {

  display: flex;

  justify-content: center;

  align-items: center;

  min-width: 0;

  background-color: green;

}



.child-title {

  /* white-space: nowrap; */

}



.vertical-separator {

  background-color: rgba(0, 0, 0, 0.3);

  margin: 8px;

}


<div class="top-level">

  <section class="section">

    <div class="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title text text text text text text text text text text</h4>

      <!--A lot more content here-->

    </div>

  </section>

  <section class="section">

    <div class="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title text text text text text text</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

  <section class="section">

    <div class="section-child">

      <h4 class="child-title">Title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Longer title</h4>

      <!--A lot more content here-->

    </div>

    <div class="vertical-separator"></div>

    <div class="section-child">

      <h4 class="child-title">Much much longer title</h4>

      <!--A lot more content here-->

    </div>

  </section>

</div>


 类似资料:
  • 我正在尝试使用flex Box创建滑块。我的想法是创建一个父容器,并使滑块水平溢出。然后将父元素设置为无溢出,这样溢出的子元素就被隐藏了,我们可以使用滚动条查看其他子元素。 下图显示了我现在得到的输出。我试图使三个div具有父容器的全宽。这样,当红色div占据父div的空间时,只有红色div可见。要查看其余div,必须向右滚动。 我尝试过将宽度设置为100%,但似乎不起作用。

  • 如果我调整窗口的大小小于最小宽度flex项目的总数(此处为653px),则会出现一个滚动条,但flexbox采用当前窗口的大小,并且flex项目没有红色背景,我想知道如何在不键入以下特定值的情况下为flexbox容器设置最小宽度: 我不希望收缩flex项目,但一个css的方式来获得: flexbox.min(flex_items_min_width) https://codepen.io/papa

  • 更新:如果我必须使用flexbox,我认为没有简单的解决方案。我将使用“flex shrink:0”并使用媒体查询来调整设计。无论如何,谢谢你的帮助。 我有一个水平列表(显示: flex)与多个元素。当我缩小窗口大小时,列表元素开始缩小。不幸的是,元素的宽度几乎保持不变。锂元素占据了太多的空间。我希望li-元件的大小适合内容。如果我把"flex-收缩: 0"添加到li-元素中,宽度是正确的,但是我

  • 问题内容: 我试图确定一个大列表是否具有相同的连续元素。 所以说: 在这种情况下,我将返回true,因为存在两个连续的元素和,它们的值相同。 我知道可以通过某种形式的循环组合来完成此操作,但我想知道是否有更有效的方法来执行此操作? 问题答案: 您可以在 *中使用和生成器表达式: 或者,您可以使用,以一种更Python化的方式来检查列表中是否至少有两个相等的连续项: 注意:如果要检查是否有两个以上的

  • 问题内容: 我有一个容器用。它有一个孩子。 我怎样才能使孩子显得“内联”? 具体来说,如何使孩子的宽度取决于其内容,而不扩展到父母的宽度? 我试过的 我将孩子设置为,但仍然占用了整个宽度。我还尝试了所有其他显示属性,但没有任何效果。 例: 问题答案: 使用的容器上,或在柔性的项目。 不需要。 flex容器的初始设置为。这意味着柔性物品将沿横轴扩展以覆盖容器的整个长度。 该属性的作用与之相同,除了适

  • 问题内容: 我想展示水平系列的未知数量的纸牌。为此,如果太多,它们将必须重叠。我很难说服伸缩盒在不缩小卡片的情况下重叠卡片。下面的示例缩小卡片。我尝试过,但后来没有受到尊重。 问题答案: 这就是我使用flexbox做到的方式。 请注意,从技术上讲,卡并不是重叠的,它们只是被剪裁了。但是它们 看起来 像是重叠的。诀窍是将每张卡包裹在另一个带有溢出的元素中:隐藏。 包装元素将缩小以适应可用空间,并且在