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

首先,我有一个用于反馈的div,然后是一个搜索输入,然后是一个用于建议的div元素.

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

But there's a feature that grows all the divs to the highest element美元.这意味着当搜索结果弹出时,反馈和建议元素随着搜索div一起增加,导致布局混乱.

Is there a trick to not grow the divs with the highest element?只需使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>

http://codepen.io/alucardu/pen/PPjRzY

推荐答案

您遇到的是弹性等高列功能.

弹性容器的初始设置为align-items: stretch.

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

最高的项设置所有同级项的高度.当最高的项目扩大时,它的sibling 姐妹也会跟着扩大.因此,所有物品的高度都是相等的.

要覆盖此默认设置,请将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,您可以覆盖单个项目的默认设置.

More details in the spec:

8.3. Cross-axis Alignment: the align-items and align-self properties

弹性项目可以在当前行的横轴上对齐

align-items设置所有柔体的默认对齐方式 容器的项,包括匿名弹性项.

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 */
}

很简单.轻松点.效率很高.The craziness is over美元.

在等高列方面,Flexbox也很出色:默认情况下,它会这样做.

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

align-items: stretch规则告诉flex项目尽可能沿着横轴展开.因此,在行方向容器中,所有项目的高度可以相等.More craziness tamed by flexbox

从一个popular answer for equal height columns:

overflow: hidden分配给容器和大的(且相等) 列的负边距和正填充.请注意,这一点 方法有一些问题,例如锚定链接在您的 布局.

这才是黑客攻击!

钟摆现在开始向另一个方向摆动:Designers are asking how to TURN OFF equal height columns.

Css相关问答推荐

如何让CSS过渡应用时宽度增加,而不是减少?

如何将表格单元格的最后一个子级与单元格底部对齐?

如何以Angular 调整下拉控件的高度

如何在CSS中实现边框的局部透明?

try 在Jekyll中使用多个SCSS文件时出错

如何在 konvajs 中居中放置项目?

Nativewind 的某些样式不适用于本机 (Android),但它们适用于网络

在 SVG 元素上方添加标签而不移动 SVG 元素

antd 中的子菜单项不可滚动

在 css 中使用 first-of-type 效果太好了吗?

CSS 中的区域类似于 C# 区域?

使用 HTML 和 CSS 滚动表格

重置子元素的不透明度 - Maple Browser (Samsung TV App)

如何使多个 div 显示在一行中但仍保留宽度?

如何让 Firefox 在文件更改时自动刷新?

iPhone X / 8 / 8 Plus CSS 媒体查询

溢出的文本可以居中吗?

修复 Mobile Safari (iPhone) 上文本呈现不一致且某些字体比其他字体大的字体大小问题?

Angular 动画的目的是什么?

CSS关键帧动画CPU占用率高,应该这样吗?