在正常的浏览器中,浏览器自带的样式永远是优先级最低的,在一般介绍中
button[type=default] 这种属性选择器比 .my-btn 这种类选择器优先级要高。
但是如果 button[type=default] 是系统样式(浏览器自带样式),则优先级一定还是最低,一个普通的 class 就能覆盖。
在微信小程序中,button 的 type 默认值就是 default。
但下面两行的样式却完全不同
<button class=“abc”>测试</button>
<button class=“abc” type=“default”>测试</button>
假设现在有一段样式 .abc {color:#F00;}
这时第一个按钮文字是红色,而第二个则还是系统的颜色。
因为小程序自带的属性选择器优先而把 .abc 的样式给盖掉了,这时只有把 .abc 改成 button.abc 增加优先级才能搞定。
似乎小程序里 [type=default] 不在系统层的低优先级里,而是跟应用层完全在一个优先级层次上,这给开发过程中的按钮样式设置增加了很多麻烦。
某些情况,比如我自定义了一个带按钮的组件,这个组件的 type 属性对应内部按钮的 type 属性,模板剥去无关的部分大概是这样
<button type="{{type}}"><slot></slot></button>
这时 type 值为 null 的情况下,模板输出的是 <button type="">SomeText</button>,这时按钮的样式因为有 type 而被系统自己覆盖了,十分无奈,而且没法办法让这个 type 在没有值时并不存在。
我顺手搜了一下,发现很多年前就有人在说这个问题了,但现在依然有。