我可以使用 CSS 更改复选框的大小吗?
Posted
技术标签:
【中文标题】我可以使用 CSS 更改复选框的大小吗?【英文标题】:Can I change the checkbox size using CSS? 【发布时间】:2010-09-23 08:15:20 【问题描述】:是否可以跨浏览器使用 CSS 或 html 设置复选框的大小?
width
和 size
可以在 IE6+ 中使用,但不适用于 Firefox,即使我设置了较小的尺寸,复选框也会保持 16x16。
【问题讨论】:
跨浏览器很难做到。罗杰约翰逊有investigated 这个相当广泛。 读取所有 cmets - 有一个非常简单的方法可以做到这一点,而不涉及 CSS: 使用这个简单的答案:***.com/questions/57805394/… @Williamz902style=
标签是 CSS...
【参考方案1】:
它有点难看(由于扩大了规模),但它适用于大多数较新的浏览器:
input[type=checkbox]
/* Double-sized Checkboxes */
-ms-transform: scale(2); /* IE */
-moz-transform: scale(2); /* FF */
-webkit-transform: scale(2); /* Safari and Chrome */
-o-transform: scale(2); /* Opera */
transform: scale(2);
padding: 10px;
/* Might want to wrap a span around your checkbox text */
.checkboxtext
/* Checkbox text */
font-size: 110%;
display: inline;
<input type="checkbox" name="optiona" id="opta" checked />
<span class="checkboxtext">
Option A
</span>
<input type="checkbox" name="optionb" id="optb" />
<span class="checkboxtext">
Option B
</span>
<input type="checkbox" name="optionc" id="optc" />
<span class="checkboxtext">
Option C
</span>
【讨论】:
这似乎是正确的答案,因为标记为答案的答案在许多情况下没有提供任何解决方案(xp 上的 firefox 没有解决方案?根本没有 chrome?),已经过时并且只包含一个链接和没有多大价值的评论。 @jdw +1 这个答案,甚至我也需要这样做,你的回答很有帮助。但不知何故,我发现“缩放”复选框看起来有点扭曲。我不知道这是否与 FF 或我的操作系统(Ubuntu 12.04)有关。无论如何谢谢:) 我认为 scale() 需要 2 个用于 chrome、FF 和 IE 的参数。因此,如果您只是将所有比例更改为 scale(2,2) 它应该适用于所有浏览器。 也添加transform: scale(2);
,以确保任何浏览器的更多功能
缩放看起来很棒,在比例 2 上你已经看到了单个像素。我永远不会为漂亮的大型 CSS 复选框选择这个解决方案。【参考方案2】:
适用于所有现代浏览器的工作解决方案。
input[type=checkbox]
transform: scale(1.5);
<label><input type="checkbox"> Test</label>
Compatibility:
IE:10+ FF:16+ 铬:36+ Safari:9+ 歌剧:23+ ios Safari:9.2+ android 版 Chrome:51+外观:
Chrome 58(2017 年 5 月),Windows 10【讨论】:
这是否涵盖像 ie 8 这样的旧浏览器? @Huangism 不,上面的代码在不支持transform
属性的IE 8 中不起作用。 IE 9 支持您可以使用的-ms-transform
,但是有人说它非常像素化,所以最好将 IE 9 保留为默认值。
上述方法还不错,因为规模有限制,因为它会导致复选框像素化。
在 macOS 10.13.3 的 Chrome 64 上极度像素化 :( timo-ernst.net/misc/zeug/cb-pixel.jpg
在 Chrome 76 上仍然像素化。【参考方案3】:
一个简单的解决方案是使用属性zoom
:
input[type="checkbox"]
zoom: 1.5;
<input type="checkbox" />
【讨论】:
不确定它是否适用于所有浏览器,但它在屏幕上看起来比缩放转换解决方案更漂亮。 在带有 macOS 10.13.3 的 Chrome 64 上,这看起来比使用变换 + 缩放的像素化程度要低 Mozilla 强烈反对。 developer.mozilla.org/en-US/docs/Web/CSS/zoom 有趣的是 Mozilla 不鼓励它,而 Firefox 几乎是唯一不支持它的浏览器:caniuse.com/#feat=css-zoom Firefox 不支持【参考方案4】:2020 版 - 使用伪元素,大小取决于字体大小。
默认复选框/单选框在屏幕之外呈现,但 CSS 创建的虚拟元素与默认元素非常相似。支持所有浏览器,不模糊。大小取决于字体大小。还支持键盘操作(空格、制表符)。
https://jsfiddle.net/ohf7nmzy/2/
body
padding:0 20px;
.big
font-size: 50px;
/* CSS below will force radio/checkbox size be same as font size */
label
position: relative;
line-height: 1.4;
/* radio */
input[type=radio]
width: 1em;
font-size: inherit;
margin: 0;
transform: translateX(-9999px);
input[type=radio] + label:before
position: absolute;
content: '';
left: -1.3em;
top: 0;
width: 1em;
height: 1em;
margin: 0;
border:none;
border-radius: 50%;
background-color: #bbbbbb;
input[type=radio] + label:after
position: absolute;
content: '';
left: -1.3em;
top: 0;
width: 1em;
height: 1em;
margin: 0;
border: none;
background-color: white;
border-radius: 50%;
transform: scale(0.8);
/*checked*/
input[type=radio]:checked + label:before
position:absolute;
content:'';
left: -1.3em;
top: 0;
width: 1em;
height: 1em;
margin: 0;
border: none;
background-color: #3b88fd;
input[type=radio]:checked + label:after
position: absolute;
content: '';
left: -1.3em;
top: 0;
width: 1em;
height: 1em;
margin: 0;
border: none;
background-color: white;
border-radius: 50%;
transform: scale(0.3);
/*focused*/
input[type=radio]:focus + label:before
border: 0.2em solid #8eb9fb;
margin-top: -0.2em;
margin-left: -0.2em;
box-shadow: 0 0 0.3em #3b88fd;
/*checkbox/*/
input[type=checkbox]
width: 1em;
font-size: inherit;
margin: 0;
transform: translateX(-9999px);
input[type=checkbox] + label:before
position: absolute;
content: '';
left: -1.3em;
top: 0;
width: 1em;
height: 1em;
margin: 0;
border:none;
border-radius: 10%;
background-color: #bbbbbb;
input[type=checkbox] + label:after
position: absolute;
content: '';
left: -1.3em;
top: 0;
width: 1em;
height: 1em;
margin: 0;
border: none;
background-color: white;
border-radius: 10%;
transform: scale(0.8);
/*checked*/
input[type=checkbox]:checked + label:before
position:absolute;
content:'';
left: -1.3em;
top: 0;
width: 1em;
height: 1em;
margin: 0;
border: none;
background-color: #3b88fd;
input[type=checkbox]:checked + label:after
position: absolute;
content: "\2713";
left: -1.3em;
top: 0;
width: 1em;
height: 1em;
margin: 0;
border: none;
background-color: #3b88fd;
border-radius: 10%;
color: white;
text-align: center;
line-height: 1;
/*focused*/
input[type=checkbox]:focus + label:before
border: 0.1em solid #8eb9fb;
margin-top: -0.1em;
margin-left: -0.1em;
box-shadow: 0 0 0.2em #3b88fd;
<input type="checkbox" name="checkbox_1" id="ee" checked />
<label for="ee">Checkbox small</label>
<br />
<input type="checkbox" name="checkbox_2" id="ff" />
<label for="ff">Checkbox small</label>
<hr />
<div class="big">
<input type="checkbox" name="checkbox_3" id="gg" checked />
<label for="gg">Checkbox big</label>
<br />
<input type="checkbox" name="checkbox_4" id="hh" />
<label for="hh">Checkbox big</label>
</div>
<hr />
<input type="radio" name="radio_1" id="aa" value="1" checked />
<label for="aa">Radio small</label>
<br />
<input type="radio" name="radio_1" id="bb" value="2" />
<label for="bb">Radio small</label>
<hr />
<div class="big">
<input type="radio" name="radio_2" id="cc" value="1" checked />
<label for="cc">Radio big</label>
<br />
<input type="radio" name="radio_2" id="dd" value="2" />
<label for="dd">Radio big</label>
</div>
2017 版 - 使用缩放或缩放
浏览器将使用非标准 zoom
功能(如果支持(质量不错)或标准 transform: scale
(在 Safari 上模糊)作为后备)。
https://jsfiddle.net/ksvx2txb/11/
@supports (zoom:2)
input[type="radio"], input[type=checkbox]
zoom: 2;
@supports not (zoom:2)
input[type="radio"], input[type=checkbox]
transform: scale(2);
margin: 15px;
label
/* fix vertical align issues */
display: inline-block;
vertical-align: top;
margin-top: 10px;
<input type="radio" name="aa" value="1" id="aa" checked />
<label for="aa">Radio 1</label>
<br />
<input type="radio" name="aa" value="2" id="bb" />
<label for="bb">Radio 2</label>
<br /><br />
<input type="checkbox" name="optiona" id="cc" checked />
<label for="cc">Checkbox 1</label>
<br />
<input type="checkbox" name="optiona" id="dd" />
<label for="dd">Checkbox 1</label>
【讨论】:
Zoom 看起来在 FQ 上运行良好。也许要注意旧版本的 Gecko?【参考方案5】:我刚刚发现了这个:
input[type="checkbox"] display:none;
input[type="checkbox"] + label:before content:"☐";
input:checked + label:before content:"☑";
label:hover color:blue;
<input id="check" type="checkbox" /><label for="check">Checkbox</label>
当然,多亏了这一点,您可以根据需要更改content
的值,并根据需要使用图像或使用其他字体...
这里的主要兴趣是:
复选框大小与文本大小保持成比例
您可以控制复选框的纵横比、颜色、大小
不需要额外的 HTML !
只需要 3 行 CSS(最后一行只是给你一些想法)
编辑:
正如评论中所指出的,该复选框将无法通过键导航访问。您可能应该将 tabindex=0
添加为标签的属性以使其具有焦点。
【讨论】:
不幸的是,在输入上设置display:none
会阻止它被tab
键选中,所以我认为这不是一个好主意。
好话。您可以在输入中添加 tabindex=0 来解决这个问题。
我想知道所有这些 CSS 规则是否会混淆某些辅助功能?【参考方案6】:
预览:http://jsfiddle.net/h4qka9td/
*,*:after,*:before
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 0;
margin: 0;
.switch
margin: 50px auto;
position: relative;
.switch label
width: 100%;
height: 100%;
position: relative;
display: block;
.switch input
top: 0;
right: 0;
bottom: 0;
left: 0;
opacity: 0;
z-index: 100;
position: absolute;
width: 100%;
height: 100%;
cursor: pointer;
/* DEMO 3 */
.switch.demo3
width: 180px;
height: 50px;
.switch.demo3 label
display: block;
width: 100%;
height: 100%;
background: #a5a39d;
border-radius: 40px;
box-shadow:
inset 0 3px 8px 1px rgba(0,0,0,0.2),
0 1px 0 rgba(255,255,255,0.5);
.switch.demo3 label:after
content: "";
position: absolute;
z-index: -1;
top: -8px; right: -8px; bottom: -8px; left: -8px;
border-radius: inherit;
background: #ababab;
background: -moz-linear-gradient(#f2f2f2, #ababab);
background: -ms-linear-gradient(#f2f2f2, #ababab);
background: -o-linear-gradient(#f2f2f2, #ababab);
background: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ababab));
background: -webkit-linear-gradient(#f2f2f2, #ababab);
background: linear-gradient(#f2f2f2, #ababab);
box-shadow: 0 0 10px rgba(0,0,0,0.3),
0 1px 1px rgba(0,0,0,0.25);
.switch.demo3 label:before
content: "";
position: absolute;
z-index: -1;
top: -18px; right: -18px; bottom: -18px; left: -18px;
border-radius: inherit;
background: #eee;
background: -moz-linear-gradient(#e5e7e6, #eee);
background: -ms-linear-gradient(#e5e7e6, #eee);
background: -o-linear-gradient(#e5e7e6, #eee);
background: -webkit-gradient(linear, 0 0, 0 100%, from(#e5e7e6), to(#eee));
background: -webkit-linear-gradient(#e5e7e6, #eee);
background: linear-gradient(#e5e7e6, #eee);
box-shadow:
0 1px 0 rgba(255,255,255,0.5);
-webkit-filter: blur(1px);
-moz-filter: blur(1px);
-ms-filter: blur(1px);
-o-filter: blur(1px);
filter: blur(1px);
.switch.demo3 label i
display: block;
height: 100%;
width: 60%;
border-radius: inherit;
background: silver;
position: absolute;
z-index: 2;
right: 40%;
top: 0;
background: #b2ac9e;
background: -moz-linear-gradient(#f7f2f6, #b2ac9e);
background: -ms-linear-gradient(#f7f2f6, #b2ac9e);
background: -o-linear-gradient(#f7f2f6, #b2ac9e);
background: -webkit-gradient(linear, 0 0, 0 100%, from(#f7f2f6), to(#b2ac9e));
background: -webkit-linear-gradient(#f7f2f6, #b2ac9e);
background: linear-gradient(#f7f2f6, #b2ac9e);
box-shadow:
inset 0 1px 0 white,
0 0 8px rgba(0,0,0,0.3),
0 5px 5px rgba(0,0,0,0.2);
.switch.demo3 label i:after
content: "";
position: absolute;
left: 15%;
top: 25%;
width: 70%;
height: 50%;
background: #d2cbc3;
background: -moz-linear-gradient(#cbc7bc, #d2cbc3);
background: -ms-linear-gradient(#cbc7bc, #d2cbc3);
background: -o-linear-gradient(#cbc7bc, #d2cbc3);
background: -webkit-gradient(linear, 0 0, 0 100%, from(#cbc7bc), to(#d2cbc3));
background: -webkit-linear-gradient(#cbc7bc, #d2cbc3);
background: linear-gradient(#cbc7bc, #d2cbc3);
border-radius: inherit;
.switch.demo3 label i:before
content: "off";
text-transform: uppercase;
font-style: normal;
font-weight: bold;
color: rgba(0,0,0,0.4);
text-shadow: 0 1px 0 #bcb8ae, 0 -1px 0 #97958e;
font-family: Helvetica, Arial, sans-serif;
font-size: 24px;
position: absolute;
top: 50%;
margin-top: -12px;
right: -50%;
.switch.demo3 input:checked ~ label
background: #9abb82;
.switch.demo3 input:checked ~ label i
right: -1%;
.switch.demo3 input:checked ~ label i:before
content: "on";
right: 115%;
color: #82a06a;
text-shadow:
0 1px 0 #afcb9b,
0 -1px 0 #6b8659;
<div class="switch demo3">
<input type="checkbox">
<label><i></i>
</label>
</div>
<div class="switch demo3">
<input type="checkbox" checked>
<label><i></i>
</label>
</div>
【讨论】:
@robertjd 同意,对为什么简单的转换需要这样做感到困惑 @robertjd 这些甚至都不是复选框;它们是切换开关。【参考方案7】:默认情况下,复选框的外观似乎是固定的。但正如 Worthy7 所指出的,这可以使用CSS appearance
property 来解决。它将使复选框完全为空,因此您可以定义自己的外观。这样做的好处是:您可以使用现有的 HTML 代码。缺点:它是experimental technology。 Edge(旧版)和 IE 不使用自定义样式。
以下是所需的 CSS 样式:
input[type=checkbox]
width: 14mm;
-webkit-appearance: none;
-moz-appearance: none;
height: 14mm;
border: 0.1mm solid black;
input[type=checkbox]:checked
background-color: lightblue;
input[type=checkbox]:checked:after
margin-left: 4.3mm;
margin-top: -0.4mm;
width: 3mm;
height: 10mm;
border: solid white;
border-width: 0 2mm 2mm 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
content: "";
display: inline-block;
<label><input type="checkbox"> Test</label>
截图:
铬:
火狐:
边缘:
Edge(旧版):
IE:
【讨论】:
【参考方案8】:我认为最简单的解决方案是按照一些用户的建议重新设置复选框的样式。下面的 CSS 对我有用,只需要几行 CSS,并回答了 OP 问题:
input[type=checkbox]
-webkit-appearance: none;
-moz-appearance: none;
vertical-align: middle;
width: 14px;
height: 14px;
font-size: 14px;
background-color: #eee;
input[type=checkbox]:checked:after
position: relative;
bottom: 3px;
left: 1px;
color: blue;
content: "\2713"; /* check mark */
正如本文所述,缩放属性似乎不适用于 Firefox,并且转换可能会导致不良影响。
在 Chrome 和 Firefox 上测试,应该适用于所有现代浏览器。只需根据您的需要更改属性(颜色、大小、底部、左侧等)。希望对您有所帮助!
【讨论】:
【参考方案9】:我正在寻找一个稍微大一点的复选框,并查看了 37Signals Basecamp 的源代码以找到以下解决方案-
您可以更改字体大小以使复选框略大:
font-size: x-large;
然后,您可以通过以下方式正确对齐复选框:
vertical-align: top;
margin-top: 3px; /* change to center it */
【讨论】:
font-size 似乎根本不影响实际复选框的大小【参考方案10】:您可以使用以下属性在 Safari 中使复选框变大(这通常无法使用通常的方法):-webkit-transform: scale(1.3, 1.3);
Source
【讨论】:
【参考方案11】:我的理解是,跨浏览器根本不容易。无需尝试操作复选框控件,您始终可以使用图像、javascript 和隐藏输入字段构建自己的实现。我假设这类似于 niceforms 是什么(来自 Staicu lonut 上面的回答),但实施起来并不特别困难。我相信 jQuery 也有一个插件来允许这种自定义行为(如果我能找到它,我会在此处查找链接并发布)。
【讨论】:
【参考方案12】:我发现这个纯 CSS 库非常有用: https://lokesh-coder.github.io/pretty-checkbox/
或者,您可以使用相同的基本概念自行开发,类似于 @Sharcoux 发布的内容。基本上是:
隐藏普通复选框(不透明度为 0 并放置在该位置) 添加基于 CSS 的假复选框 将input:checked~div label
用于检查样式
确保您的<label>
可以使用for=yourinputID
进行点击
.pretty
position: relative;
margin: 1em;
.pretty input
position: absolute;
left: 0;
top: 0;
min-width: 1em;
width: 100%;
height: 100%;
z-index: 2;
opacity: 0;
margin: 0;
padding: 0;
cursor: pointer;
.pretty-inner
box-sizing: border-box;
position: relative;
.pretty-inner label
position: initial;
display: inline-block;
font-weight: 400;
margin: 0;
text-indent: 1.5em;
min-width: calc(1em + 2px);
.pretty-inner label:after,
.pretty-inner label:before
content: '';
width: calc(1em + 2px);
height: calc(1em + 2px);
display: block;
box-sizing: border-box;
border-radius: 0;
border: 1px solid transparent;
z-index: 0;
position: absolute;
left: 0;
top: 0;
background-color: transparent;
.pretty-inner label:before
border-color: #bdc3c7;
.pretty input:checked~.pretty-inner label:after
background-color: #00bb82;
width: calc(1em - 6px);
height: calc(1em - 6px);
top: 4px;
left: 4px;
/* Add checkmark character style */
.pretty input:checked~.pretty-inner.checkmark:after
content: '\2713';
color: #fff;
position: absolute;
font-size: 0.65em;
left: 6px;
top: 3px;
body
font-size: 20px;
font-family: sans-serif;
<div class="pretty">
<input type="checkbox" id="demo" name="demo">
<div class="pretty-inner"><label for="demo">I agree.</label></div>
</div>
<div class="pretty">
<input type="checkbox" id="demo" name="demo">
<div class="pretty-inner checkmark"><label for="demo">Please check the box.</label></div>
</div>
【讨论】:
【参考方案13】:问题是 Firefox 不听宽度和高度。禁用它,一切顺利。
input[type=checkbox]
width: 25px;
height: 25px;
-moz-appearance: none;
<label><input type="checkbox"> Test</label>
【讨论】:
这只会使整个复选框消失。然后,您必须提供背景颜色才能看到它。但是,如何使复选标记出现?这个答案不完整。【参考方案14】:其他答案显示了一个像素化的复选框,而我想要一些漂亮的东西。 结果如下所示:
虽然这个版本比较复杂,但我认为值得一试。
.checkbox-list__item
position: relative;
padding: 10px 0;
display: block;
cursor: pointer;
margin: 0 0 0 34px;
border-bottom: 1px solid #b4bcc2;
.checkbox-list__item:last-of-type
border-bottom: 0;
.checkbox-list__check
width: 18px;
height: 18px;
border: 3px solid #b4bcc2;
position: absolute;
left: -34px;
top: 50%;
margin-top: -12px;
transition: border .3s ease;
border-radius: 5px;
.checkbox-list__check:before
position: absolute;
display: block;
width: 18px;
height: 22px;
top: -2px;
left: 0px;
padding-left: 2px;
background-color: transparent;
transition: background-color .3s ease;
content: '\2713';
font-family: initial;
font-size: 19px;
color: white;
input[type="checkbox"]:checked ~ .checkbox-list__check
border-color: #5bc0de;
input[type="checkbox"]:checked ~ .checkbox-list__check:before
background-color: #5bc0de;
<label class="checkbox-list__item">
<input class="checkbox_buttons" type="checkbox" checked="checked" style="display: none;">
<div class="checkbox-list__check"></div>
</label>
JSFiddle:https://jsfiddle.net/asbd4hpr/
【讨论】:
【参考方案15】:我的声誉有点太低,无法发布 cmets,但我对上面 Jack Miller 的代码进行了修改,以使其在您选中和取消选中时不会改变大小。这给我造成了文本对齐问题。
input[type=checkbox]
width: 17px;
-webkit-appearance: none;
-moz-appearance: none;
height: 17px;
border: 1px solid black;
input[type=checkbox]:checked
background-color: #F58027;
input[type=checkbox]:checked:after
margin-left: 4px;
margin-top: -1px;
width: 4px;
height: 12px;
border: solid white;
border-width: 0 2px 2px 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
content: "";
display: inline-block;
input[type=checkbox]:after
margin-left: 4px;
margin-top: -1px;
width: 4px;
height: 12px;
border: solid white;
border-width: 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
content: "";
display: inline-block;
<label><input type="checkbox"> Test</label>
【讨论】:
【参考方案16】:使用这个 CSS 代码
input[type=checkbox]
/* Double-sized Checkboxes */
-ms-transform: scale(1.5); /* IE */
-moz-transform: scale(1.5); /* FF */
-webkit-transform: scale(1.5); /* Safari and Chrome */
-o-transform: scale(1.5); /* Opera */
transform: scale(1.5);
padding: 10px;
【讨论】:
【参考方案17】:这应该可以工作
input
width: 25px;
height: 25px;
至少在 Firefox 和 Chrome 以及 iPhone 的 Firefox、Chrome 和 Safari 上它对我有用。
【讨论】:
【参考方案18】:您可以在下面的代码中更改高度和宽度
.checkmark
position: absolute;
top: 0;
left: 0;
height: 20px;
width: 20px;
border-radius:5px;
border:1px solid #ff7e02;
<div class="check">
<label class="container1">Architecture/Landscape
<input type="checkbox" checked="checked">
<span class="checkmark"></span>
</label>
</div>
【讨论】:
以上是关于我可以使用 CSS 更改复选框的大小吗?的主要内容,如果未能解决你的问题,请参考以下文章