• 微信小程序开发——修改小程序原生checkbox、radio默认样式


    复选框:

    闲话少说,这里直接介绍如何修改小程序提供的复选框的样式,如原生的是这样的:

    需要的是这样的:

    示例代码:

    /*复选框外框样式*/
    checkbox .wx-checkbox-input {
      width: 40rpx;
      height: 40rpx;
      border: 4rpx solid #999;
      border-radius: 100%;
    }
    /*复选框外框选中样式*/
    checkbox .wx-checkbox-input.wx-checkbox-input-checked {
      border-color: #3cbcee;
    }
    /*复选框选中后内部样式*/
    checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
      width: 60%;
      height: 60%;
      background: #3cbcee;
      border-radius: 100%;
      content: '';
      transform: translate(-50%, -50%) scale(1);
      -webkit-transform: translate(-50%, -50%) scale(1);
    }

    注:复选框选中后内部样式部分,最后两行样式一定要有,不然复选框选中后内部的圆点会不居中(而且不太好调),具体的就不细说了,有兴趣的可以试试:

      transform: translate(-50%, -50%) scale(1);
      -webkit-transform: translate(-50%, -50%) scale(1);

    如上,还是跟我们修改html原生标签样式是一样的,只不过我们不了解小程序这些原生组件的内部结构罢了。

    单选按钮:

    仍旧按上面的样式修改,代码如下:

    /* 单选按钮样式*/
    
    radio .wx-radio-input {
      width: 40rpx;
      height: 40rpx;
      border: 4rpx solid #999;
      border-radius: 100%;
      background: none;
    }
    
    /*单选按钮选中后内部样式*/
    
    radio .wx-radio-input.wx-radio-input-checked {
      border: 4rpx solid #3cbcee!important;
    }
    
    radio .wx-radio-input.wx-radio-input-checked::before {
      width: 60%;
      height: 60%;
      background: #3cbcee;
      border-radius: 100%;
      content: '';
      transform: translate(-50%, -50%) scale(1);
      -webkit-transform: translate(-50%, -50%) scale(1);
    }

    如上,样式代码跟复选框的基本一致,直接将checkbox换为radio就可以了。但是有一个地方不一样,就是单选按钮选择后的外框样式需要添加 !Important ,不然不会生效的。

    如果需要添加禁用标志,也是可以自定义的:

    radio.disabled .wx-radio-input {
      width: 40rpx;
      height: 40rpx;
      border: 4rpx solid #eee;
      border-radius: 100%;
      background: none;
    }

    总结:

    虽然官方没有提供原生组件样式修改的入口,但是微信小程序基于微信内置浏览器的X5内核(其实就是Chrome内核),小程序在某些方面和html是很类似的。从上边的例子也可以看出,小程序原生checkbox组件内部是封装了一些我们看不到的东西的,只要我们了解了原生组件内部构造,就可以直接修改组件样式。

    目前还没找到有关小程序组件内部类名的相关文档,但感觉可以从小程序编译包中应该有迹可循的,感兴趣的可以去了解下:https://www.cnblogs.com/xyyt/p/9523902.html

    后记:

    对于复选框、单选按钮这些组件,在编码实现的时候,会涉及到组件的选中、非选中、禁用状态,非禁用状态可能会有默认选择第一个选项,一般情况下的编码如下:

    <radio wx:if="{{item.isSelect==0}}" class='vc {{cardDetail.status!=1||cardDetail.payStatus==0?"disabled":""}}' 
           color="white" disabled='{{cardDetail.status!=1||cardDetail.payStatus==0}}' value="{{index}}" checked='{{index==fatherRightsCheckIndex}}' />

    如上,所有的状态、属性都在一个组件中实现,可以发现判断条件会比较多,如果后续有改动,那么改动的地方就比较多了。我们可以对这段代码进行优化如下:

    <block wx:if="{{item.isSelect==0}}">
        <radio wx:if="{{cardDetail.status!=1||cardDetail.payStatus==0}}" class='vc disabled' disabled='true' />
        <radio wx:else class='vc' color="white" value="{{index}}" checked='{{index==fatherRightsCheckIndex}}' />
    </block>

    如上,代码并没有增加多少,但是代码结构清晰多了,即使后续有改动,改动起来也很方便的。

  • 相关阅读:
    网络技术全方位解析之三:RAID
    Linux系统安全隐患及加强安全管理的方法
    Silverlight 程序架构
    (转载)Qt:给QLineEdit加上一个搜索按钮
    (转载)StarUML启动时候出现"System Error. Code:1722. RPC服务器不可用."错误的解决办法
    (转载)starUML connect elements exactly
    (转载)Qt:拖拽图片到QLabel上并显示
    (转载)Qt:禁止qDebug的输出
    (转载)葱的营养价值和食用功效
    (转载)Qwt的安装与使用
  • 原文地址:https://www.cnblogs.com/xyyt/p/10827295.html
Copyright © 2020-2023  润新知