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

如何在Flexbox中禁用等高列?

戚学文
2023-03-14
问题内容

我要在布局中对齐三个元素。

首先,我有一个div来提供反馈,然后是一个搜索输入,然后是一个div元素来提供建议。

我希望第一个和最后一个元素的宽度为20%,搜索输入的宽度为60%。使用Flexbox可以实现我想要的。

但是有一个功能可以将所有div增长到最高元素 。这意味着当搜索结果弹出时,反馈和建议元素的高度会随着搜索div的增加而增加,从而导致布局混乱。

有没有技巧可以不增加具有最高元素的div? 只是使div(#feedback#suggestions)在其中具有内容的高度?

#container_add_movies {

  display: flex;

}

#container_add_movies #feedback {

  width: 20%;

  background-color: green;

}

#container_add_movies #search {

  width: 60%;

  background-color: red;

}

#container_add_movies #suggestions {

  width: 20%;

  background-color: yellow;

}


<div id='container_add_movies'>

  <div id='feedback'>

    Feedback

  </div>

  <div id='search'>

    Search

    <br>Search

    <br>Search

    <br>Search

    <br>Search

    <br>Search

    <br>Search

    <br>Search

    <br>Search

    <br>Search

    <br>

  </div>

  <div id='suggestions'>

    Suggestions

  </div>

</div>

问题答案:

您遇到了flex等高列功能。

flex容器的初始设置为align-items: stretch

这意味着弹性项目会自动扩展容器横轴的整个长度。在行方向的容器中,横轴是垂直的(高度)。

最高的项目设置所有兄弟姐妹的身高。随着最高项目的扩展,其兄弟姐妹也随之而来。因此,所有物品的高度相等。

要覆盖此默认设置,请添加align-items: flex-start到flex容器中:

#container_add_movies {
   display: flex;
   align-items: flex-start;
}



#container_add_movies {

  display: flex;

  align-items: flex-start;       /* NEW */

}



#container_add_movies #feedback {

  width: 20%;

  background-color: green;

  display: block;

}



#container_add_movies #search {

  width: 60%;

  background-color: red;

}



#container_add_movies #suggestions {

  width: 20%;

  background-color: yellow;

}


<div id='container_add_movies'>

  <div id='feedback'>Feedback</div>

  <div id='search'>

    Search<br>Search<br>Search<br>Search<br>Search<br> Search

    <br>Search<br>Search<br>Search<br>Search<br>

  </div>

  <div id='suggestions'>Suggestions</div>

</div>

…或align-self: flex-start弹性项目:

#feedback {
    align-self: flex-start;
    width: 20%;
    background-color: green;
}

 #suggestions {
    align-self: flex-start; 
    width: 20%;
    background-color: yellow;
}



#container_add_movies {

  display: flex;

}



#container_add_movies #search {

  width: 60%;

  background-color: red;

}



#feedback {

  align-self: flex-start;  /* NEW */

  width: 20%;

  background-color: green;

}



#suggestions {

  align-self: flex-start;  /* NEW */

  width: 20%;

  background-color: yellow;

}


<div id='container_add_movies'>

  <div id='feedback'>Feedback</div>

  <div id='search'>

    Search<br>Search<br>Search<br>Search<br>Search<br> Search

    <br>Search<br>Search<br>Search<br>Search<br>

  </div>

  <div id='suggestions'>Suggestions</div>

</div>

align-items设置的默认值align-self。使用align-self可以覆盖单个项目的默认设置。

规格中的更多细节:

8.3。 跨轴对齐:align-itemsalign-self 属性

伸缩项可以在伸缩容器的当前行的横轴上对齐,类似于justify-content但在垂直方向上。

align-items 为所有flex容器的项目(包括匿名flex项目)设置默认对齐方式。

align-self 允许针对单个弹性项目覆盖此默认对齐方式。

一点历史

自CSS诞生以来,存在两个经常使前端开发人员感到沮丧,困惑和烦恼的布局挑战:

  1. 如何使事物居中,尤其是垂直居中
  2. 如何创建等高列(旁边有桌子)

