CSS伪类:empty让我眼前一亮

CSS伪类:empty让我眼前一亮最近看过我文章的都知道 我最近在写一个微信小程序的项目 在其中遇到了很多有趣的事和一些 奇思妙想 本文的背景就是今天早上我看着 wxml 文件中一堆 wx if else 和 hidden 突然很烦躁 先不说 wx if 的性能问题 就是标签上也是冗杂的 接着上一篇文章 微信小程序自定义组件库 yPicker 组件分析及省市区三级联动实现 在其中我分析了这么一个例子 省市区三级联动的自定义实现 在其中有详细代码这里就不多说 说说如何调用 我当时是这么想的 一方面出于 不在 JavaScript 里写太多东西 的考虑

最近看过我文章的都知道:我最近在负责一个微信小程序的项目,在其中遇到了很多有趣的事和一些“奇思妙想”。本文的背景就是某天早上我看着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; } 

location


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); } 

wx
一片空白!

经过查阅资料::empty伪类表示如果标签内容为空,那么内容区域如果带有空格,也是不会被匹配到的!


到这里我们会发现一个事:上面我们不仅用了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); / 其它定位、字体更改操作 */ } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205292.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午6:21
下一篇 2026年3月19日 下午6:21


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号