haizlin / fe-interview

前端面试每日 3+1,以面试题来驱动学习,提倡每日学习与思考,每天进步一点!每天早上5点纯手工发布面试题(死磕自己,愉悦大家),6000+道前端面试题全面覆盖,HTML/CSS/JavaScript/Vue/React/Nodejs/TypeScript/ECMAScritpt/Webpack/Jquery/小程序/软技能……
http://www.h-camel.com
MIT License
25.41k stars 3.26k forks source link

[css] 第252天 如何修改美化radio、checkbox的默认样式? #1687

Open haizhilin2013 opened 4 years ago

haizhilin2013 commented 4 years ago

第252天 如何修改美化radio、checkbox的默认样式?

我也要出题

cxwht commented 4 years ago

利用after伪元素自定义radio或者checkbox 或是利用图片进行样式修改

Wyt-GitHub8000 commented 1 year ago

美化 radio 和 checkbox 的默认样式,一般可以通过 CSS 来实现。以下是一些常用的方法:

使用 :before 和 :after 伪元素来创建自定义的样式,并通过 CSS 控制元素的大小、颜色等属性。

/ 美化 checkbox / input[type="checkbox"] { position: relative; width: 20px; height: 20px; -webkit-appearance: none; -moz-appearance: none; appearance: none; outline: none; border: 1px solid #999; border-radius: 3px; box-shadow: inset 0 0 0 2px #fff; }

input[type="checkbox"]:checked:before { content: '\2713'; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 14px; color: #fff; }

/ 美化 radio / input[type="radio"] { position: relative; width: 20px; height: 20px; -webkit-appearance: none; -moz-appearance: none; appearance: none; outline: none; border: 1px solid #999; border-radius: 50%; box-shadow: inset 0 0 0 2px #fff; }

input[type="radio"]:checked:before { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 10px; height: 10px; border-radius: 50%; background: #999; }

使用图片来代替默认的样式。

/ 美化 checkbox / input[type="checkbox"] { display: none; }

input[type="checkbox"] + label { display: inline-block; width: 20px; height: 20px; background: url('checkbox.png') no-repeat; cursor: pointer; }

input[type="checkbox"]:checked + label { background-position: -20px 0; }

/ 美化 radio / input[type="radio"] { display: none; }

input[type="radio"] + label { display: inline-block; width: 20px; height: 20px; background: url('radio.png') no-repeat; cursor: pointer; }

input[type="radio"]:checked + label { background-position: -20px 0; } 这里使用了两张图片来代替 checkbox 和 radio 的默认样式,当选中时,改变图片的背景位置来实现美化效果。

需要注意的是,不同浏览器的默认样式可能存在差异,因此需要根据实际情况进行适配。同时,使用自定义的样式来代替默认样式可能会影响到可访问性,因此需要谨慎使用,并根据实际需求进行选择。