项目开发中的css小技巧

三个CSS技巧你一定用的上

本文介绍三个非常棒棒的CSS技巧,完全可以在你的项目中代替JavaScript,一起来看看这些技巧吧。

  • :active伪类与CSS数据上报
  • 超实用超高频使用的 :empty伪类
  • 用好 only-child伪类

1. :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测试。

2. 超实用超高频使用的:empty 伪类

:empty 伪类用来匹配空标签元素,例如:

<div class="cs-empty"></div>

.cs-empty:empty{
    width: 120px;
    padding: 20px;
    border: 10px dashed;
}

此时,div 元素就会匹配:empty伪类,呈现出虚线框,如下图
empty伪类

2.1 隐藏空元素

例如,某个模块里的内容是动态的,可能是列表,也可能是按钮,这些模块容器常包含影响布局的CSS属性,如margin、padding属性等。当然,这些模块里面有内容的时候,布局显示效果是非常好的,然儿一旦这些模块里面的内容为空,页面上就会有一块很大的明显的空白,效果就不好,这种情况下使用:empty伪类控制一下就再好不过了:

2.2 字段缺失智能提示

例如,下面的HTML:

<dl>
    <dt>姓名:</dt>
    <dd>张三</dd>
    <dt>性别:</dt>
    <dd></dd>
    <dt>手机:</dt>
    <dd></dd>
    <dt>邮箱:</dt>
    <dd></dd>
</dl>

用户某些信息字段是缺失的,此时由于开发人员应该使用其他占位字符示意这里没有内容,如短横线(-)或者直接使用文字提示。但是多年的开发经验告诉我,开发人员非常容易忘记这里的特殊处理,最终导致布局混乱,信息难懂。

dt {
    float: left;
}

但如今,我们就不用担心这样的合作问题了,直接使用CSS就可以处理这种情况,代码很简单:

dd:empty::before {
    content: '暂无';
    color: gray;
}

此时字段缺失后的布局效果如下:
字段缺失后的布局

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伪类,因为其前后没有其他兄弟元素:

<div class="cs-confirm">
    <!-- 可以匹配:only-child伪类 -->
    <p class="cs-confirm-p">确定删除该内容?</p>
</div>

虽然.icon元素后面有删除文字,但由于没有标签嵌套,是匿名文本,因此不影响.icon元素匹配:only-child伪类。

尤其需要使用:only-child伪类的场景是动态场景,也就是某个固定小模块,根据场景的不用,里面可能是一个子元素,也可能是多个子元素,元素个数不同,布局方式也不同,此时就是:only-child伪类大放异彩的时候。例如,某个加载元素(loading)模块里面可能就只有一张加载图片,也可能仅仅就是一段加载描述文字,也可能是加载图片和加载文字同时出现,此时:only-child伪类就非常好用。

HTML示意如下:

<!-- 1. 只有加载图片 -->
<div class="cs-loading">
    <img src="./loading.png" class="cs-loading-img">
</div>
<!-- 2. 只有加载文字 -->
<div class="cs-loading">
    <p class="cs-loading-p">正在加载中...</p>
</div>
<!-- 3. 加载图片和加载文字同时存在 -->
<div class="cs-loading">
    <img src="./loading.png" class="cs-loading-img">
    <p class="cs-loading-p">正在加载中...</p>
</div>

我们无需在父元素上专门指定额外的类名来控制不同状态的样式,直接活用:only-child伪类就可以让各种状态下布局都良好。

.cs-loading {
    height: 150px;
    position: relative;
    text-align: center;
    /* 与截图无关,截图示意用 */
    border: 1px dotted;
}
/* 图片和文字同时存在时在中间留点间距 */
.cs-loading-img {
    width: 32px; height: 32px;
    margin-top: 45px;
    vertical-align: bottom;
}
.cs-loading-p {
    margin: .5em 0 0;
    color: gray;
}
/* 只有图片的时候居中绝对定位 */
.cs-loading-img:only-child {
    position: absolute;
    left: 0; right: 0; top: 0; bottom: 0;
    margin: auto;
}
/* 只有文字的时候行号近似垂直居中 */
.cs-loading-p:only-child {
    margin: 0;
    line-height: 150px;
}

效果如下

在这里插入图片描述
以上便是平时开发中一些简单css小技巧,感谢您的观看!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行HTMLCSS、JS和小程序开发的实习期间,我有以下几点收获和感悟: 1. 掌握了前端开发技术:通过实习,我深入了解了HTMLCSS和JS的基础知识和技术细节。我学会了使用HTML构建网页结构,使用CSS进行页面布局和样式设计,以及使用JS实现交互效果和动态功能。这些技术的掌握为我日后的前端开发提供了坚实的基础。 2. 熟悉了小程序开发:在实习,我有机会参与小程序开发项目。通过学习和实践,我了解了小程序的开发流程、组件和API的使用,以及小程序的调试和发布。这让我对小程序开发有了更深入的理解,并且能够独立完成小程序的开发任务。 3. 实践了项目管理和团队协作:在实习期间,我参与了具体项目开发和管理。我学会了制定项目计划、分配任务、管理进度,并与团队成员进行有效的沟通和协作。这让我更好地理解了项目开发的流程和团队合作的重要性。 4. 锻炼了问题解决能力:在实际开发,经常会遇到各种问题和挑战。通过解决这些问题,我锻炼了自己的问题解决能力和调试技巧。我学会了查找文档和资料、借助社区和论坛的力量,以及与同事共同思考和解决问题。 5. 增强了对用户体验的重视:在开发过程,我更加注重用户体验的设计和优化。我学会了从用户的角度思考,关注用户需求,以及通过界面设计、交互设计和性能优化等手段提升用户体验。这使我意识到用户体验对于产品的重要性,并且在实践不断提升自己的设计能力。 总的来说,这次实习让我获得了实际项目经验,提升了前端开发技术和团队合作能力。我也意识到学习是一个不断探索和成长的过程,我会继续努力学习和提升自己,为未来的职业发展打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值