原生 Radio 的 Limitation

<input type="radio" style="width: 25px; height: 25px; cursor: pointer" />

效果

原生的 radio 其实长的不丑, 但它不能调颜色, radio 无法配合网站的 primary, secondary 颜色, 基本上就不能用了.

参考

Youtube – Style Radio Buttons with CSS

Youtube – How to Create a Custom Radio Button - HTML & CSS Tutorial

MDC – Radio buttons

解决思路

它的做法和 custom input file 类似, 做一个假的 radio 放到原生 radio 后面, 然后让原生 radio opacity 0.

这样 user 看到是假的 radio, 但是点击的确实真的 radio.

效果

HTML 结构

<div class="radio-wrapper">
<input type="radio" name="group" id="radio1" />
<div class="fake-radio">
<div class="checked-marker"></div>
</div>
</div>

真 radio 在前, 假 radio 在后, 它们是重叠的. 所以需要一个 wrapper 包着它们做定位.

里面就放真假 radio.

假 radio 长这样

一个圈, checked 之后中间多了一个点, 所以 HTML 结果就是 .fake-radio > .checked-marker

真 Radio CSS Style

.radio-wrapper {
position: relative;
width: 50px;
height: 50px; input {
position: absolute;
top: 0;
left: 0;
display: inline-block;
width: 100%;
height: 100%;
cursor: pointer;
// opacity: 0;
}
}

wrapper 负责控制 dimension. input 就定位 100% 就可以了 (注: 这里用不了 inset: 0 哦)

我暂时把 opacity 注释掉, 看看效果

把 opacity 开启就什么都看不见了.

假 Radio CSS Style

.fake-radio {
width: 100%;
height: 100%;
border: 2px solid hsl(0, 0%, 70%);
border-radius: 50%;
transition: border-color 0.4s; .checked-marker {
background-color: crimson;
width: 100%;
height: 100%;
border-radius: 50%;
transform: scale(0);
transition: transform 0.4s;
}
}

真 radio 定位就在上层了, 所以假 radio 就不必定位了. 真前假后就对了.

dimension 也是 100% follow wrapper.

fake-radio 负责 border

checked marker 负责中间的点, 它的大小是通过 scale 控制的哦

:checked and :focus

最后就是当真 radio :checked 和 :focus 时, 假 radio 需要反应 style

input:focus + .fake-radio {
border-color: lightpink;
} input:checked + .fake-radio {
border-color: crimson;
.checked-marker {
transform: scale(0.6);
}
}

通过 sibling selector 的方式去找到 fake-radio

这样就搞定了.

MDC Radio buttons

Material 的 radio 比较复杂一点

1. 它多了一个框的概念

整个 40px,  绿色的部分都是可以点击的, 那是 padding 来的. 而中间的 radio 只有 20px 而且

focus 的时候就更明显了. 浅色都是在 padding 内.

而原生的 radio 是没有 padding 概念的.

CSS & JS Effect – Styling Input Radio的更多相关文章

  1. js input radio点击事件

    html代码: <input type="radio" name="myname" value="1" />1 <inpu ...

  2. HTML---引入css,js | 常用标签示例

    一.前端基础包括哪些?如何理解 二.css,js引入_及head中其他标签 三.特殊符号 四.常见的标签 4.1,form表单 4.2,input系列(单选框.复选框.input传文件.重置) 4.3 ...

  3. HTML/CSS/JS编码规范

    最近整理了一份HTML/CSS/JS编码规范,供大家参考.目录:一.HTML编码规范二.CSS编码规范三.JS编码规范 一.HTML编码规范 1. img标签要写alt属性 根据W3C标准,img标签 ...

  4. 整理前端css/js/jq常见问题及解决方法(1)

    1. 兼容ie8圆角的解决方法:下载ie-css3.htc文件在css中加入behavior:url(ie-css3.htc);z-index:3; position:relative 即可 2. 去 ...

  5. HTML+CSS+JS设计注册页面

    HTML实战--设计一个个人信息填写界面 应用的技术:HTML+CSS+JS CSS和JS是套用的模板,主要练习了表单的验证和正则表达式的使用 效果图: 代码: <!DOCTYPE html&g ...

  6. 购物车数字加减按钮HTML+CSS+JS(有需要嫌麻烦的小伙伴拿走不谢)

    之前在写详情页的时候,如下图 因为自己嫌麻烦,就去看其他网站是怎么写的,想直接拿来用,后来看来看去觉得写得很麻烦,于是最后还是决定自己写,附上HTML+CSS+JS代码,一条龙一站式贴心服务2333 ...

  7. css+js+html基础知识总结

    css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...

  8. html+css+js实现复选框全选与反选

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  9. 使用html+css+js实现简易计算器

    使用html+css+js实现简易计算器, 效果图如下: html代码如下: <!DOCTYPE html> <html lang="en"> <he ...

  10. Css+JS模拟实现可编辑的表格

    表格在未编辑状态和编辑状态,需要定义两个不同的样式. 比如未编辑状态是lable的样式,两边有两个括号[],表示该表格可以编辑:编辑中的表格则表示成一个input框,可以输入. 基本思路就是,在表格中 ...

