纯CSS实现网站常用的五角星评分和分数展示交互效果

news/2024/4/28 16:06:55/文章来源:https://blog.csdn.net/weixin_34059951/article/details/89065640

最近做的一个项目涉及到评分和展示分数的模块,UI设计师也给了几个切好的图片,实现五角星评分方式很多,本质爱折腾的精神和对性能追求以及便于维护的考虑,搜集和尝试了很多方式,最终采用了纯css驱动的实现方式完成评分和展示分数的功能,没有js,也就意味着没判断逻辑,代码出错的几率更少,也更便于维护,在此,把这个功能的实现的过程记录和分享一下,一起学习交流。

原文收录在我的 GitHub博客 (https://github.com/jawil/blog) ,喜欢的可以关注最新动态,大家一起多交流学习,共同进步。

五角星的实现

1.图片或者字体图标

不极致追求性能的话,直接利用设计师给的png或者jpg啥的,或者直接转成base64.

2:利用Fontawesome 图标库,其实只是一种矢量字体。

HTML:

<div class="icon"></div>

CSS:

@import url(http://netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css);.icon:before {content: '\f005';font-family: FontAwesome;
}

在线预览地址

3.利用css3描绘拼凑一个五角星。

基本原理:利用transparent的透明不可见和transform转换拼接一个正五角星。

HTML:

<div class="star-five"></div>

CSS:

.star-five{
width: 0;
height: 0;
color: red;
margin: 50px 0;
position: relative;
display: block;
border-left: 100px solid transparent;
border-right: 100px solid transparent;
border-bottom: 70px solid red;
transform:rotate(35deg);
}.star-five:before{
width: 0;
height: 0;
border-left: 30px solid transparent;
border-right: 30px solid transparent;
border-bottom: 80px solid red;
position: absolute;
top: -45px;
left: -65px;
color: white;
display: block;
content: "";
transform:rotate(-35deg);
}
.star-five:after{
width: 0;
height: 0;
display: block;
position: absolute;
color: red;
top: 3px;
left: -105px;
border-left: 100px solid transparent;
border-right: 100px solid transparent;
border-bottom: 70px solid red;
content: "";
transform:rotate(-70deg);
}

在线预览地址

不建议使用这种,因为选择之后改变颜色状态比较麻烦,改起来很不方便,不如前面几种方便好维护。

4.直接使用五角星符号

★?

简单粗暴,容易控制,品相协调,下面实现方式以★为准。




关于CSS的一些选择器

不用js来控制评分,当然不能错过强大的css选择器,这里就先介绍一下关于实现这个功能要用到的一些css选择器。

在介绍css强大的选择器之前,先普及一下“CSS radio/checkbox单复选框元素显隐技术”,又称“checkbox hack技术”。

1.checkbox hack技术

我们使用CSS一些特殊的选择器,然后配合单选框以及复选框自带的一些特性,可以实现元素的显示隐藏效果。然后通过一
些简单的扩展,我们可以不使用任何JavaScript代码实现类似:自定义的单复选框,“更多”展开与收起效果,选项卡切换
效果,或是多级下拉列表效果等等。相信很多前端开发人员都会遇到boss让修改checkbox和radio样式,毕竟自带的样式太丑了。后来我们发现修改自带样式
并不是那么容易,最后直接使出杀手锏——点击之后替换图片。
今天教大家一种方法,不用替换图片,随意修改样式。还是先看效果图:

`先讲一下原理:两个关键东东,一是伪类选择器:checked,表示对应控件元素(单选框或是复选框)选中时的样式;二就是加号+ 相邻兄弟选择器,这个符号表示选择后面的兄弟节点。于是,两者配合,就可以轻松自如控制后面元素的显示或者隐藏,或是其他样式了。
而如何让单复选框选中和不选中了,那就是label标签了哈,for属性锚定对应的单选框或是复选框,然后点击这里的label标签元素的时候,对应的单复选框就会选中或是取消选中。然后,就有上面的效果啦!`

这里只给一个radio单选框的代码,仅供参考:

HTML:

<div class="radio-beauty-container"><label><span class="radio-name">前端工程师</span><input type="radio" name="radioName" id="radioName1" hidden/><label for="radioName1" class="radio-beauty"></label></label><label><span class="radio-name">后端工程师</span><input type="radio" name="radioName" id="radioName2" hidden/><label for="radioName2" class="radio-beauty"></label></label><label><span class="radio-name">全栈工程师</span><input type="radio" name="radioName" id="radioName3" hidden/><label for="radioName3" class="radio-beauty"></label></label>
</div>

SCSS:

.radio-beauty-container {font-size: 0;$bgc: green;%common {padding: 2px;background-color: $bgc;background-clip: content-box;}.radio-name {vertical-align: middle;font-size: 16px;}.radio-beauty {width: 18px;height: 18px;box-sizing: border-box;display: inline-block;border: 1px solid $bgc;vertical-align: middle;margin: 0 15px 0 3px;border-radius: 50%;&:hover {box-shadow: 0 0 7px $bgc;@extend %common;}}input[type="radio"]:checked+.radio-beauty {@extend %common;}
}

美化radio单选框在线预览地址:点击我呀
美化checkbox复选框在线预览地址:点击我呀

更多关于这方面的介绍和例子可以参看张鑫旭大神的这篇文章:CSS radio/checkbox单复选框元素显隐技术

2.CSS一些选择器

HTML:

<div class="wrapper"><p class="test1">1</p><p class="test2">2</p><p class="test3">3</p><p class="test4">4</p><p class="test5">5</p>
</div>

CSS:

p{width:20px;line-height:20px;border:1px solid gray;text-align:center;font-weight: 700;
}
E + F: 相邻兄弟选择器 选择匹配F的元素,且该元素为所匹配E元素后面相邻的位置。
.test1+p{background-color:green;
}

E > F:子包含选择器 选择匹配F的元素,且该元素为所匹配E元素的子元素。
.wrapper>p{background-color:green;
}

E ~ F: 选择后面的兄弟节点们
.test2~p{background-color:green;
}

E::after,E::before: 伪元素选择器 在匹配E的元素后面(前面)插入内容
.test2::before{background-color:green;content:"前"
}
.test2::after{background-color:green;content:"后"
}

:not(E) 选择非 <E> 元素的每个元素。
.wrapper>:not(.test2){background-color:green;
}

:checked input:checked 选择每个被选中的input元素。

HTML:

<input type="radio" name="" id="" /><span>3333</span>

CSS:

input:checked+span{border:10px solid red;
}





这里只提一下本文要用到的CSS选择器,更多关于CSS3强大的选择器请移步这里:全面整理 CSS3 选择器的用法




实现评分模块

HTML:

 <div class="rating"><input type="radio" id="star5" name="rating" value="5" hidden/><label for="star5"></label><input type="radio" id="star4" name="rating" value="4" hidden/><label for="star4"></label><input type="radio" id="star3" name="rating" value="3" hidden/><label for="star3"></label><input type="radio" id="star2" name="rating" value="2" hidden/><label for="star2"></label><input type="radio" id="star1" name="rating" value="1" hidden/><label for="star1"></label></div>

关于input标签的隐藏,我这里只要用hidden属性实现隐藏,当然还有很多实现方式,只要input不占据文档的位置但是看不见就OK,我们需要隐藏单选框,且为可用性隐藏。这里还有几种方式仅供大家参考:

1. display: none;

 .rating >input {display: none;}

2. css3的clip

 .rating >input {position: absolute;clip: rect(0 0 0 0);}

3.opcity

.rating >input {position: absolute;opacity: 0;}

CSS:

    .rating {font-size: 0;display: table;}.rating > label {color: #ddd;float: right;}.rating > label:before {padding: 5px;font-size: 24px;line-height: 1em;display: inline-block;content: "★";}.rating > input:checked ~ label,.rating:not(:checked) > label:hover,.rating:not(:checked) > label:hover ~ label {color: #FFD700;}.rating > input:checked ~ label:hover,.rating > label:hover ~ input:checked ~ label,.rating > input:checked ~ label:hover ~ label {opacity: 0.5;}

在线预览地址






展示评分模块

用户评完分之后,会看到展示的分数,假设五个星星,满分10分。

展示评分就比较简单,放两个一模一样的html,五角星颜色不同,灰色的放在下面,评分的亮色放在上面,然后按照百分比显示分数。

HTML:

 <div class="star-rating"><div class="star-rating-top" style="width:50%"><span></span><span></span><span></span><span></span><span></span></div><div class="star-rating-bottom"><span></span><span></span><span></span><span></span><span></span></div></div>

CSS:

.star-rating {unicode-bidi: bidi-override;color: #ddd;font-size: 0;height: 25px;margin: 0 auto;position: relative;display: table;padding: 0;text-shadow: 0px 1px 0 #a2a2a2;}.star-rating span {padding: 5px;font-size: 20px;}.star-rating span:after {content: "★";}.star-rating-top {color: #FFD700;padding: 0;position: absolute;z-index: 1;display: block;top: 0;left: 0;overflow: hidden;white-space: nowrap;}.star-rating-bottom {padding: 0;display: block;z-index: 0;}

当接口返回的分数是5分的时候,刚好占据一半的星星,2星半,只要计算出百分比就行,只用管数据,用上vue.js数据驱动的特点来动态展示样式这个简直不要太容易。

在线预览地址:

本文方法好处在于,纯CSS驱动,各种切换根本不需要JS,省了不少JS,对于类似这种需求大家也可以举一反三,这里只提供一些思路,没有细说;同时图片背景比较小或者可以直接不使用图片,比起使用图片节省不少资源,和提高些许性能。但是,学习以及理解成本稍高,可能并不适用于所有同行,因此,此文适合喜欢“折腾”的童鞋。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_801982.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享一个基于Node的名片设计网站

我现在本职工作是UI设计&#xff0c;但是在工作中也喜欢了解和学习前端技术&#xff0c;这是小网站是我去年开始学习Node之后开发的个人项目。这个项目边学边做&#xff0c;断断续续也有半年时间吧&#xff0c;期间不断增加新功能&#xff0c;优化用户体验。现在因为想构想新项…

网站架构资料收集整理

1.系统概况图图1.1 系统架构概况图图1.2 较为完整的系统架构图2.系统使用的主要技术下列排名不分先后2.1前端JavaScript&#xff0c;html&#xff0c;css&#xff0c;silverlight&#xff0c;flashJqueryJavascript类库&#xff0c;用来简化html的操作&#xff0c;事件处理&…

阿里云服务器快速创建个人网站

宝塔面板快速创建个人网站 如今拥有一个私人的网站已经是一件非常轻松且简单的事情。通过以下的步骤可以帮助你创建一个属于自己的个人网站。不需要任何的技术基础。纯属小白。&#xff08;小编个人编辑&#xff0c;如有问题。还请大佬指点&#xff01;&#xff09;。 创建一…

最新Do Not Track标准问世:网站都应尊重用户选择

著名的Do Not Track&#xff08;请勿追踪&#xff09;设定&#xff0c;是在2009年就已经提上日程的&#xff0c;这个选项随后在过去几年中被加入到了所有主流的浏览器产品中&#xff0c;在选择该选项以后&#xff0c;浏览器就会向网站发出一个通知&#xff0c;要求网站不对用户…

《社交网站界面设计(原书第2版)》——2.6 重写本

2.6 重写本 2008年在Adaptive Path公司MX周的一次演讲中&#xff0c;Matt“blackbeltjones”Jones在谈到Dopplr&#xff08;为经常光顾社交网络的人所创建的网站&#xff09;时&#xff0c;建议将重写本的隐喻作为“社交工具的模型”&#xff1a;我们的内容会变得更加简明&…

前端工程师必备的17个实用网站

前端框架、素材网站 目录 一、配色类网站 二、图标类网站 三、插件类网站 四、素材类网站 五、字体类网站 六、工具类 七、UI框架 UI框架&#xff1a; http://element-cn.eleme.io/#/zh-CN/component/typographyhttps://muse-ui.org/#/zh-CNhttps://youzan.github.io/v…

搭建网站必不可少的知识5

域名的解析和绑定方法解析就是将网站的IP地址翻译为域名&#xff0c;方便记忆。我们在域名和网站空间购买后就要进行解析了&#xff0c;那么怎么解析呢&#xff1f;在域名中选择要进行解析的域名&#xff0c;点击“解析” 点击“添加解析”记录类型是A记录&#xff0c;主机记录…

html一个页面中切换多个页面_一个页面多个重复链接,对SEO有作用吗?

在以往的SEO工作中&#xff0c;我们经常会发现一个问题&#xff0c;很多SEO人员&#xff0c;为了提高目标页面的关键词排名&#xff0c;经常是在同一页面&#xff0c;发布大量重复指向目标页面的链接。 那么&#xff0c;一个页面&#xff0c;多个重复链接&#xff0c;对SEO有作…

大型网站技术架构

最近我在阅读 2 本关于大型网站架构的书&#xff1a;《大型网站技术架构——核心原理与案例分析》李智慧、《大型网站系统与 Java 中间件实践》曾宪杰。 我期望从这些书中学习到大型网站是如何做架构的&#xff0c;这个过程会遇到什么问题。当看完这 2 本书后&#xff0c;我总结…

云服务器 ECS 搭建WordPress网站:安装 WordPress

云服务器 ECS 搭建WordPress网站&#xff1a;安装 WordPress 安装 WordPress请先下载最新版的 WordPress&#xff0c;网址&#xff1a; https://cn.wordpress.org/ 。也可直接到阿里云市场选择WordPress镜像完成一键部署 操作步骤 1.将下载的安装包解压缩。 2.打开 Xshell&…

我的网站搭建 (第九天) 博客统计排行

2019独角兽企业重金招聘Python工程师标准>>> 在阅读计数功能之后&#xff0c;就可以可根据每篇博客的阅读量来对博客进行热门统计排行了&#xff0c;如阅读周榜&#xff0c;月榜&#xff0c;总榜。基本上只要实现其中一个&#xff0c;其他两个也能照着做出来&#x…

网站服务器去掉小尾巴,新浪微博来自360浏览器怎么取消 更改网页版小尾巴方法...

当大家使用电脑登录新浪微博发微博时&#xff0c;会发现微博下方会有来自360安全浏览器的文字&#xff0c;看上去很坑爹有木有&#xff01;其实这也算是微博的小尾巴&#xff0c;去掉的方法并不是在微博里设置&#xff0c;而是在大家使用360浏览器上进行更改&#xff0c;小编将…

VS“新建网站”与“新建Asp.Net Web 应用程序”的区别

今天新建网站的时候&#xff0c;发现&#xff0c;原来新建网站有两种方法。 1.原来一直用的是直接新建---网站 然后添加后解决方案的项目名称是路径的名称 2.还有一种是新建--项目&#xff0c;然后选web--新建asp.net.web 项目名称是&#xff1a; 新建网站与新建Asp.Net Web 应…

怎样拥有一个网站?从“域名注册”到“网站成功运行”全程概况总结!

根据个人多年建站经验&#xff0c;总结出从“域名注册”到“网站成功运行”的建站说明&#xff0c;供广大朋友学习&#xff0c;希望大家少走弯路&#xff01; 大概步骤如下&#xff1a; 1.注册域名&#xff1b; 2.开通网站主机&#xff08;空间&#xff09;&#xff1b; 3.…

VS发布网站时,报错提示:“未能将文件xxx复制到xxx,未能找到文件xx”三种解决方案!

发布网站时候大家可能会遇到这样的情况&#xff0c;就是报错提示说&#xff1a;“未能将文件xxx复制到xxx&#xff0c;未能找到文件xx”&#xff0c;这个问题一般来说有三种解决方案&#xff0c;个人倾向第三种&#xff0c;如图&#xff1a; 解决方案如下&#xff1a; 方案一、…

ASP.NET网站页面加载及运行效率等多方面实战优化

网站加载内容较多&#xff0c;图片、Flash等文件较大、请求次数较多、页面不具有缓存性等等都会影响网站的页面加载速度和运行效率。之前做过很多网站&#xff0c;但是基本上都没有进行过优化&#xff0c;比如运用缓存等技术。最近有一个网站加载内容比较多&#xff0c;例如图片…

2015年个人收获-成果、经验分享(项目经理、集成资质、网站开发、服务器等)

2015年&#xff0c;对我来说是忙碌的一年&#xff0c;是幸运的一年&#xff0c;是收获的一年。 一、坚持写CSDN博客&#xff0c;将技术和遇到的问题分享给大家&#xff01; 坚持写博客其目的主要有两个&#xff0c;一是为了自己积累知识和锻炼&#xff0c;而是为了和大家分享…

浏览器模式调整-网站显示问题根本解决方案(Winform和CMD程序解决)

相信大家上一些网站经常遇到网站错乱和控件显示不全的问题&#xff0c;那是因为很多网站对浏览器的兼容性比较差&#xff0c;特别是一些网上银行&#xff08;中、农、工、商银行等&#xff09;、公共服务网站&#xff08;社保、公积金等政府网站&#xff09;等&#xff0c;虽然…

仿“唯品会”钓鱼网站分析

引言&#xff1a; 昨天晚上&#xff0c;一个朋友找我说自己被骗了&#xff0c;了解到原来是打开了钓鱼网站输入了自己信息和银行卡信息&#xff0c;虽然到最后一步发现了猫腻&#xff0c;但是信息已经泄露出去了&#xff0c;据说是唯品会的卖家给她发的信息&#xff0c;说之前买…