最近看过我文章的都知道:我最近在负责一个微信小程序的项目,在其中遇到了很多有趣的事和一些“奇思妙想”。本文的背景就是某天早上我看着wxml文件中一堆wx:if/elsehidden突然很烦躁,先不说wx:if导致的性能问题,就是标签上也是冗杂的。


接着上一篇文章【微信小程序自定义组件库yPicker组件分析及省市区三级联动实现】,在其中我分析了这么一个例子 —— 省市区三级联动的自定义实现,在其中有详细代码这里就不多说,说说如何调用:

我当时是这么想的:一方面出于“不在JavaScript里写太多东西”的考虑,另一方面,由于省、市、区我是分别用三个变量来实现的,所以JavaScript里就关注这三个变量,比如之间的空格或其它东西都拿到wxml文件里。就像这样:

<view class="departments location" bindtap="fixedshow"><view class="depart_title">所在位置</view><view wx:if="{{provinces&&citys&&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%;height: 96rpx;display: flex;align-items: center;font-size: 36rpx;font-weight: 347;text-overflow: ellipsis;overflow: hidden;white-space: nowrap;
}
.location{position: relative;border-bottom: 1rpx solid rgba(0,0,0,.009);display: flex;align-items: flex-start;padding-top: 20rpx;
}.desc{position: absolute;right: 19rpx;bottom: 4rpx;color: rgb(63,142,255);font-size: 23rpx;
}
.departments .depart_title{width: 20%;
}
.departments .depart_content{margin-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这样伪元素可以向页面中添加内容,不管是文字还是图片之类的)

我认为更应该关注到的是两个地方:

  1. 伪元素中没有用position定位!一般来说对一个(存在内容的)元素来说,为其设置“前置”(before)/“后置”(after)样式都需要定位:规定其显示的地方。不然大概率伪元素中的文字是显示不出来的,通过本文的empty可以猜测:他被原本存在的内容覆盖住了。
  2. 从第一点可以得出::before:after 伪元素向标签内插入内容、图形,并不会影响empty伪类的匹配!

这个特性实用的一批。


由上,可见此伪类最大的用处就是“字段缺失提示”!这是非常实用的。而且把这项任务交给CSS也可以减轻许多“(布局)负担”、体验更好、维护起来也更方便!

比如:我在项目优化时就将所有有请求的字段都加上了统一类名:

.ym-empty:empty::before{content: "暂无数据,请重试",display: block;text-align: center;color: rgba(0,0,0,.6);/** 其它定位、字体更改操作 */
}

