gpt4 book ai didi

html - 如何在Flexbox中禁用等高列?

转载 作者:行者123 更新时间:2023-11-28 00:28:36 26 4
gpt4 key购买 nike

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

首先,我有一个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>





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

最佳答案

您遇到了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. Cross-axis Alignment: the align-items and align-self properties
  
  弹性项目可以在当前行的横轴上对齐
  flex容器,类似于 justify-content,但垂直
  方向。
  
   align-items设置所有flex的默认对齐方式
  容器的物品,包括匿名弹性物品。
  
   align-self允许此默认对齐方式被覆盖
  各个弹性项目。




一点历史

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


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


如今,随着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规则告诉弹性项目尽可能沿横轴扩展。因此,在行方向容器中,所有项目的高度可以相等。 More craziness tamed by flexbox

从一个 popular answer for equal height columns


  将 overflow: hidden赋予容器并使其大(且等于)
  负边距和正填充到列。注意这个
  方法有一些问题,例如锚定链接在您的内部无效
  布局。


现在是骇客!

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

关于html - 如何在Flexbox中禁用等高列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54523605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com