【CSS】329- 非常强!3行核心css代码的rate评分组件
像rate评分组件一般都用javascript写,所以这次将是一个全新的尝试,用css实现一个rate评分 ❗ 核心代码也就三行?
01
效果图
02
原理
主要是借助radio单选框,梳理如下:
去找个好看的iconfont;
借用5个radio单选框,把默认样式都去掉,显示默认的星星;
用checked伪类监听用户选中✅,由默认的星星变成高亮的星星;
然后配合~兄弟操作符把当前选中的所有兄弟元素都一起高亮?;
把5个radio单选框反向排列❗;
03
代码
这是我事先生成好的iconfont:
<link rel="stylesheet" href="//at.alicdn.com/t/font_1356455_c5d3d3ohlbq.css">
一个很简洁的布局:
<div class="rate-content">
<input type="radio" name="rate">
<input type="radio" name="rate">
<input type="radio" name="rate">
<input type="radio" name="rate">
<input type="radio" name="rate">
</div>
先把默认的星星显示出来:
// 去掉默认样式
input {
-webkit-appearance: none;
border: none;
outline: none;
cursor: pointer;
}
.rate-content {
$main: #ffa822; // 高亮颜色
$basic: #999; // 默认颜色
// 单个星星
input[name="rate"] {
font-family: "iconfont"; // 之前引入的iconfont字体
font-size: 30px;
padding-right: 10px;
// 默认显示的星星
&::after {
content: "\e645";
color: $basic;
transition: color .4s ease; // 加点颜色过渡效果
}
}
}
效果如下:
实现选中单个星星:
input[name="rate"] {
// 高亮的星星
&:checked {
&::after {
content: "\e73c";
color: $main;
}
}
}
效果如下:
实现连同兄弟元素一起高亮:
input[name="rate"] {
// 高亮的星星
&:checked,
&:checked ~ input[name="rate"] {
...
}
}
效果如下:
然后把星星反向排列:
.rate-content {
display: flex;
flex-flow: row-reverse;
}
效果如下:
鼠标移入预览选中效果:
罗嗦版:
input[name="rate"] {
// 高亮的星星
&:checked,
&:checked ~ input[name="rate"],
&:hover,
&:hover ~ input[name="rate"] {
...
}
}
优化版:
input[name="rate"] {
// 高亮的星星
&:checked,
&:hover {
&::after {
content: "\e73c";
color: $main;
}
// 兄弟元素一起高亮
& ~ input[name="rate"] {
&::after {
content: "\e73c";
color: $main;
}
}
}
}
效果如下:
加入放大动画:
input[name="rate"] {
transition: transform .2s ease; // 加入过渡效果
// 高亮的星星
&:checked,
&:hover {
...
}
// 鼠标移入使星星放大
&:hover {
transform: scale(1.2);
}
}
效果如下:
04
总结
核心代码其实就是这两段,其他都是可选的?
元素反向排列:
display: flex;
flex-flow: row-reverse;
兄弟元素操作:
input:checked ~ input
如果不用flex反向排列,还可以用rotateZ:
.rate-content {
display: flex;
// flex-flow: row-reverse;
transform: rotateZ(180deg);
}
效果如下:
z轴旋转180deg之后发现星星的头跟尾巴反过来了,那么子元素也旋转180deg即可:
.rate-content {
input[name="rate"] {
transform: rotateZ(180deg);
}
}
效果如下:
05
需要注意的细节
这里用的是内边距:
input[name="rate"] {
// padding-right: 10px;
margin-right: 10px;
}
如果用外边距的话,那么会出现以下情形:
内边距的作用是保持元素连贯性以及扩大点击范围?
06
最后
本文到此结束,希望以上内容对你有些许帮助,如若喜欢请记得在右下角点个在看跟关注?
如果您觉得本文不错,
请点击文章底部广告,支持一下我啦!
▼
原创系列推荐
▼
7. 59篇原创系列汇总
点这,与大家一起分享本文吧~
【CSS】329- 非常强!3行核心css代码的rate评分组件的更多相关文章
- Bootstrap源码分析系列之核心CSS
本节主要介绍核心CSS,从整体架构中的7个Less文件对应的源码分别进行分析 scaffolding.less 这个文件编译后的css文件(886~989行)其作用就像定义全局样式. //调整css盒 ...
- 如何提升我的HTML&CSS技术,编写有结构的代码
前言 之前写了四篇HTML和CSS的知识点,也相当于是一个知识点汇总.有需要的可以收藏,平时开发过程中应该会遇到这些点,到时候再查看这些博客可能更容易理解.从这篇开始更多的介绍开发过程经常让人头痛的前 ...
- CSS,点击去除虚线边框代码
- css 10 款非常棒的CSS代码格式化工具推荐
http://www.iteye.com/news/23692/ 10 款非常棒的CSS代码格式化工具推荐 2011-12-14 09:31 by 副主编 wangguo 评论(0) 有9111人浏 ...
- css强制html不换行 css强制英文单词断行 重拾丢失的
css强制html不换行 css强制英文单词断行 强制不换行 div{ white-space:nowrap; } 自动换行 div{ word-wrap: break-word; word-brea ...
- 在css加载完毕后执行后续代码
最近在写项目的framework,写个JQueryMessageBox的类,以使用jquery ui中的dialog()来显示消息框,为了使方法方便调用,便加入了自动判断页面是否加入了ui.js和ui ...
- css伪类实现行号自动填充
css伪类实现行号自动填充 大多数时候我们需要行号自动填充的时候我们可以 大多数时候是插入元素, 在元素里用js填入行号,或者用 ol > li 实现行号填充, 对于上面的方式,都不太灵活,而且 ...
- css文字单行/多行超出显示省略号...
css文字单行/多行超出显示省略号... 项目里写css样式我们经常会遇到将文字超出显示省略号的情况,记录一下以后能用到. 单行超出 .oneline { width:300upx; /*宽度一定要设 ...
- 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
随机推荐
- 创建和销毁对象——用私有构造器或者枚举类型强化Singleton属性
参考资料:<Effective Java>.<Java核心技术 卷1>.https://www.cnblogs.com/zhaosq/p/10135362.html 基础回顾 ...
- Salesforce学习之路(十一)Aura组件属性<aura:attribute />
1. <aura:attribute />语法 Aura组件属性类似与Apex中类的成员变量(或者说Java中类的成员变量).他们是组件在特定的实例上设置的类型化字段,可以使用表达式语法从 ...
- 新手如何正确安装python,视图详解
今天教新手如何安装python,因为Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的.学 ...
- [ERROR]Unable to locate package
刚更换了DNS,需要更新下apt-get $ apt-get update
- 修改 processor.php 文件,监听用户对该应用的消息
修改 processor.php 文件,监听用户对该应用的消息 class cgc_fdModuleProcessor extends WeModuleProcessor { public funct ...
- nyoj 16-矩形嵌套(贪心 + 动态规划DP)
16-矩形嵌套 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:13 submit:28 题目描述: 有n个矩形,每个矩形可以用a,b来描述,表示长和 ...
- nyoj 113-字符串替换 (python replace, try ... except)
113-字符串替换 内存限制:64MB 时间限制:3000ms 特判: No 通过数:31 提交数:71 难度:2 题目描述: 编写一个程序实现将字符串中的所有"you"替换成&q ...
- Python3.7.1学习(八) Python访问SQL Server数据库
一.pip install pymssql即可安装pymssql库 二.Python连接SQL Server数据库 实例代码如下: # -*- coding:utf-8 -*-"&q ...
- 面向对象之classmethod和staticmethod(python内置装饰器)
对象的绑定方法复习classmethodstaticmethod TOC 对象的绑定方法复习 由对象来调用 会将对象当做第一个参数传入 若对象的绑定方法中还有其他参数,会一并传入 classmetho ...
- JAVA数组翻转
首先可 public class RevcArr { public static void main(String[] args) { // TODO Auto-generated method st ...