当前位置: 首页 > Web前端 > CSS

拒绝JavaScript,这三大CSS技巧你一定要用上

时间:2023-03-31 13:34:50 CSS

本文介绍了三大CSS技巧,完全可以在你的项目中替代JavaScript,一起来看看这些技巧吧。:active伪类和CSS数据上报超实用超高频。:empty伪类使用得很好。:only-child伪类1.:active伪类与CSS数据上报如果想知道两个按钮的点击率,CSS开发者可以自己动手,不用麻烦JavaScript开发者埋头苦干:.button-1:active::after{内容:url(./pixel.gif?action=click&id=button1);显示:无;}.button-2:active::after{内容:url(./pixel.gif?action=click&id=button2);display:none;}此时,当按钮被点击时,会将相关的行为数据上报给服务器。即使禁用它也无法停止JavaScript。方便快捷,特别适合A/B测试。2、超实用超高频使用的:empty伪类:empty伪类用于匹配空标签元素,例如:

.cs-empty:empty{宽度:120px;填充:20px;border:10pxdashed;}此时div元素会匹配:empty伪类,显示虚线框,如图2.1隐藏空元素例如模块中的内容是动态的,可能是一个列表,或者按钮,这些模块容器中往往会包含一些影响布局的CSS属性,比如margin和padding属性等。当然,当这些模块中有内容时,布局显示效果很好,但是一旦这些模块中的内容modules为空,页面会出现一大片明显的空白,效果不好。这种情况最好使用:empty伪类来控制:.cs-module:empty{display:none;}无需额外的JavaScript逻辑判断,直接使用CSS即可实现动态样式效果。唯一需要注意的是当list内容缺失时,一定要去掉空格,否则:empty伪类匹配不到。2.2缺失字段智能提示例如下面的HTML
姓名:
张三
性别:
手机:
邮箱:
用户部分信息字段缺失,开发者应使用其他占位符表示此处无内容,如破折号(-)或直接使用文字提示。但是多年的开发经验告诉我,开发者很容易忘记这里的特殊处理,最终导致布局混乱,信息难以理解。dt{float:left;}但是现在,我们不用担心这样的配合问题,我们可以直接用CSS来处理这种情况,代码很简单:dd:empty::before{content:'none';color:gray;}此时字段缺失后的布局效果如下:2.3数据为空,提示实际开发中有很多类似的场景。比如表中的remark信息经常为空,可以这样处理:td:empty::before{content:'-';color:gray;}另外还有一类典型场景需要用到:empty伪类,即动态Ajax加载数据为空。新用户进入产品时,很多模块内容是不可用的。如果以前,我们需要在Javascript代码中做if判断,如果没有值,就得吐出“无结果”或“无数据”的信息。但是现在,有了:empty伪类,只需将工作交给CSS即可。例如:.cs-search-module:empty::before{content:'Nosearchresults';显示:块;行高:300px;文本对齐:居中;color:gray;}另一个例子:.cs-article-module:empty::before{content:'你还没有发表任何文章';显示:块;行高:300px;文本对齐:居中;color:gray;}总之这个方法非常好用,可以节省很多开发时间,同时有更好的体验和更方便的维护,因为可以使用相同的类名来保持全站提示信息一致:.cs-article-module:empty::before{content:'Nodatayet;显示:块;行高:300px;文本对齐:居中;color:gray;}3.善用:only-child伪类:only-child是一个非常强大的伪类,尤其是在处理动态数据时。它可以节省大量编写JavaScript逻辑的成本。:only-child表示匹配一个没有任何兄弟元素的元素。例如,下面的p元素可以匹配:only-child伪类,因为它前后没有其他兄弟元素:确定删除该内容吗?

.icon元素后面虽然有删除的文字,但是因为没有标签嵌套,所以是匿名文字,所以不影响.icon元素去匹配:only-child伪类.特别需要说明的是,需要使用:only-child伪类的场景是动态场景,即固定的小模块。根据使用场景,可能包含一个子元素,也可能包含多个子元素。元素数量不同,布局方式也不同。不同的是,这是:only-child伪类大放异彩的时候。例如,加载模块中可能只有一张加载图片,也可能只是加载说明文字,或者加载图片和加载文字同时出现。在这种情况下,:only-child伪类非常有用。HTML如下:
Loading...

Loading...

我们不需要在父元素上指定额外的类名来控制不同状态的样式,只需要使用:only-child伪类可以让布局在各种状态下都很好。.cs-loading{高度:150px;位置:相对;文本对齐:居中;/*与截图无关,用于截图*/border:1pxdotted;}/*图片和文字同时存在时,中间留一些空隙*/.cs-loading-img{width:32px;高度:32px;顶部边距:45px;垂直对齐:底部;}.cs-loading-p{边距:.5em00;color:gray;}/*只有图片时绝对居中定位*/.cs-loading-img:only-child{position:absolute;左:0;右:0;顶部:0;底部:0;margin:auto;}/*onlytext当行号近似垂直居中时*/.cs-loading-p:only-child{margin:0;line-height:150px;},效果如下CSS进阶技巧另一篇:【Tips】CSS属性值的巧妙运用正则匹配选择器关注公众号,第一时间收到最新文章。如果对你有一点帮助,可以点赞、点赞、收藏,也可以小额打赏作者,鼓励作者写出更多更好的文章。