CSS Flex将项目堆叠在一起[重复]

Posted

技术标签:

【中文标题】CSS Flex将项目堆叠在一起[重复]【英文标题】:CSS Flex Stacking Items on Top of Each Other [duplicate] 【发布时间】:2017-11-21 02:39:47 【问题描述】:

我正在尝试将一些 <h1></h1> 文本和来自 Angular Material 的电子邮件表单放入具有彩色背景的 <div></div> 部分的中心。这些物品彼此叠放出来,就好像它们是层层叠叠的。电子邮件表单需要位于 <h1></h1> 标签下方。我可以让它正确对齐的唯一方法是使用position:flex,我怀疑这是根本原因。

这是我的 html 和 css:

<div class="top-section">

  <h1 class="top-h1">
    mytitle
  </h1>

  <md-input-container class="email-form" color="accent">
    <input mdInput placeholder="Email us" value="Your email address">
  </md-input-container>

</div>


.top-section 
  height: 350px;
  background-color: #04041b;
  align-items: center;
  display: flex;
  justify-content: center;


.top-h1 
  color: #E8E8E8;
  font-size: 60px;
  position: absolute;


.email-form 
  color: white;
  font-size: 30px;

有什么想法吗?

【问题讨论】:

【参考方案1】:

您在h1 上使用position: absolute 将其从页面流中移除,并将其相对于其最近定位的父级定位。所以其他元素不会围绕它流动。删除它。然后您的项目将并排显示,因为 flex 父级的默认 flex-directionrow。要垂直显示项目,请使用flex-direction: column,这些项目将在一列中相互堆叠,而不是在一行中并排显示。

.top-section 
  height: 350px;
  background-color: #04041b;
  align-items: center;
  display: flex;
  justify-content: center;
  flex-direction: column;


.top-h1 
  color: #E8E8E8;
  font-size: 60px;


.email-form 
  color: white;
  font-size: 30px;
<div class="top-section">

  <h1 class="top-h1">
    mytitle
  </h1>

  <md-input-container class="email-form" color="accent">
    <input mdInput placeholder="Email us" value="Your email address">
  </md-input-container>

</div>

【讨论】:

"并将其相对于其最近的父级定位" - 如果父级的位置不是默认值(静态),这将是正确的。在静态父绝对定位的情况下,h1 将相对于 body 元素对吗?【参考方案2】:

我想这是因为您将.top-h1 设置为positionabsolute

创建如下内容,它应该可以解决您的问题:

<div class="container">
  <h1>Example</h1>
  <div class="form">
    <!-- ignore this div, this is an example of where your form will be. -->
  </div>
</div>

.container 
  height: 350px;
  background-color: #E0E0E0;
  width: 100%;
  margin: auto;
  text-align: center; 


.form 
  width: 100%;
  margin: auto;

这应该做你想做的事。如果我误解了这个问题,请回复,我可以调整我的回复,但这是我从你那里得到的,你希望元素不堆叠并且表单位于 h1 下方但保持居中。

为了将来参考,如果你需要对齐一个 div,给它一个宽度,然后使用 margin: auto;

祝你好运。

【讨论】:

以上是关于CSS Flex将项目堆叠在一起[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将flex子元素堆叠在一起

CSS网格项目相互堆叠而不是尊重网格区域[重复]

numpy将相同子维度的矩阵堆叠在一起[重复]

响应式菜单项 css 不堆叠在一起

CSS Flex,最后两项与其余项的宽度不同[重复]

CSS:flexbox的第一个孩子向左并休息到中心[重复]