likes
comments
collection
share

小程序开发小经验——如何对活动弹窗中的透明元素进行定位小程序开发——如何对活动弹窗中的透明元素进行定位 相信每个前端开发

作者站长头像
站长
· 阅读数 14

小程序开发——如何对活动弹窗中的透明元素进行定位

需求是:我们的弹出层仅仅是一张图片,用户在点击特定位置时触发点击回调。

思路是:创建透明元素,置于图片容器内,并定位到相关的位置。

问题是:不同机型的尺寸不一,怎么保证透明元素准确的定位呢?

方案是统一度量衡

例子

如图我们有2个按钮需要定位 【点我优惠升级】和【残忍拒绝】

小程序开发小经验——如何对活动弹窗中的透明元素进行定位小程序开发——如何对活动弹窗中的透明元素进行定位 相信每个前端开发

一、只需要解决背景图片容器的尺寸设置问题,透明元素的定位也就解决了。

这关乎容器内两个子元素 绝对定位 于父元素的位置表现

❓ 通常我们会习惯以百分比宽为宽, 百分比高为高来给元素一个宽高比 。

❓ 但诸如IPHONE X 等全面屏幕之后的机型,长宽比更大了。也就是说屏幕没更宽却更长。

这会导致在某些机型上 图片尺寸比例是对的 ,而某些机型却不行。

// 例如❌
.图片容器{
  width: 百分比宽%;
  height:百分比高%;
}

//或者❌
.图片容器{
  width: 百分比宽vw;
  height:百分比高vh;
}

.透明元素{
    //...子绝父相定位
}

1. 使用宽高比作为宽高单位在不同机型上的表现

小程序开发小经验——如何对活动弹窗中的透明元素进行定位小程序开发——如何对活动弹窗中的透明元素进行定位 相信每个前端开发

可以看到首先背景图显示不全了(顶部尤为明显),其次是按钮的位置(红、绿色块)定位出现偏差

解决的办法很简单

// ✅只需要改变单位即可 。如统一采用视高,或视宽 

.图片容器{
  width: 百分比宽 vw;
  height:百分比高 vw;
}

.透明元素{
    //...子绝父相定位
}

2. 使用宽作为宽高单位在不同机型上的表现

小程序开发小经验——如何对活动弹窗中的透明元素进行定位小程序开发——如何对活动弹窗中的透明元素进行定位 相信每个前端开发

可以看到背景图的显示比例是正确的,按钮的位置也基本没变

这样不论设备宽高比是 3:9 还是3:10...,只要用相同的基准值来设置尺寸,容器宽高比就不变,内部子元素的定位也都不会产生变化。

二、另外这里是完整的 view + css 的结构

view结构

<view id='part-pay-modal' a:if="{{pageLoad}}">
    <!-- 1 -->
    <view a:if="{{ show1 }}" class="part-pay-modal" onTap="handleHideModal">
        // 图片容器 为父元素
        <view class="part-pay-1-modal-content">
            // 透明元素 为子元素
            <view class="part-pay-content-get" onTap='userClickGet'></view>
            <view class="part-pay-content-cancel" onTap='userClickReject'></view>
        </view>
        <text class="iconfont icon-clear"></text>
    </view>
</view>

css结构

/* 整个背景的遮罩 */

#part-pay-modal .part-pay-modal {
    background-color: rgba(0, 0, 0, 0.6);
    position: fixed;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    z-index: 999;
}

/* 背景图的容器 */

#part-pay-modal .part-pay-1-modal-content {
    position: relative;
    background: url('/images/partPay/part-pay-modal-1.png') center no-repeat;
    background-size: 100% auto;
    // 🔴 这里我们使用图片原始的比例设置宽与高;并使用统一的单位vw 或其他亦可。
width: 85vw; 
height: 113vw;
}

// ✅其余的部分 根据子绝父相 进行定位即可

/* 透明按钮1 xxxxx */

#part-pay-modal .part-pay-content-get {
    position: absolute; 
    left: 15%;
    right: 15%;
    top: 75%;
    height: 12%;
    z-index: 99;
}

/* 透明按钮2 xxxxx */

#part-pay-modal .part-pay-content-cancel {
    position: absolute;
    left: 15%;
    right: 15%;
    top: 89%;
    height: 12%;
    z-index: 99;
}

/* 关闭图标 */

#part-pay-modal .icon-clear {
    opacity: 0.5;
    color: var(--color-white);
    font-size: 0.6rem;
    position: absolute;
    right: 7.8vw;
    top: 18vw;
    z-index: 99;
}

最后回头又想,肯定是还有更好的方案的..还望读者!

不吝赐教呀!

转载自:https://juejin.cn/post/6980993786377666573
评论
请登录