价格文本对齐

·记录一下工作里常遇到的一些简单问题:

需求是一个购买按钮上同时展示原价和现价:

1.原价现价文本格式不同

2.原价切需要加打折红线,不方便用富文本一个文本处理。

3.需要对两条文本适配父节点的宽度,不能超出按钮

以下是实现代码:

function CenterTwoTexts(text1, text2)
    text1.fontSize = 36
    text2.fontSize = 42
    -- 获取两个Text控件的RectTransform
    local rectTransform1 = text1.transform:GetComponent(typeof(RectTransform))
    local rectTransform2 = text2.transform:GetComponent(typeof(RectTransform))
    -- 获取父节点的RectTransform
    local parentRectTransform = rectTransform1.parent:GetComponent(typeof(RectTransform))
    -- 设置Text perfect size
    rectTransform1.sizeDelta = Vector2(text1.preferredWidth, text1.preferredHeight)
    rectTransform2.sizeDelta = Vector2(text2.preferredWidth, text2.preferredHeight)
    -- 计算两个Text控件的总宽度
    local totalWidth = rectTransform1.sizeDelta.x + rectTransform2.sizeDelta.x
    local parentWidth = parentRectTransform.sizeDelta.x - 30
    -- 计算两个Text控件的总宽度与父节点的宽度之差
    local scale = 1
    if parentWidth < totalWidth then
        scale = parentWidth / totalWidth
        rectTransform1.localScale = Vector3(scale, scale, scale)
        rectTransform2.localScale = Vector3(scale, scale, scale)
    end
    logYellow("scale = " .. scale)
    logCyan(rectTransform1.sizeDelta.x, rectTransform2.sizeDelta.x)--, parentRectTransform.sizeDelta.x, totalWidth, scale
    -- 计算每个Text控件应该偏移的距离,以使它们居中
    local offset = rectTransform2.sizeDelta.x / 2 - rectTransform1.sizeDelta.x / 2
    -- 设置第一个Text控件的位置
    rectTransform1.anchoredPosition = Vector2(-offset - 3, rectTransform1.anchoredPosition.y)
    -- 设置第二个Text控件的位置
    rectTransform2.anchoredPosition = Vector2(-offset + 3, rectTransform2.anchoredPosition.y)
end

思路是将左边文本锚点设置到最右(1,0.5),右边锚点设置到最左(0,0.5)此时只需要对齐文本的坐标即可。先按两条文本长度算出来整体偏移,然后根据父节点的宽度做缩放。

在CSS中实现文本数字的底部对齐,通涉及到对包含文本数字的元素进行垂直方向上的对齐控制。以下是几种实现方式及其适用场景: ### 使用 `vertical-align` 属性 `vertical-align` 属性用于表格单元格(`display: table-cell`)或内联元素(如 `<span>`)中,可以将元素的基线对齐到父元素的基线。通过设置 `vertical-align: bottom`,可以实现子元素的底部对齐。 例如,以下代码中,包含“价格“100”的两个 `<span>` 元素都设置了 `vertical-align: bottom`,从而实现了它们在底部对齐的效果: ```html <div style="width:200px; border-bottom: 1px solid red;"> <span style="font-size: 30px; vertical-align: bottom;">价格</span> <span style="vertical-align: bottom;">100</span> </div> ``` 此方法特别适用于需要将不同字体小的文本(如汉字数字)进行底部对齐的情况[^3]。 ### 使用 Flexbox 布局 Flexbox 是一种现代的布局方式,它允许容器内的子元素在水平垂直方向上进行灵活的对齐。通过设置容器的 `display: flex`,并结合 `align-items: flex-end`,可以将子元素在垂直方向上对齐到容器的底部。 以下是一个典型的 Flexbox 实现方式: ```html <div class="AITip"> <span>文本</span> <span>100</span> </div> ``` ```css .AITip { height: 11%; color: #01ffff; font-size: 24px; display: flex; justify-content: center; align-items: flex-end; line-height: 1; } ``` 在这个例子中,`align-items: flex-end` 确保了子元素在垂直方向上对齐到容器的底部。此方法适用于需要将多个元素(如文本数字)在容器中统一底部对齐的场景[^4]。 ### 使用 `display: table-cell` `vertical-align` 另一种实现方式是将容器设置为 `display: table-cell`,并结合 `vertical-align: bottom` 来对齐内容。这种方法类似于 HTML 表格中的单元格对齐方式。 以下是一个示例代码: ```html <div style="display: table-cell; vertical-align: bottom; width: 200px; border: 1px solid #000;"> <span>价格</span> <span>100</span> </div> ``` 在此代码中,`display: table-cell` 将容器模拟为表格单元格,而 `vertical-align: bottom` 则确保了其内容在垂直方向上对齐底部[^1]。 ### 使用绝对定位 如果需要更精确地控制文本或数字的位置,可以使用 CSS 的 `position` 属性(如 `absolute`)结合 `bottom` 属性来实现底部对齐。这种方法通适用于固定布局或需要将元素相对于父容器进行精确定位的情况。 以下是一个示例代码: ```html <div style="position: relative; height: 100px; border: 1px solid #000;"> <span style="position: absolute; bottom: 0;">文本</span> <span style="position: absolute; bottom: 0; left: 50px;">100</span> </div> ``` 在这个例子中,`position: absolute` `bottom: 0` 的组合确保了两个 `<span>` 元素都对齐到父容器的底部。此方法适用于需要将多个元素精确对齐到容器底部的场景[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值