HarmonyOS鸿蒙Next中使用position配合translate实现元素垂直居中定位,在父元素没有定高的情况下会乱跑

HarmonyOS鸿蒙Next中使用position配合translate实现元素垂直居中定位,在父元素没有定高的情况下会乱跑 详细见图

  1. 如果 top 和 translate 设置百分比,父元素高度没定死,会乱跑,如果父元素高度定死则显示正确
  2. 如果 top 不设置百分比,定死,父元素不设置高度的情况下,显示也是正确的,但是我内容高度不确定,所以 top 不能定死
Column() {

  Text(this.ldkData.care)
    .width(DpUtils.ratio(265))
    .textAlign(TextAlign.Center)
    .fontSize(DpUtils.ratio(15))
    .fontWeight(500)
    .lineHeight(DpUtils.ratio(22))
    .backgroundColor(Color.Red)
    .borderRadius(DpUtils.ratio(12))
    .padding({
      top: DpUtils.ratio(8),
      bottom: DpUtils.ratio(8),
      left: DpUtils.ratio(19),
      right: DpUtils.ratio(19)
    })
    .align(Alignment.Center)
    .constraintSize({
      minHeight: DpUtils.ratio(54)
    })

  // 这是一个小角标,需要定位处理
  Text(){}
  .width(0)
  .height(0)
  .border({
    width: DpUtils.ratio(8),
    color: {
      right: Color.Blue,
      top: Color.Transparent,
      left: Color.Transparent,
      bottom: Color.Transparent,
    }
  })
  .zIndex(99)
  .position({
    x: -DpUtils.ratio(14),
    y: '50%'
  })
  .translate({
    y: '-50%'
  })
}

更多关于HarmonyOS鸿蒙Next中使用position配合translate实现元素垂直居中定位,在父元素没有定高的情况下会乱跑的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

这边可以使用onAreaChange来获取父元素的高度,然后下面这个需要定位处理的小角表根绝父元素获取的高度来计算
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-component-area-change-event-0000001862687529#ZH-CN_TOPIC_0000001862687529__onareachange

更多关于HarmonyOS鸿蒙Next中使用position配合translate实现元素垂直居中定位,在父元素没有定高的情况下会乱跑的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用position配合translate实现元素垂直居中定位时,若父元素未定高,可能导致子元素定位不准确。这种情况下,translate的百分比计算基于元素自身的尺寸,而非父元素。由于父元素高度未定,子元素的translateY(-50%)可能无法准确居中。

解决方法可通过以下方式:

  1. 使用flexbox布局:将父元素设置为display: flex,并使用align-items: center实现垂直居中。

  2. 使用grid布局:将父元素设置为display: grid,并使用place-items: center实现垂直居中。

这两种方式均不依赖父元素高度,可有效避免定位问题。

在HarmonyOS鸿蒙Next中,使用 positiontranslate 实现元素垂直居中时,若父元素未定高,元素可能会乱跑。建议为父元素设置 heightmin-height,或使用 flexbox 布局,通过 display: flexjustify-content: center 以及 align-items: center 来实现更稳定的垂直居中效果。

回到顶部