如何在HTML复选框输入中更改复选标记的颜色?
答案 0 :(得分:23)
这是一个纯CSS解决方案,不应破坏屏幕阅读器或默认用户代理操作。此外,最新版本的4大浏览器(以及其他一些浏览器,如果你添加一些额外的黑客攻击,支持这一点,但我会留给你去弄清楚;因为它使用它可能不会超过IE8 +支持伪元素)。
这个想法是隐藏实际的表单元素(因为浏览器很难用内部样式替换,并且不会将所有样式能力暴露给css)并用我们喜欢的替换它。一个副作用是你需要跟踪变化事件,而不是点击JS中的事件(如果你需要的话)(但你这样做了吗?)。
因为标签与表单元素相关联,所以单击它会像预期的那样工作,因此新的,很棒的复选框(::before
)会滥用原始文件上的属性选择器([checked]
)来检查是否它是checked
。选中后,它将显示我们的精选复选标记(::after
)。
复选标记(::after
)滥用厚度和高度/宽度的边框宽度,以制作类似商品的复选标记。最后,我们将框45deg转换为正确匹配角度。
要更改复选标记的颜色,请更改::after
样式的边框颜色。此外,如果您希望它始终与您的文本颜色匹配,请完全删除其上的边框颜色。要更改收音机,请更改径向渐变开始颜色(非白色)。
同样令人敬畏的是它与字体大小有关,所以如果你的文字更大,它应该是正确的(虽然使用相对字体大小时会发生舍入错误,所以要小心)
我为两种可检查类型(复选框和广播)都包含了基本样式。
<强> HTML:强>
<fieldset>
<legend>Checkbox example</legend>
<input id="checkbox" type="checkbox"/>
<label for="checkbox">Some awesome checkbox label</label>
</fieldset>
<fieldset>
<legend>Radio example</legend>
<div>
<input id="radio1" type="radio" name="radio"/>
<label for="radio1">Some awesome radio option #1</label>
<div>
</div>
<input id="radio2" type="radio" name="radio"/>
<label for="radio2">Some awesome radio option #2</label>
</div>
</fieldset>
<强> CSS:强>
label, input[type="radio"], input[type="checkbox"] {
line-height: 2.1ex;
}
input[type="radio"],
input[type="checkbox"] {
position: absolute;
left: -999em;
}
input[type="radio"] + label,
input[type="checkbox"] + label {
position: relative;
overflow: hidden;
cursor: pointer;
}
input[type="radio"] + label::before,
input[type="checkbox"] + label::before {
content: "";
display: inline-block;
vertical-align: -25%;
height: 2ex;
width: 2ex;
background-color: white;
border: 1px solid rgb(166, 166, 166);
border-radius: 4px;
box-shadow: inset 0 2px 5px rgba(0,0,0,0.25);
margin-right: 0.5em;
}
input[type="radio"]:checked + label::before {
background: radial-gradient(circle at center, #1062a4 .6ex, white .7ex);
}
input[type="radio"] + label::before {
border-radius: 50%;
}
input[type="checkbox"]:checked + label::after {
content: '';
position: absolute;
width: 1.2ex;
height: 0.4ex;
background: rgba(0, 0, 0, 0);
top: 0.9ex;
left: 0.4ex;
border: 3px solid #1062a4;
border-top: none;
border-right: none;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
旁注:necropost因为这是我试图记住过去是如何解决这个问题时出现的第一个问题。 ;)
答案 1 :(得分:8)
答案 2 :(得分:1)
您可以使用其他元素模仿复选框,并根据需要设置背景颜色。
我没有试图让它变得完美,只是为了展示这个概念。 如您所见,背景颜色为绿色,没有图像,没有涉及的库;最小的js。
WAIT !!!
MVC纯粹主义者和其他狂热分子 - 你可以轻松地将js移动到它自己的小方法中,但我正在尝试
展示简洁 - 漂亮
请不要为此向我投票
叹息。
答案 3 :(得分:1)
如果您需要将刻度颜色从黑色更改为白色,只需尝试将filter: invert(1)
应用于复选框即可。
答案 4 :(得分:1)
勾选这个它会告诉你如何设置复选框的样式 How to create a custom checkbox 不用 JS 也可以
const app = () => {
const profile = useContext(ProfileContext);
console.log(typeof profile) // object type
const gotoEditPage = () => {
history.push({
pathname: '/setting',
state: {profile}
})
}
return (
<>
<button onClick={gotoEditPage}>Next</button>
</>
)
}
/* Customize the label (the container) */
.container {
display: block;
position: relative;
padding-left: 35px;
margin-bottom: 12px;
cursor: pointer;
font-size: 22px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* Hide the browser's default checkbox */
.container input {
position: absolute;
opacity: 0;
cursor: pointer;
height: 0;
width: 0;
}
/* Create a custom checkbox */
.checkmark {
position: absolute;
top: 0;
left: 0;
height: 25px;
width: 25px;
background-color: #eee;
}
/* On mouse-over, add a grey background color */
.container:hover input ~ .checkmark {
background-color: #ccc;
}
/* Create the checkmark/indicator (hidden when not checked) */
.checkmark:after {
content: "";
position: absolute;
display: none;
}
/* Show the checkmark when checked */
.container input:checked ~ .checkmark:after {
display: block;
}
/* Style the checkmark/indicator */
.container .checkmark:after {
left: 9px;
top: 5px;
width: 5px;
height: 10px;
border: solid white;
border-width: 0 3px 3px 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
/* When the checkbox is checked, add a blue background */
.container input:checked ~ .checkmark {
background-color: #2196F3;
}
.container input.white:checked ~ .checkmark:after {
border: solid white;
border-width: 0 3px 3px 0;
}
.container input.black:checked ~ .checkmark:after {
border: solid #000;
border-width: 0 3px 3px 0;
}
.container input.red:checked ~ .checkmark:after {
border: solid #cb1a1a;
border-width: 0 3px 3px 0;
}
.container input.green:checked ~ .checkmark:after {
border: solid #1f4f12;
border-width: 0 3px 3px 0;
}
.container input.yellow:checked ~ .checkmark:after {
border: solid #c6c253;
border-width: 0 3px 3px 0;
}
答案 5 :(得分:0)
如果您使用b-form-checkbox
,您会发现css
的标记就是svg
……
.custom-checkbox
.custom-control-input:checked
~ .custom-control-label::after {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath **fill='%23000'** d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e");
它是用svg
绘制的,因此您可以更改坐标以修改标记或更改fill
来更改标记颜色。
答案 6 :(得分:0)
你可以这样做。
input[type='checkbox']:checked {
background-color: #023047;
}
input[type='checkbox']:checked:after {
content: '\2713';
color:white;
}
input[type='checkbox']{
text-align: center;
display: table-cell;
vertical-align: middle;
width: 20px !important;
height: 20px !important;
appearance:none;
border-radius:10%;
border: 1px solid rgb(191 35 42 / 90%);
box-shadow: none;
font-size: 1em;
}
<input type="checkbox" > checkbox 1
<input type="checkbox" > checkbox 2