HarmonyOS鸿蒙Next中使用position配合translate实现元素垂直居中定位,在父元素没有定高的情况下会乱跑
HarmonyOS鸿蒙Next中使用position配合translate实现元素垂直居中定位,在父元素没有定高的情况下会乱跑 详细见图
- 如果 top 和 translate 设置百分比,父元素高度没定死,会乱跑,如果父元素高度定死则显示正确
- 如果 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
这边可以使用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%)可能无法准确居中。
解决方法可通过以下方式:
-
使用
flexbox布局:将父元素设置为display: flex,并使用align-items: center实现垂直居中。 -
使用
grid布局:将父元素设置为display: grid,并使用place-items: center实现垂直居中。
这两种方式均不依赖父元素高度,可有效避免定位问题。
在HarmonyOS鸿蒙Next中,使用 position 和 translate 实现元素垂直居中时,若父元素未定高,元素可能会乱跑。建议为父元素设置 height 或 min-height,或使用 flexbox 布局,通过 display: flex 和 justify-content: center 以及 align-items: center 来实现更稳定的垂直居中效果。