随机推荐

  1. oeasy教您玩转python - 012 - # 刷新时间

    ​ 刷新时间 回忆上次内容 通过搜索 我们学会 import 导入 time 了 time 是一个 module import 他可以做和时间相关的事情 time.time() 得到当前时间戳 tim ...

  2. Day 10 - 动态规划与树状数组

    动态规划基础 主要介绍动态规划的基本思想,以及动态规划中状态及状态转移方程的设计思路,帮助各位初学者对动态规划有一个初步的了解. 引入 [IOI1994] 数字三角形. 给定一个 \(r\) 行的数字 ...

  3. 对于同一个项目,同时将其git到GitHub和Gitee

    对于同一个项目,你可以同时将其git到GitHub和Gitee.这通常通过配置多个远程仓库地址来实现.以下是一步步的操作指南: 一.在GitHub和Gitee上创建仓库 GitHub: 登录GitHu ...

  4. Python 使用Python操作xmind文件

    使用Python操作xmind文件 by:授客 QQ:1033553122   测试环境 Win10 Python 3.5.4 XMind-1.2.0.tar.gz 下载地址: https://fil ...

  5. JMeter+Ant+Jenkins接口自动化测试框架(Windows)

    一:简介 大致思路:Jmeter可以做接口测试,也能做压力测试,而且是开源软件:Ant是基于Java的构建工具,完成脚本执行并收集结果生成报告,可以跨平台,Jenkins是持续集成工具.将这三者结合起 ...

  6. 使用nvm管理node

    安装包在阿里云盘 安装时,记录安装位置 安装后,在安装目录的setting添加镜像地址 node_mirror:npm.taobao.org/mirrors/node/ npm_mirror:npm. ...

  7. 假期小结4hive学习beeline

    学习Beeline是连接和管理Hive的一种有效方式.Beeline是一个用于与Hive交互的命令行工具,它支持通过JDBC连接到Hive服务器,并执行查询和管理Hive表等操作. 以下是一些关于Be ...

  8. 用jacoco统计JAVA项目测试代码覆盖率

    一.概述 Jacoco 统计的是全量代码覆盖率.它不仅支持生成单元测试的覆盖率,也支持监控生成接口测试,功能测试的覆盖率. 在新一代精准测试技术流的影响中,各大型单位对覆盖率的追求越来越迫切.作为一款 ...

  9. RHCA rh442 002 监控工具 脏页 块设备名 缓存

    sar 看某一个时间的数据 sar -d 1 5 与iostat类似 计算机识别设备按编号识别 0-15预留出 8 为iscsi设备 做一个块设备名 名字不重要是给人看的,重要的是编号 8 17(主编 ...

  10. 5、Git之版本号

    5.1.概述 每一次提交,Git 都会生成相关的版本号:每个版本号由 40 位 16 进制的数字组成. 这 40 位 16 进制的数字,是根据提交的内容,通过 SHA-1 算法计算出来的. 版本号具体 ...