CSS伪类:empty让我眼前一亮相关推荐

  1. :empty css 可以用在哪些标签,CSS伪类:empty让我眼前一亮(实例代码)

    最近看过我文章的都知道:我最近在负责一个微信小程序的项目,在其中遇到了很多有趣的事和一些"奇思妙想".本文的背景就是某天早上我看着wxml文件中一堆wx:if/else和hidde ...

  2. CSS 伪类选择器:如何使用 CSS3 伪类

    CSS 伪类选择器:如何使用 CSS3 伪类 CSS3 是个好东西,但也很容易被她的变形(transform)和动画(其中许多特性因浏览器厂商而异)特性所迷惑,因而忘了那些已经被添加到标准规范中的最为 ...

  3. css修改select选择框option被选中的背景颜色_这 16 个 CSS 伪类,助你提升布局效率!

    作者:Chidume Nnamdi 译者:前端小智 来源:mediuum 大家都说简历没项目写,我就帮大家找了一个项目,还附赠[搭建教程]. css 伪类是用于向某些选择器添加特殊的效果,是动态的,指 ...

  4. 2天驾驭div+css_老婆竟然只知道几个css伪类,不行得惩罚她了

    最近在教我老婆学习前端,她说想要学习前端,自己在家赚点外快,自己赚点家用.我也拗不过她,而且其实我也挺佩服的.所以就教她了.最近我想考一考她对css中伪类的了解,所以就问了她了解css多少个伪类,伪类 ...

  5. 【重识 HTML + CSS】CSS 伪类、伪元素

    CSS 伪类.伪元素 伪类 (pseudo-classes) 动态伪类 (dynamic pseudo-classes) :link.:visited.:hover.:active :focus 目标 ...

  6. CSS 伪类选择器详解:为网页添加交互与美感

    介绍 CSS 伪类选择器是一种非常有用的 CSS 选择器,它能够根据元素的状态.位置或其他属性来选择元素并应用样式.伪类选择器的语法为 :pseudo-class,其中 pseudo-class 是一 ...

  7. CSS伪类选择器详细讲解

    前言 伪类选择器在CSS中起到的作用可以说是至关重要的,如果CSS没有伪类选择器,有很多效果都要借助js来完成,这样不仅代码量增加,维护起来你难度也大.这样程序员的工作量大,也违背了CSS诞生的作用, ...

  8. CSS伪类布局菜单框学习+总结

    CSS伪类 伪类的定义是:添加一些选择器的特殊效果. 选择器常见的有:id,tag,class,属性[attr=attrval]等.我暂时还不懂这个伪类是什么意思,但是我们知道CSS是html网页的表 ...

  9. CSS 伪类: 什么是 CSS 伪类?CSS 伪类怎么分类? CSS 伪类有哪些?以及分类对应的伪类

    本章讲解的内容为 CSS 伪类 . 废话不多说, 直接上代码以及图例 (为了让大家方便阅读, 都有自己验证过程的一些图片作为分享) . 一: 什么是 CSS 伪类? 1. CSS 伪类是用来添加一些 ...

最新文章

  1. 在非互联网公司?!算法工程师的工作内容及心得建议
  2. javascript宿主对象之window.history
  3. 【Android 安装包优化】动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )
  4. 服务器维护菜单,Romley平台BIOS常用操作
  5. 包含min函数的栈 python_面试题_设计包含 min函数的栈
  6. 计算机学院五名学生开发手语app,大学生团队研发成功“聋人自然手语翻译器”APP...
  7. layUI数据表格可编辑表格单元格值修改之后获取修改前的值
  8. 图片文字提取之路-01预处理
  9. 世界名着100部简介
  10. 华为交换机基于IP地址划分VLAN配置实验
  11. 校园网连不上,火绒检测dns错误但修复不了,360直接搞定,nice!
  12. android EditText 设置弹出数字输入法键盘
  13. 零基础如何入门学习电脑编程?
  14. 目标检测评价指标:精确度mAP
  15. 科技爱好者周刊(第 153 期):机器翻译是对译者的侮辱吗?
  16. 支付宝小程序控制硬件②】 全网首篇,个人支付宝小程序控制智能硬件esp8266,从设计电路到设计协议控制两盏LED灯调节亮度。
  17. java —— 不高兴的津津
  18. 解决:Linux版百度云客户端 BCloud网络错误 问题
  19. python 下载大文件,断点续传 | Python工具类
  20. 蔡高厅老师 - 高等数学阅读笔记 - 09 - 罗必塔法则 - 和最值定理和函数的单调性最值 (37、38、39、40~43)

热门文章

  1. pandas数据清洗:案例详解 fillna函数 填补空缺值
  2. PowerBI也能做爬虫:爬取豆瓣Top电影排行榜
  3. 「COP26行动」中美发布气候行动联合宣言|应对气候变化时不我待,数据赋能势在必行
  4. sdddddddddddddddddddddd
  5. ROS TF原理和使用方法
  6. 用波特五力模型分析法针对对AI音箱进行竞争态势分析
  7. C语言复制文本文件(功能)
  8. 转基于BCV 和LogMiner 实现增量数据抽取的应用
  9. 【算法】用一行PHP代码画一个心形
  10. [原创]详细的C++连接数据库