CSS & JS Effect – Styling Input Radio
原生 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
解决思路
它的做法和 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的更多相关文章
- js input radio点击事件
html代码: <input type="radio" name="myname" value="1" />1 <inpu ...
- HTML---引入css,js | 常用标签示例
一.前端基础包括哪些?如何理解 二.css,js引入_及head中其他标签 三.特殊符号 四.常见的标签 4.1,form表单 4.2,input系列(单选框.复选框.input传文件.重置) 4.3 ...
- HTML/CSS/JS编码规范
最近整理了一份HTML/CSS/JS编码规范,供大家参考.目录:一.HTML编码规范二.CSS编码规范三.JS编码规范 一.HTML编码规范 1. img标签要写alt属性 根据W3C标准,img标签 ...
- 整理前端css/js/jq常见问题及解决方法(1)
1. 兼容ie8圆角的解决方法:下载ie-css3.htc文件在css中加入behavior:url(ie-css3.htc);z-index:3; position:relative 即可 2. 去 ...
- HTML+CSS+JS设计注册页面
HTML实战--设计一个个人信息填写界面 应用的技术:HTML+CSS+JS CSS和JS是套用的模板,主要练习了表单的验证和正则表达式的使用 效果图: 代码: <!DOCTYPE html&g ...
- 购物车数字加减按钮HTML+CSS+JS(有需要嫌麻烦的小伙伴拿走不谢)
之前在写详情页的时候,如下图 因为自己嫌麻烦,就去看其他网站是怎么写的,想直接拿来用,后来看来看去觉得写得很麻烦,于是最后还是决定自己写,附上HTML+CSS+JS代码,一条龙一站式贴心服务2333 ...
- css+js+html基础知识总结
css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...
- html+css+js实现复选框全选与反选
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 使用html+css+js实现简易计算器
使用html+css+js实现简易计算器, 效果图如下: html代码如下: <!DOCTYPE html> <html lang="en"> <he ...
- Css+JS模拟实现可编辑的表格
表格在未编辑状态和编辑状态,需要定义两个不同的样式. 比如未编辑状态是lable的样式,两边有两个括号[],表示该表格可以编辑:编辑中的表格则表示成一个input框,可以输入. 基本思路就是,在表格中 ...
随机推荐
- [oeasy]python024_vim读取文件_从头复制到尾_撤销_重做_reg_寄存器
Guido的简历 回忆上次内容 python 是Guido制作的语言 从Guido刚入职场 就开始的项目 python这个项目 一直跟随Guido Guido 曾经在 cwi cnri beope ...
- [oeasy]python0066_控制序列_光标位置设置_ESC_逃逸字符_CSI
光标位置 回忆上次内容 上次讲了 三引号的输出 三引号中 回车和引号 都会 被原样输出 \ 还是需要从 \\转义 黑暗森林 快被摸排清了 还有哪个 转义序列 没 研究过吗? \e是 干什么的? 回忆转 ...
- iframe嵌入svg图片动态更改文本样式并进行缩放等功能实现拓扑图
好久没更了,近期开发遇到的需求,抽空梳理一下~ 需求:实现一个复杂的拓扑图,图中元素的个数,以及各个参数内容是动态展示的. 于是让ui提供了对应的svg图片. 解决思路:使用iframe嵌入svg图片 ...
- Jmeter函数助手7-timeShift
timeShift函数用于获取移动时间变化后的指定格式时间. Format string for DateTimeFormatter (optional) (default unix timestam ...
- CyberDog测试视频 —— 【开箱】小米"限量"机器狗!被我玩坏了...
地址: https://www.youtube.com/watch?v=3ntAhy3thXM PS. 现在的智能机器人其实真的没有人们想象中的那么智能.感觉现在的智能机器人最为有用的功能一个是倒地自 ...
- 【转载】 Parallel Computing in Python using mpi4py
原地址: https://research.computing.yale.edu/sites/default/files/files/mpi4py.pdf ====================== ...
- baselines算法库common/wrapper.py模块分析
common/wrapper.py模块: import gym class TimeLimit(gym.Wrapper): def __init__(self, env, max_episode_st ...
- 局域网主机间的网络测速——适用linux主机和windows主机
测速软件地址; https://iperf.fr/ 参考: 树莓派集群真的可以顶上一台高性能计算机吗 ============================================ Ubun ...
- python的logging 模块的propagate设置
代码: import logging import sys LOG_FORMAT = '[%(asctime)s PID:%(process)d %(levelname)s %(filename)s ...
- java多线程之自定义线程池
1.背景 线程池.....大家常用.... 自己搞一个,顺便练习一下多线程编程 2.自定义线程代码 2.1.拒绝策略接口 @FunctionalInterface public interface M ...