如今,随着flexbox的出现,这些问题已经结束。

使事情居中从未如此简单:

#container {
    display: flex;
    justify-content: center;    /* center flex items along the main axis */
    align-items: center;        /* center flex items along the cross axis */
}

就等高列而言,flexbox也很出色:默认情况下会这样做。

#container {
    display: flex;
    flex-direction: row;        /* not even necessary; default rule */
    align-items: stretch;       /* not even necessary; default rule */
}

align-items:stretch规则告诉弹性项目尽可能沿横轴扩展。因此,在行方向容器中,所有项目的高度可以相等。

overflow: hidden容器加上大(且相等)的负边距,并给列填充正数。请注意,此方法存在一些问题,例如锚链接在您的布局中不起作用。

现在是骇客!

钟摆现在开始以另一种方式摆动: 设计师正在询问如何关闭等高柱。



 类似资料:
  • 问题内容: 我想有两列等高,它们的内容应该居中对齐,因此在每个div的正中间。 问题: “等高”和“中间对齐”似乎将自己排除在外,一个与另一个不兼容。 问题: 如何创建一个具有两列的行,这两列具有不同的宽度,相同的高度,并且其内容居中于每一列的中间? http://jsfiddle.net/kjjd66zk/1/ 问题答案: 此布局的关键是将相等的高度应用于主伸缩容器。 然后,将flex项目嵌套在

  • 问题内容: 我有一个简单的2列布局,我想使用Flexbox获得相等的高度: 的HTML 的CSS 这适用于Firefox,但不适用于Chrome: 我尝试了一些方法(包括供应商前缀),但仍然无法正常工作。 问题答案: 要使用Flexbox创建两个相等的列: 父容器得到 每列都是由div创建的,它们可以增长/收缩 拉伸第一列的子级: 还提供了第一列,以便其子元素具有柔韧性并可以成长 旁边的孩子被给予

  • 问题内容: 如何让您的div一路下滑?如何填充父div的垂直空间?如何在不使用背景图像的情况下获得等长的列? 我花了几天时间使用Google搜寻和剖析代码,以了解如何尽可能简单高效地完成等长列。这是我想出的答案,我想在一个小教程中与社区复制和粘贴样式共享此知识。 对于那些认为这是重复的,不是。我受到几个网站的启发,其中包括http://matthewjamestaylor.com/blog/equ

  • 问题内容: 当居中的flexbox项溢出其容器时,它们可能具有不良行为。 已经针对此问题提供了几种非灵活的解决方案,但是根据MDN,存在一个如下所述的值。 如果项目的大小溢出对齐容器,则将对齐该项目,就好像对齐模式已开始一样。 可以如下使用。 不幸的是,我无法找到任何示例或讨论,也无法确定浏览器对此有多少支持。 我试图在此CodePen中使用。但是,它对我不起作用。本似乎被忽略,或者容器元素是不正

  • 问题内容: 我想通过Flexbox使用全高应用。我在此链接中找到了使用旧的flexbox布局模块(和其他东西)所需的内容:CSS3Flexbox全高应用程序和溢出 对于仅支持旧版flexbox CSS属性的浏览器,这是正确的解决方案。 如果我想尝试使用更新的flexbox属性,我将尝试在列为hack的同一链接中使用第二种解决方案:使用带有的容器。它使显示垂直滚动。 我不太喜欢它,因为它引入了其他问

  • 问题内容: 使用杰克逊2.1,如何禁用错误消息似乎要禁用的消息? 我以为这只是世界上最简单的事情,但是该死了,它太迟了,我还没有找到一个简单的教程或任何特别明显的东西。?他们为什么要使它如此直观,然后使错误消息看起来如此简单? 尽管我 确实 喜欢该错误消息,但我的意思是,它比NPE更好。 我假设有一种使用注释的方法-但是我根本不希望将它们用于我正在做的简单工作! 问题答案: 我相信,您可以按班级或