我有一个非常简单的问题,但是我找不到一个简单的答案。
我有一个如下复选框:
<input type="checkbox">
并且我想在选中此复选框时更改仅 背景色。
在CSS或JS中有一种简单的方法吗?
答案 0 :(得分:3)
您可以简单地使用:checked伪类和:after伪元素为背景着色。
编辑:要获得复选框的完整背景,我们需要完全自定义该复选框。这是一个完整的CSS解决方案。
input[type="checkbox"]:checked {
background: blue;
color: white;
}
input[type="checkbox"] {
cursor: pointer;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
outline: 0;
background: lightgray;
height: 16px;
width: 16px;
border: 1px solid white;
color: white;
}
input[type="checkbox"]:after {
content: ' ';
position: relative;
left: 40%;
top: 20%;
width: 15%;
height: 40%;
border: solid #fff;
border-width: 0 2px 2px 0;
transform: rotate(50deg);
display: none;
}
input[type="checkbox"]:checked:after {
display: block;
}
<input type="checkbox" />
答案 1 :(得分:2)
我编辑参考代码:reference
这是您至少需要编写的代码:
input[type="checkbox"] {
visibility: hidden;
}
input[type="checkbox"] + label:before {
border: 1px solid #333;
content: "\00a0";
display: inline-block;
font: 16px/1em sans-serif;
height: 16px;
margin: 0 .25em 0 0;
padding: 0;
vertical-align: top;
width: 16px;
}
input[type="checkbox"]:checked + label:before {
background: red;
color: green;
content: "\2713";
text-align: center;
}
<input type="checkbox" id="Custom" name="Custom">
<label for="Custom">Custom Check</label>
答案 2 :(得分:1)
@import url('https://fonts.googleapis.com/css?family=Roboto');
body {
margin: 0;
min-height: 300px;
}
header {
background-color: #f39821;
height: 150px;
}
.content {
background-color: #FFFFFF;
max-width: 80%;
padding: 8px 16px;
margin-top: -56px;
margin-right: auto;
margin-left: auto;
border-radius: 2px;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12);
}
.checkbox {
font-family: 'Roboto', sans-serif;
margin-top: 8px;
margin-bottom: 8px;
}
.checkbox__input {
position: absolute;
width: 0;
height: 0;
margin: 0;
padding: 0;
opacity: 0;
}
.checkbox__label {
font-size: 16px;
color: rgba(0, 0, 0, 0.87);
position: relative;
cursor: pointer;
line-height: 24px;
padding-top: 2px;
padding-bottom: 2px;
padding-left: 28px;
}
.checkbox__label:before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 18px;
height: 18px;
margin: 3px;
border: 2px rgba(0, 0, 0, 0.54) solid;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-webkit-border-radius: 3px;
border-radius: 3px;
}
.checkbox__input:checked ~ .checkbox__label:before {
background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K");
background-color: #f3213d;
border-color: #f3213d;
-webkit-mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxIDEiPjx0aXRsZT51bnRpdGxlZDwvdGl0bGU+PHBhdGggZD0iTTAsMFYxSDFWMEgwWk0wLjQ1LDAuNzRsLTAuMDguMDhMMC4yOCwwLjc0LDAuMTQsMC42bDAuMDgtLjA4TDAuMzYsMC42NWwwLjQxLS40MUwwLjg2LDAuMzJaIi8+PC9zdmc+");
mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxIDEiPjx0aXRsZT51bnRpdGxlZDwvdGl0bGU+PHBhdGggZD0iTTAsMFYxSDFWMEgwWk0wLjQ1LDAuNzRsLTAuMDguMDhMMC4yOCwwLjc0LDAuMTQsMC42bDAuMDgtLjA4TDAuMzYsMC42NWwwLjQxLS40MUwwLjg2LDAuMzJaIi8+PC9zdmc+");
}
.checkbox__input:disabled ~ .checkbox__label {
color: rgba(0, 0, 0, 0.38);
}
.checkbox__input:disabled ~ .checkbox__label:before {
border-color: rgba(0, 0, 0, 0.26);
}
.checkbox__input:checked:disabled ~ .checkbox__label:before {
background-color: rgba(0, 0, 0, 0.26);
background-clip: padding-box;
}
.checkbox__description {
font-size: 12px;
color: rgba(0, 0, 0, 0.54);
margin-left: 28px;
}
.checkbox__input ~ .checkbox__label:after {
content: '';
position: absolute;
top: 0;
left: 0;
-webkit-border-radius: 50%;
border-radius: 50%;
}
.checkbox__input:focus ~ .checkbox__label:after {
-webkit-animation: click-wave .5s;
animation: click-wave .5s;
}
.checkbox__input:checked ~ .checkbox__label:after {
background-color: #f3213d;
}
.checkbox__input:not(:checked) ~ .checkbox__label:after {
background-color: #000;
}
@-webkit-keyframes click-wave {
0% {
width: 24px;
height: 24px;
opacity: 0.5;
}
100% {
width: 48px;
height: 48px;
margin-left: -12px;
margin-top: -12px;
opacity: 0.0;
}
}
@keyframes click-wave {
0% {
width: 24px;
height: 24px;
opacity: 0.5;
}
100% {
width: 48px;
height: 48px;
margin-left: -12px;
margin-top: -12px;
opacity: 0.0;
}
}
<header></header>
<div class="content">
<div class="checkbox">
<input type="checkbox" id="checkbox-1" checked="checked" class="checkbox__input">
<label for="checkbox-1" class="checkbox__label">Checkbox 1</label>
<div class="checkbox__description">Maecenas imperdiet dui velit, nec iaculis felis interdum nec.</div>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-2" class="checkbox__input">
<label for="checkbox-2" class="checkbox__label">Checkbox 2</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-3" checked="checked" class="checkbox__input" disabled>
<label for="checkbox-3" class="checkbox__label">Checkbox 3</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-4" class="checkbox__input" disabled>
<label for="checkbox-4" class="checkbox__label">Checkbox 4</label>
</div>
</div>