React Native Does’位置:与Flexbox的冲突?

hkmswyz6  于 2023-05-18  发布在  React
关注(0)|答案(4)|浏览(115)

我想做一个div坚持在屏幕顶部没有任何影响其他元素,和它的子元素在中心.

.parent {
   display: flex;
   justify-content: center;
   position: absolute;
 }
<div class="parent">
  <div class="child">text</div>
</div>

当我添加position: absolute行时,justify-content: center将无效。他们之间是否有冲突,解决方案是什么?

编辑

谢谢大家,这是父母宽度的问题。但是我在React Native,所以我不能设置width: 100%。已尝试flex: 1align-self: stretch,两者都不工作。我最终使用Dimensions来获得窗口的全宽,它工作了。

编辑

在React Native的新版本(我使用0.49)中,它接受width: 100%

r55awzrz

r55awzrz1#

不,绝对定位与Flex容器并不冲突。使元素成为Flex容器只会影响其内部布局模型,即其内容的布局方式。定位会影响图元本身,并且可以改变其在流布局中的外部角色。
这意味着

  • 如果你用display: inline-flex给一个元素添加绝对定位,它会变成块级的(像display: flex一样),但仍然会生成一个flex上下文。
  • 如果将绝对定位添加到具有display: flex的元素,则将使用收缩拟合算法(典型的内联级容器)而不是填充可用算法来调整该元素的大小。

也就是说,绝对的定位与灵活的孩子冲突。
因为它是out-of-flow,所以flex容器的绝对定位子容器不参与flex布局。

vecaoik1

vecaoik12#

您忘记指定.parent的宽度。

.parent {
   display: flex;
   justify-content: center;
   position: absolute;
   width: 100%;
}
<div class="parent">
  <div class="child">text</div>
</div>
ar7v8xwq

ar7v8xwq3#

你必须给予width:100%center的文本。

.parent {
   display: flex;
   justify-content: center;
   position: absolute;
   width:100%
 }
<div class="parent">
  <div class="child">text</div>
</div>

如果还需要垂直居中对齐,请给予height:100%align-itens: center

.parent {
   display: flex;
   justify-content: center;
   align-items: center;
   position: absolute;
   width:100%;
   height: 100%;
 }
mgdq6dx1

mgdq6dx14#

在我的例子中,问题是我在div的中心有另一个元素,其中有一个冲突的z索引。

.wrapper {
  color: white;
  width: 320px;
  position: relative;
  border: 1px dashed gray;
  height: 40px
}

.parent {
  position: absolute;
  display: flex;
  justify-content: center;
  top: 20px;
  left: 0;
  right: 0;
  /* This z-index override is needed to display on top of the other
     div. Or, just swap the order of the HTML tags. */
  z-index: 1;
}

.child {
  background: green;
}

.conflicting {
  position: absolute;
  left: 120px;
  height: 40px;
  background: red;
  margin: 0 auto;
}
<div class="wrapper">
  <div class="parent">
    <div class="child">
       Centered
    </div>
  </div>
  <div class="conflicting">
    Conflicting
  </div>
</div>

相关问题