最近看过我 文章 的都 知道 :我最近在负责一个微信小程序的项目,在其中遇到了很多有趣的事和一些[奇思妙想]。本文的背景就是某天早上我看着w XM l文件中一堆 wx:if/else 和 hidden 突然很烦躁,先不说wx:if导致的性能问题,就是标签上也是冗杂的。
接着上一篇文章【 微信小程序自定义组件库yPicker组件分析及省市区三级联动实现 】,在其中我分析了这么一个例子 —— 省市区 三级联动的自定义实现,在其中有详细代码这里就不多说,说说如何调用:
我 当时 是这么想的:一方面出于[不在JavaScript里写太多东西]的考虑,另一方面,由于省、市、区我是分别用三个变量来实现的,所以JavaScript里就关注这三个变量,比如之间的空格或其它东西都拿到wx ML 文件里。就像这样:
<view class="departments location" bindtap="fixedshow"> <view class="depart_t IT le">所在位置</view> <view wx:if="{{ PR ovinces && citys& am p; &areas}}" class="placeholder depart_content">{{provinces}} {{citys}} {{areas}}</view> <view class="placeholder depart_content befselect" wx:else>请选择当前位置</view> <view class="desc">如有变动请修改后再次提交</view> </view>
(因为调用涉及到后来改动的只有在点击弹窗里的[确认]按钮时在事件中将那三个变量分别赋给这段代码中出现的三个变量 —— 否则会只要改动不管是点取消还是确认已经发生 改变 了,这样不妥!)
其布局是这样的:
.departments{ width: 100%; h ei ght: 96rpx; dis play : flex; align -i tems: center ; font- Size: 36rpx; font-weight : 347; text-overflow: ellipsis; overflow: hidden; white -s pace: nowrap; } .location{ position: relative; border-bottom: 1rpx solid rgba(0,0,0,.009); display: flex; align-items: flex-start; padding -t op: 20rpx; } .desc{ position: absolute; right: 19rpx; bottom: 4rpx; color: rgb(63,142,255); font-size: 23rpx; } .departments .depart_title{ width: 20%; } .departments .depart_content{ m arg in-left: 10%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } .departments .placeholder{ width: 69%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
在决定了要替换这里的wx:if以后,你首先要想:用什么替换?
wx:if 作用是判断[ 是否 存在],如果不存在(条件不满足)就切换到 wx:else 或是 wx:elif 的逻辑里!
OK,想到这里,你 应该 能想到一个css 伪类 : :empty !它的作用和我们想要的效果一样:判断如果元素(内容)为空的话…
我迅速对代码做了改动:
<view class="departments location" bindtap="fixedshow"> <view class="depart_title">所在位置</view> <view class="placeholder depart_content">{{provinces}} {{citys}} {{areas}}</view> <view class="desc">如有变动请修改后再次提交</view> </view>
然后在class - depart_content上加了这个伪类:
.placeholder:empty :: before{ content: "请选择当前位置"; color: rgba(0,0,0,.6); }
一片空白!
经过查阅资料: :empty 伪类表示如果标签内容为空,那么内容区域如果带有空格,也是不会被匹配到的!
在写标签时一定要注意这 一点 :标签内是否有空格或换行!(换行常常被解析为一个空格)
遇到非单标签一定注意闭合标签!
最后解决办法是:在js中将三个变量用空格相连接,再渲染到页面上即可!
(其实这里是一个自定义的选择器,而自动定位就是往高德地图发送了请求获取到省市区字段而已,代码就不写了。。。)
到这里我们会发现一个事:上面我们不仅用了empty伪类,还用了before伪元素!
其实这一点很平常 —— 毕竟只有empty是添加不了内容的(似乎纵观css,只有before和after这样伪元素可以向页面中添加内容,不管是文字还是图片之类的)
我认为更应该关注到的是两个地方:
伪元素中没有用position定位!一般来说对一个(存在内容的)元素来说,为其设置[前置](before)/[后置](after)样式都需要定位:规定其显示的地方。不然大概率伪元素中的文字是显示不出来的,通过本文的empty可以猜测:他被原本存在的内容覆盖住了。 从第一点可以得出: :before 和 :after 伪元素向标签内插入内容、图形,并不会影响empty伪类的匹配!这个特性实用的一批。
由上,可见此伪类最大的用处就是[字段缺失提示]!这是非常实用的。而且把这项 任务 交给CSS也可以减轻许多[(布局)负担]、体验更好、维护起来也更方便!
比如:我在项目优化时就将所有有请求的字段都加上了 统一 类名:
.ym-empty:empty::before{ content: "暂无数据,请重试", display: block; text-align: center; color: rgba(0,0,0,.6); /** 其它定位、字体更改操作 */ }
到此这篇关于CSS伪类:empty让我眼前一亮的文章就介绍到这了,更多相关CSS伪类empty内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
总结
以上是 为你收集整理的 CSS伪类:empty让我眼前一亮(实例代码) 全部内容,希望文章能够帮你解决 CSS伪类:empty让我眼前一亮(实例代码) 所遇到的问题。
如果觉得 网站内容还不错, 推荐好友。
查看更多关于CSS伪类:empty让我眼前一亮(实例代码)的详细内容...