自定义input[type="radio"]的样式

2023-10-28

对于表单,input[type=“radio”] 的样式总是不那么友好,在不同的浏览器中表现不一。

对单选按钮自定义样式,我们以前一直用的脚本来实现,不过现在可以使用新的伪类 :checkbox 来实现。

如果直接对单选按钮设置样式,那么这个伪类并不实用,因为没有多少样式能够对单选按钮起作用。不过,倒是可以基于单选按钮的勾选状态借助组合选择符来给其他元素设置样式。

很多时候,无论是为了表单元素统一,还是为了用户体验良好,我们都会选择 label 元素和 input[type=“radio”] 一起使用。当

思路:

  1. 可以为

  2. 然后把真正的单选按钮隐藏起来;

  3. 最后把生成内容美化一下。

解决方法:

1、一段简单的结构代码:

<div class="female">
    <input type="radio" id="female" name="sex" />
    <label for="female">女</label>
</div>
<div class="male">                
    <input type="radio" id="male" name="sex" />
    <label for="male">男</label>
</div>

2、生成一个伪元素,作为美化版的单选按钮,先给伪元素添加一些样式:

input[type="radio"] + label::before {
    content: "\a0"; /*不换行空格*/
    display: inline-block;
    vertical-align: middle;
    font-size: 18px;
    width: 1em;
    height: 1em;
    margin-right: .4em;
    border-radius: 50%;
    border: 1px solid #01cd78;
    text-indent: .15em;
    line-height: 1; 

}
现在的样子:
在这里插入图片描述

原来的单选按钮仍然可见,但是我们先给单选按钮的勾选状态添加样式:

3、给单选按钮的勾选状态添加不同的样式:

input[type="radio"]:checked + label::before {
    background-color: #01cd78;
    background-clip: content-box;
    padding: .2em;
}

现在的样子:
在这里插入图片描述
在这里插入图片描述

4、 现在把原来的单选按钮隐藏:

input[type="radio"] {
    position: absolute;
    clip: rect(0, 0, 0, 0);
}

现在的样子:
在这里插入图片描述
在这里插入图片描述

隐藏原来的单选按钮时,如果使用 display: none; 的话,那样会把它从键盘 tab 键切换焦点的队列中完全删除。

于是可采用剪切的方式,让剪切后的尺寸为零,这样就隐藏了原来的单选按钮。

旧方法:

思路:

1、将 input[type=“radio”] 隐藏, opacity: 0; 置于上层,当我们点击它时,就能正确的响应原本的事件。

2、自定义一个圆圈,置于下层,模拟原本相似的样式;

3、用 js 实现选中 input[type=“radio”] 时,在其下层的自定义的元素改变原来的背景颜色。

代码:

<form action="">
    <div class="sex">
        <div class="female">
            <label for="female">女</label>
            <input type="radio" name="sex" id="female">
            <span class="female-custom"></span> <!-- 同下面的 span 一样作为自定义的元素 -->
        </div>
        <div class="male">
            <label for="male">男</label>
            <input type="radio" name="sex" id="male">
            <span class="male-custom"></span>    
        </div>
    </div>
</form>


body { margin: 0; }
input { padding: 0; margin: 0; border: 0; }
.female, .male {
    position: relative; /* 设置为相对定位,以便让子元素能绝对定位 */
    height: 40px;
    line-height: 40px;
    margin-left: 40px;
}
.sex label {
    display: block;
    height: 40px;
    width: 40px;
    line-height: 40px;
    font-size: 20px;
    cursor: pointer;
}
.sex input {
    z-index: 3;
    position: absolute;
    top: 0;
    bottom: 0;
    left: 40px;
    margin: auto; /* 这里及以上的定位,可以让该元素竖直居中。(top: 0; bottom: 0;) */
    opacity: 0;
    display: block;
    width: 30px;
    height: 30px;
    cursor: pointer;
}
.sex span {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 40px;
    margin: auto;
    display: block;
    width: 25px;
    height: 25px;
    border: 1px solid #000;
    border-radius: 50%;
    cursor: pointer;
}        
.sex span.active {
    background-color: #000;            

}

