直接删掉默认对勾图标需清空并隐藏伪元素:.uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked::before { content: ""; display: none; },且样式须写在App.vue中并加!important。

直接删掉默认对勾图标,靠伪元素重绘即可。uni-app 的 checkbox 选中后那个小圆圈(其实是 Unicode 字符 \2713 或系统内置 SVG),不是“背景色”或“边框”控制的,而是由 ::before 伪元素渲染的。想彻底去掉它,不能只改 background 或 border,得把伪元素内容清空 + 隐藏。
uni-checkbox-input:checked::before 必须显式置空
很多开发者只改了 .uni-checkbox-input-checked 的背景,但没动伪元素,结果圆圈还在——因为默认样式里 ::before 仍会渲染一个对勾。必须用 content: "" 清空内容,并配合 display: none 或 opacity: 0 确保不占位、不干扰布局:
.uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked::before { content: ""; display: none; }- 如果需要保留自定义图标(比如用字体图标或 SVG),就别设
display: none,改用content: "\e600"; font-family: "iconfont";替换 - 注意:仅设
content: ""不够,某些平台(尤其是小程序)仍可能残留空白占位,display: none更可靠
为什么在页面局部写样式经常失效
uni-app 的 checkbox 是原生组件封装,其内部结构在不同端(H5 / 微信小程序 / App)渲染层级不同,CSS 作用域容易被隔离。你写在 pages/xxx.vue 的样式,大概率无法穿透到 .uni-checkbox-input 内部节点:
- 必须把覆盖样式写在
App.vue的<style>块里(全局生效) - 如果要用 scoped,得加
deep(但 uni-app v2 不支持:deep(),v3 可用::v-deep,不过仍推荐全局写法更稳) - 务必加
!important,因为 uni-app 内部样式优先级高,例如width: 30rpx !important;
去掉圆圈后如何体现“已选中”状态
清空 ::before 后,视觉上就没了任何选中标记——这时候必须主动补上替代方案,否则用户无法感知状态变化:
- 用
background-color填满整个圆框:.uni-checkbox-input-checked { background-color: #347CED; border-color: #347CED; } - 如果要做“实心圆”,记得同时设
border-radius: 50%和border: none - 若需文字提示(如“已选”),建议放在
<label>旁,不要依赖 checkbox 自身渲染 - 别忘了适配禁用态:
.uni-checkbox-input[disabled].uni-checkbox-input-checked也要单独定义背景色,否则 disabled 时颜色可能回退到灰色
真正麻烦的不是“怎么删”,而是删完之后的视觉反馈是否一致、是否在所有端都可靠。很多项目上线后才发现小程序里圆圈又冒出来了——八成是样式没进 App.vue,或者漏写了 ::before 的 display: none。


















