小程序/uniapp支持的css选择器一览

本次测试主要参考文档为w3school CSS 选择器参考手册

(主要是安卓/ios/微信小程序的css选择器兼容)

入坑uniapp/小程序过程中看到dcloud/微信对支持的css选择器的描述只有六个,
分别是.class,#id,element,element,element,:before,:after
但是看到dcloud给uniapp写的花里胡哨的uni的ui库,
还有各种花里胡哨的小程序,
并且uniapp还表明支持之前各种无dom的ui库,
所以我觉得事情并没有这么简单,
趁着元旦放假,抽出一下午时间,
本单身肥宅猿测试了下w3c提供的选择器,
也当是踩一回uni/小程序的坑吧

具体支持情况见下表(Y表示支持,N表示不支持)
选择器css版本h5安卓ios微信小程序备注
.classcss1YYYY
#idcss1YYYY
*css2YNNN
elementcss1YYYY注意类似于html,body这样的选择器,
非h5端会被转成page
element,elementcss1YYYY
element>elementcss2YYYY
element+elementcss2YYYY
[attribute]css2YYYY1.h5端使用uniapp标签属性时,
编译后该属性可能会消失,
导致该选择器”失效”,
如,viewhover-class属性
2.微信小程序/app端使用非规范
的属性,如,
<view qwe-rt="asd"></view>
在编译到微信小程序/app时会消失
同样导致该选择器”失效”
[attribute=value]css2YYYY[attribute]
[attribute~=value]css2YYYY[attribute]
[attribute|=value]css2YYYY[attribute]
:linkcss1Y没有找到办法在非h5上
生成a标签
:visitedcss1Y没有找到办法在非h5上
生成a标签
:activecss1YYYY在非h5的其他三端上表现
<view hover-class="xxx">属性一致
(只测试了view标签与text标签)
:hovercss1YYYY表现基本同:active
但是要取消该状态
是要点击其他标签
(让hover转移到其他标签上)
:focuscss2NNNN1.h5中会把<input />编译成一个
uni-input>div>input+div.input-placeholder的结构,
在css代码中写的类似于
input:focus{background: #F00;}的样式,
基本上是设置在uni-input这个标签上的,
所以期望input的focus样式并不会出现
(所以h5是因为uni-app对
css代码的编译逻辑
导致不支持input的:focus选择器)
2.类似于button这些本来在正常html标签中
是能在点击时获得focus状态的
但在uniapp中,h5会编译成uni-button标签,
这些标签没发现它能在点击后获得focus状态
3.其他三端虽然没像如上描述那样转,
(直接转成一个input._input,button._button)
但是却不支持focus状态
不知道是不是官方(dcloud/微信)故意的
:first-lettercss1YYYY注意别踩坑
:first-linecss1YYYY注意别踩坑
:first-childcss2YYYY
:beforecss2YYYY
:aftercss2YYYY
:lang(language)css2YNNN
element1~element2css3YYYY
[attribute^=value]css3YYYY[attribute]
[attribute$=value]css3YYYY[attribute]
[attribute*=value]css3YYYY[attribute]
:first-of-typecss3YYYY
:last-of-typecss3YYYY
:only-childcss3YYYY
:nth-child(n)css3YYYY
:nth-last-child(n)css3YYYY
:nth-of-type(n)css3YYYY
:nth-last-of-type(n)css3YYYY
:last-childcss3YYYY
:rootcss3YNNNh5端的支持只能是
在app.vue的style标签里写的
或者@import的样式里才能用:root
:emptycss3YYYY
:targetcss3Y没有找到办法在非h5上
实现锚点
:enabledcss3NNNN类似于:focus,
可使用类似于
button:not([disabled])
的方案代替
:disabledcss3NNNN类似于:focus,
但是可以使用类似于
button[disabled]
的方案代替
但是只写button[disabled]
权重可能不够
h5端写input[disabled]无效,
原因见:focus备注
但是非h5端可以写input[disabled]
:checkedcss3NNNN:disabled
:not(selector)css3YYYY
::selectioncss3YYNios:N
安卓:Y

至于其他厂商的小程序
我也没有踩坑经验
但是可参考微信小程序的兼容
毕竟是微信把小程序推起来之后
其他厂商才开始出小程序
(最开始的时候支付宝小程序抄微信小程序源码事件还有人记得不)

(好像不弄套自己家的小程序出来,自己就不是大厂了似得)

求求你别更新了,我学不过来了.jpg

手动狗头.jpg

    原文作者:643104191
    原文地址: https://segmentfault.com/a/1190000017582162
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