=============

 $("#male").click( function () {
        $(this).siblings("span").addClass("active");
        $(this).parents("div").siblings("div").children("span").removeClass("active");
    });
    $("#female").click( function () {
        $(this).siblings("span").addClass("active");
        $(this).parents("div").siblings("div").children("span").removeClass("active");
    });

这样处理后,在浏览器中展示效果全部一样了:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
扩展:

  1. 对于代码中出现的定位,对父元素使用 position: relative; 给子元素使用 position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; 能实现让子元素相对于父元素居中(满足水平居中和竖直居中)显示。如果只是需要竖直居中,则不需要添加 right: 0; 和 left: 0; 的样式。

  2. 有时当我们不容易确定子元素的高度时,可以这样设置:对父元素 position: relative; 对子元素 position: absolute; top: 10px; bottom: 10px; margin: auto; 这样一来,子元素的高度就是父元素的高度减去20px后的值了,同样,top 和 bottom 支持百分数,可扩展性更强。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义input[type="radio"]的样式 的相关文章

  • Chrome 浏览器不显示 HTTP 处理程序生成的图像

    基本上我有一个网站 可以呈现一些文档 主要是办公室 的 HTML 预览 生成的 HTML 片段包含在同一网站返回的页面中 但图像由 HTTP 处理程序从具有以下链接的另一个网站返回 img width 50 height 50 src ht
  • 我正在尝试向我的 vue.js 项目添加背景图像

    我想添加覆盖整个页面的背景图像 然而现在看起来是这样的 我希望它跨越整个网页 在 vue js 中这将如何完成 我还想要一个动画工具栏 以便当页面不滚动时工具栏是透明的并呈现背景图像的外观 当它滚动时 工具栏将具有当前的蓝色 这是我的小提琴
  • grid-auto-columns 在 Firefox 中不能完全工作

    我不明白为什么 DIV 3 的大小与 DIV 1 DIV 2 的大小不同 https codepen io anon pen vaVqPW https codepen io anon pen vaVqPW grid display grid
  • 使用 pkg:sjPlot 函数创建一个生成部分斜体单元格的数据框

    我正在尝试创建一个简单的数据表 其中 Coral taxon 列中的属名称为斜体 而 spp 列中的属名称为斜体 属名后面的部分不大写 我尝试使用 expression 函数对 Coral taxon 的每一行进行编码 但没有成功 sum
  • 滚动时输入自动完成位置错误(chrome)

    我在输入文本的默认自动完成功能方面遇到了一些麻烦 滚动时它不会相应移动 我希望自动完成文本保留在输入的正下方 有办法做到这一点吗 我在 Chrome 浏览器版本 57 0 2987 133 中发生这种情况 fiddle https jsfi
  • 有没有办法禁用网站上表单的自动填写? [复制]

    这个问题在这里已经有答案了 我最近才学会使用创建网站HTML and PHP 我创建了一个网站 其中有一个测验 要求人们随机翻译单词 用户将他们的答案输入到表格中 网站评估答案是否正确 现在 当一个问题在一个会话中被问两次时 就会出现自动填
  • 如何向我的网站添加 Google 搜索框?

    我正在尝试将 Google 搜索框添加到我自己的网站 我希望它搜索谷歌本身 而不是我的网站 我曾经有一些代码可以工作 但现在不再工作
  • Twitter bootstrap:居中缩略图

    我有一个缩略图列表 它们有固定的尺寸 我希望连续缩略图的数量随着窗口的宽度而变化 使用 Twitter Bootstrap 这很容易 http jsfiddle net charlesbourasseau 5WvAL http jsfidd
  • 将文本大小调整为矩形 在 Canvas HTML5 中调整大小

    我是 Canvas 新手 我正在创建一个网站 以在调整矩形大小时增加文本 我尝试了很多 但没有任何效果 实际上 我希望如果我仅按其宽度调整矩形大小 向左拉伸 向右拉伸 则仅应增加文本宽度而不是字体大小 我已经完成了字体大小 但发现增加孤立文
  • 如何仅在 css/html 中强制在单词之间换行?

    我只有一段普通的文本 p 标签内的 p div 标签 但只有 Firefox 可以正确显示 Firefox 打破了单词之间的界限 所有其他浏览器都会在单词中间断行 这使得阅读变得困难 这是我的意思的一个例子 火狐浏览器 工作中 This w
  • 如何向 Rails 应用程序添加自定义字体?

    我想在 RoR 应用程序中使用几种字体 但它们的格式主要是 ttf 和 otf 等 我该如何将这些文件嵌入到我的 Rails 应用程序中 也就是说 一旦我将它们放入我的资产文件夹中 将它们嵌入我的 CSS 和 或 LESS 文件中的语法到底
  • 同页锚链接到部分 id 在 IE8 中不起作用

    我有一个带有导航的单页 HTML5 网站 可以将用户引导至该部分 在除 IE8 之外的所有浏览器中都可以正常工作 IE8 不执行任何操作 我所拥有的虚拟版本 a href about About a a href work Work a a
  • 有没有办法将变量从 javascript 导入到 sass 或反之亦然?

    我正在制作一个依赖于块概念的 CSS 网格系统 所以我有一个基本文件 例如 max columns 4 block width 220px block height 150px block margin 10px 它被 mixin 使用 m
  • 淘汰赛绑定,每个都可进行自定义

    我这里有一个情况 用于淘汰每个带有定制的绑定 这是我的代码 div div table tbody tr td td td td tr tbody table div div
  • html css 下拉菜单

    这是我第一次在 Stack Overflow 上发帖 我不熟悉论坛发帖规定 所以请让我知道我做错了什么 我在论坛中研究过这个问题 但我所遇到的一切都没有给我明确的答案 我试图从 新闻 元素创建一个下拉菜单 但在运行代码时我从未得到任何可见的
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • 引导行之间的垂直间距

    所以我正在研究布局 为了 响应能力 我决定使用 Bootstrap 现在我猜网格系统有问题 我想要的结果如下 1 4 2
  • HTML 元素的默认背景颜色是什么?白色还是透明?

    我只是被一个简单的问题困住了 想弄清楚 HTML 元素的默认背景颜色是什么 是白色的还是透明的 默认背景颜色是透明的 看这里 https developer mozilla org en docs Web CSS background co
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • 如何使用Python保存“完整的网页”而不仅仅是基本的html

    我正在使用以下代码来使用 Python 保存网页 import urllib import sys from bs4 import BeautifulSoup url http www vodafone de privat tarife r

