本文介绍三个非常棒棒的CSS技巧,完全可以在你的项目中代替JavaScript,一起来看看这些技巧吧。
:active伪类与CSS数据上报
超实用超高频使用的:empty伪类
用好:only-child伪类
- :active伪类与CSS数据上报
如果想要知道两个按钮的点击率,CSS开发者可以自己动手,无需劳烦JavaScript开发者去埋点:
.button-1:active::after {
content: url(./pixel.gif?action=click&id=button1);
display: none;
}
.button-2:active::after {
content: url(./pixel.gif?action=click&id=button2);
display: none;
}
复制代码此时,当点击按钮的时候,相关行为数据就会上报给服务器,这种上报就算把JavaScript禁用掉也无法阻止,方便快捷,特别适合A/B测试。 - 超实用超高频使用的:empty 伪类
:empty 伪类用来匹配空标签元素,例如:
.cs-empty:empty{
width: 120px;
padding: 20px;
border: 10px dashed;
}
复制代码此时,div 元素就会匹配:empty伪类,呈现出虚线框,如下图
2.1 隐藏空元素
例如,某个模块里的内容是动态的,可能是列表,也可能是按钮,这些模块容器常包含影响布局的CSS属性,如margin、padding属性等。当然,这些模块里面有内容的时候,布局显示效果是非常好的,然儿一旦这些模块里面的内容为空,页面上就会有一块很大的明显的空白,效果就不好,这种情况下使用:empty伪类控制一下就再好不过了:
.cs-module:empty {
display: none;
}
复制代码无需额外的JavaScript逻辑判断,直接使用CSS就可以实现动态样式效果,唯一需要注意的,当列表内容缺失的时候,一定要把空格也去掉,否则:empty伪类不会匹配。
2.2 字段缺失智能提示
例如,下面的HTML
-
姓名:
- 张三 性别: 手机: 邮箱:
2.3 数据为空提示
实际开发中类似的场景还有很多。例如,表格中的备注信息经常都是空的,此时可以这样处理:
td:empty::before{
content: ‘-’;
color: gray;
}
复制代码除此之外,还有一类典型场景需要用到:empty伪类,那就是动态Ajax加载数据为空的情况。当一个新用户进入一个产品的时候,很多模块内容是没有的。要是在过去,我们需要在Javascript代码中做 if 判断,如果没有值,我们要吐出”没有结果“或者”没有数据“的信息。但是现在,有了:empty伪类,直接把这个工作交给CSS就可以了。例如:
.cs-search-module:empty::before{
content: ‘没有搜索结果’;
display: block;
line-height: 300px;
text-align: center;
color: gray;
}
复制代码又如:
.cs-article-module:empty::before{
content: ‘您还没有发布任何文章’;
display: block;
line-height: 300px;
text-align: center;
color: gray;
}
复制代码总之,这种方法非常好用,可以节约大量的开发时间,同时体验更好,维护更方便,因为可以使用同一个类名使整站提示信息保持一致:
.cs-article-module:empty::before{
content: '暂无数据;
display: block;
line-height: 300px;
text-align: center;
color: gray;
}
复制代码3. 用好:only-child伪类
:only-child是一个很给力的伪类,尤其在处理动态数据的时候,可以省去很多写JavaScript逻辑的成本。
:only-child 意思是匹配没有任何兄弟元素的元素。例如,下面的 p 元素可以匹配:only-child伪类,因为其前后没有其他兄弟元素:
确定删除该内容?
正在加载中...
正在加载中...
本文代表个人观点,内容仅供参考。若有不恰当之处,望不吝赐教!
关注公众号,第一时间接收最新文章。如果对你有一点点帮助,可以点喜欢点赞点收藏,还可以小额打赏作者,以鼓励作者写出更多更好的文章。