头图

uniapp 开发H5打包微信小程序样式失效的解决之道

使用uniapp开发H5,样式已经按照UI设计稿全部实现。但是在打包微信小程序调试的时候,遇到很多样式失效的问题。问了度娘很久,并没有完全解决样式失效的问题。于是自己按照从度娘上查到的方法去进行组合尝试,最终样式失效问题得到了完全的解决。

样式不生效的原因:u-view框架组件自带的class优先级高于开发者自定义的优先级,所以显示的是组件的默认样式(网上有说是样式隔离)。解决办法就是提高自定义样式的优先级,使用自定义的样式去覆盖默认样式。

一、输入框(u--input)样式失效解决之道

在H5上,u--input的样式是可以完美展示的,但是到了微信小程序上,样式完全失效了。经过一番摸索,找到了最终的解决方法。

  1. 把样式失效的 u--input 改成 u-input
  2. 在u-input的自定义样式之前添加默认样式的class名,u-input__content,而且要使用深度渲染,写成::v-deep.u-input__content。这样H5中的样式就可以完全应用到微信小程序上了(前后插槽的样式也完美应用),示例代码如下。

    ::v-deep.u-input__content, .row-input {
                        height: 70rpx;
                        width: calc(100vw - 150rpx - 120rpx);
                        background-color: #FEFCF8;
                        border-radius: 8rpx;
    
                        font-size: 24rpx;
                        
                        font-weight: 500;
                        color: #999999;
                        line-height: 24rpx;
                        margin-top: 30rpx;
    
                        //前插槽样式
                        .prefix {
                            padding: 0 20rpx;
                            
                            image {
                                width: 30rpx;
                                height: 30rpx;
                            }
                        }
                        //后插槽样式
                        .suffix {
                            padding: 0 20rpx;
    
                            image {
                                width: 30rpx;
                                height: 30rpx;
                            }
    
                            .picture-code {
                                width: 100rpx;
                                height: 48rpx;
                            }
                        }
                    }
    
                    .placeholder { //占位提示文字的样式
                        font-size: 24rpx;
                        
                        font-weight: 500;
                        color: #999999;
                        line-height: 24rpx;
                    }
                }

    补充:组件的默认样式的class名如何获取。
    获取组件默认的class

    二、u-list样式失效的解决之道

    1. 在u-list的自定义样式的class之前添加 默认样式的class u-list。就可以解决样式失效的问题。
    2. 对于列表顶部被导航栏遮挡,则需要添加一个view进行包裹,通过调节外层view的margin来进行调节。

      示例代码如下:

      .store-section, .u-list { //添加默认样式的class u-list
              background-color: #F7F1E8;
              border-radius: 40rpx 40rpx 0px 0px;
            padding: 20rpx 0rpx;
      }

三、底部安全区域失效

H5上可以使用 <u-safe-bottom/>标签设置相应的背景色作为底部安全区域,但是微信小程序失效了。

微信小程序上应该使用一个 <view class="safe-bottom"/>来替换。标签的样式如下:

.safe-bottom {
        background-color: #F4EBDF;
        height: var(--safe-area-inset-bottom);
    }

四、图片不显示问题

图片不显示,主要就是路径不对。

  1. 自定义组件的图片路径: /static/detail/personal-store-logo.png
  2. page里组件的路径: @/static/home/have-a-goods.jpeg

    图片路径的问题,也不一定就像上方那样,自己去尝试修改就好了,以图片显示为准。

五、u-icon不显示

遇到u-view里的u-icon不显示的情况,一般就是u-icon外面多包了一层组件,把多包的组件去掉u-icon就可以正常显示了。

六、u-cell-group样式失效解决之道

对于u-cell-group样式失效的问题,尝试过使用覆盖样式的问题,但是不生效。最终的解决之道是在u-cell-group外面包了一层view。把u-cell-group的样式放到view上。示例代码如下:

<view class="group-background">
            <u-cell-group>
                <u-cell title="检测更新" :titleStyle="cellTitleStyle" size="large" :isLink="true" @click="checkUpdate()">
                </u-cell>
                <u-cell title="隐私政策" :titleStyle="cellTitleStyle" size="large" :isLink="true"
                    @click="privacyAgreement()">
                </u-cell>
            </u-cell-group>
        </view>
.group-background {
        width: 100%;
        background-color: #FEFCF8;
        margin-top: 40rpx;
    }
至此,经过上面的一番修改之后,uniapp开发的H5的样式就可以完美的在微信小程序中展示了。

科技创造未来
作为一名软件开发中,一定要做3件事。新技术的学习,这样你才能跟上时代的步伐;记录开发过程中踩过的坑...

一名从业多年的软件开发者,做过5年的iOS开发,做过一年的react-native开发,有iOS性能优化经验,IM开发...

184 声望
14 粉丝
0 条评论
推荐阅读
Vue微信公众号开发踩坑记录
JS-SDK需要向服务端获取签名,且获取签名中需要的参数包括所在页面的url,但由于单页应用的路由特殊,其中涉及到iOS和android微信客户端浏览器内核的差异性导致的兼容问题

imwty132阅读 67.7k评论 81

正则表达式实例
收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。常用正则表达式实例1. 校验基本日期格式 {代码...} {代码...} 2. 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊...

寒青57阅读 8.6k评论 11

JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...

jenemy49阅读 7.3k评论 12

再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...

libinfs42阅读 6.9k评论 12

封面图
「多图预警」完美实现一个@功能
一天产品大大向 boss 汇报完研发成果和产品业绩产出,若有所思的走出来,劲直向我走过来,嘴角微微上扬。产品大大:boss 对我们的研发成果挺满意的,balabala...(内心 OS:不听,讲重点)产品大大:咱们的客服 I...

wuwhs32阅读 3.5k评论 5

封面图
CSS transition 小技巧!如何保留 hover 的状态?
欢迎关注我的公众号:前端侦探通常情况下,hover 是无法保存状态的。鼠标移入触发额外样式,一旦移出就还原了 {代码...} 这就意味着,如果需要保留hover的状态,可能就不得不借助JS了,比如下面是某某书院的首页...

XboxYan30阅读 3.9k评论 2

封面图
安全地在前后端之间传输数据 - 「3」真的安全吗?
在「2」注册和登录示例中,我们通过非对称加密算法实现了浏览器和 Web 服务器之间的安全传输。看起来一切都很美好,但是危险就在哪里,有些人发现了,有些人嗅到了,更多人却浑然不知。就像是给门上了把好锁,还...

边城29阅读 6.4k评论 5

封面图

一名从业多年的软件开发者,做过5年的iOS开发,做过一年的react-native开发,有iOS性能优化经验,IM开发...

184 声望
14 粉丝
宣传栏