随机推荐

  • 蓝桥杯模拟-排列序数

    问题 X星系的某次考古活动发现了史前智能痕迹 这是一些用来计数的符号 经过分析它的计数规律如下 为了表示方便 我们把这些奇怪的符号用a q代替 abcdefghijklmnopq 表示0 abcdefghijklmnoqp 表示1 abcd
  • 数据结构例题--迷宫

    迷宫 问题要求 定义一个二维数组N M 其中2 lt N lt 10 2 lt M lt 10 如5x5数组 如下所示 int maze 5 5 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1
  • 记录红米k40解BL、Root、装XPOSED

    一 前言 刚从一加转到红米 不得不吐槽虽然一加系统简陋但社区搞基搞机氛围非常好 官方支持root也保修和第三方ROM下大神层出不群 小米的社区放眼望去基本没人讨论root 第三方ROM 都是各种吐槽提问但没人回复的帖子 既然找不到教程那就按
  • qt,信号槽连接不成功原因

    在 Qt 中 信号槽连接不成功的原因可能有很多 下面是一些可能的原因和解决方法 1 信号和槽的声明不匹配 请确保信号和槽的参数类型和数量完全匹配 如果它们不匹配 连接将不会成功 检查信号和槽的声明 确保它们是兼容的 2 信号和槽的作用域问题
  • JSON数组,JSON对象,数组的区别与基本操作整理

    JSON 语法规则 JSON 语法是 javascript 对象表示语法的子集 数据在名称 值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称 值对 JSON 数据的书写格式是 名称 值对 名称 值对组合中的名称写在前面
  • 三大WEB服务器对比分析(apache ,lighttpd,nginx)

    一 软件介绍 apache lighttpd nginx 1 lighttpd Lighttpd是一个具有非常低的内存开销 cpu占用率低 效能好 以及丰富的模块等特点 lighttpd是众多OpenSource轻量级的web server
  • 微信小程序开发(七) swiper 组件

    微信小程序swiper组件 banner 图 广告页 splash 实现效果 代码 js Page data iamgeUrls https img zcool cn community 0106445dc28607a801209e1f62
  • C++11右值 &&引用

    C 11右值 引用 2017年06月06日 11 56 25 Ink cherry 阅读数 2394 标签 C 右值引用 完美转发 个人分类 C C 感觉这篇讲的比较深入细致了 存一下 via http www cnblogs com Ti
  • [技术经理]02 什么是技术经理?

    目录 01什么是技术经理 02总结 01什么是技术经理 什么是技术经理 我用一句话概括为 专业技术团队的管理者 技术经理 是一种管理职位 通常是在软件开发 互联网等科技公司或技术团队中担任 技术经理的职责 是管理和协调技术团队 确保团队能够
  • java写一个圆类求面积_java编程:定义一个圆类,属性为半径,方法为对输入的半径计算其周长和面积?...

    展开全部 java编程e68a8462616964757a686964616f31333365633864定义一个类圆属性半径方法 计算周长面积设置半径读取半径急java编程定义一个类 java编程定义一个类圆属性半径 方法计算周长面积设置
  • “3D 元宇宙技术”在汽车新零售领域的应用与实践

    一 引言 随着不久前汽车之家新零售项目震撼发布 我们直击用户看车选车痛点首次提出ABC新体验模式 以元宇宙科技打造沉浸式交互服务 开放元宇宙能源空间站体验店 为用户打造更 有用 的体验 其中 A 是指一站式选车试车服务 All in one
  • python爬虫基础知识的总结

    什么是爬虫 一 爬虫概述 简单来说 爬虫就是获取网页并提取和保存信息的自动化程序 1 获取页面 如urllib requests等 2 提取信息 Beautiful Soup pyquery lxml等 3 保存数据 MySQL Mongo
  • [Pandas]Dataframe中切片常用技巧

    1 根据值在是否在列表中进行切片 方法一 使用isin方法可以根据DataFrame中的某列的值是否在某个列表中来进行切片 注意 这里不要直接使用in 否则会报错 代码如下 pf pd DataFrame 74 27 EA 4D 93 BD
  • 2. Redis持久化、主从哨兵架构详解

    分布式缓存技术Redis 1 Redis持久化 1 1 RDB快照 snapshot 1 1 1 bgsave的写时复制 COW 机制 1 2 AOF append only file 1 2 1 AOF重写 1 3 Redis 4 0 混
  • 努力一周,开源一个超好用的接口Mock工具——Msw-Tools

    作为一名前端开发 是不是总有这样的体验 基础功能逻辑和页面UI开发很快速 本来可以提前完成 但是接口数据联调很费劲 耗时又耗力 有时为了保证进度还不得不加加班 为了摆脱这种痛苦 经过一周的努力 从零开发了一个灵活无依赖 且集成简单的数据接口
  • IP地址介绍,子网划分(VLSM),构造超网(CIDR) 详解

    概述 IPv4地址从被设计开始一直到现今 一共经历了三次重大变化 分类的IPv4地址 子网划分 构造超网 1 分类的IPv4地址 IP地址是路由器用来跨网段转发IP数据报 寻找路线的32位 二进制代码 由网络地址 网络号 和主机地址 主机号
  • jps命令

    列出目标系统上检测的 Java 虚拟机 JVM 此命令是实验性的 不受支持 概要 jps options hostid options 命令行选项 请参阅Options hostid 应为其生成进程报告的主机的标识符 它hostid可以包括
  • Android 6.0 CoordinatorLayout

    http www cnblogs com yuanchongjie p 4997134 html https www aswifter com 2015 11 12 mastering coordinator http blog csdn
  • 结巴分词参考地址

    Git参考 https github com fxsjy jieba jieba 是一个python实现的中文分词组件 在中文分词界非常出名 支持简 繁体中文 高级用户还可以加入自定义词典以提高分词的准确率 它支持三种分词模式 精确模式 试
  • 自定义input[type="radio"]的样式

    对于表单 input type radio 的样式总是不那么友好 在不同的浏览器中表现不一 对单选按钮自定义样式 我们以前一直用的脚本来实现 不过现在可以使用新的伪类 checkbox 来实现 如果直接对单选按钮设置样式 那么这个伪类并不实