我有一个用户将填写并打印的html表单.一旦打印出来,这些表格将被传真或邮寄给政府机构,并且需要看起来像该机构公布的原始表格,政府官员没有发现这是一个复制品.在表单中输入的数据不会保存在任何地方,甚至不会提交回Web服务器.重要的是,我们的用户可以在我们的Intranet站点上轻松找到这些表单,并使用普通键盘输入表单进行打印.
在屏幕上,我想按原样保留单选按钮,以强制执行和传达单选按钮的使用(仅选择一个选项).但是,当它打印出来时,我需要使用方形复选框样式而不是圆形单选按钮样式进行打印.我知道如何使用媒体选择器来设置仅用于打印的样式,所以这不是问题.只是我不知道我是否可以像我想要的那样设置单选按钮的样式.
如果我不能得到这个工作,我会要创建一个复选框影子每个单选按钮,使用JavaScript来保持复选框和单选按钮同步和CSS来显示一个我关心在适当的介质.显然,如果我可以设计它们,它将节省大量的工作.
这个问题发布三年后,几乎可以实现.事实上,它完全可以在Firefox 1 +,Chrome 1 +,Safari 3+和Opera 15+中使用CSS3 appearance
属性.
结果是看起来像复选框的无线电元素:
input[type="radio"] {
-webkit-appearance: checkbox; /* Chrome, Safari, Opera */
-moz-appearance: checkbox; /* Firefox */
-ms-appearance: checkbox; /* not currently supported */
}
在CSS3中:
input[type=radio] {content:url(mycheckbox.png)} input[type=radio]:checked {content:url(mycheckbox-checked.png)}
事实上:
@media screen {.fakecheckbox img {display:none}} @media print {.fakecheckbox input {display:none;}}
并且你需要Javascript来保持和无线电同步(并且理想情况下首先将它们插入那里).
我用过,因为浏览器通常配置为不打印
background-image
.使用图像比使用其他控件更好,因为图像是非交互式的,不太可能导致问题.
这是我使用CSS的解决方案(Jsfiddle:http://jsfiddle.net/xykPT/).
div.options > label > input {
visibility: hidden;
}
div.options > label {
display: block;
margin: 0 0 0 -10px;
padding: 0 0 20px 0;
height: 20px;
width: 150px;
}
div.options > label > img {
display: inline-block;
padding: 0px;
height:30px;
width:30px;
background: none;
}
div.options > label > input:checked +img {
background: url(http://cdn1.iconfinder.com/data/icons/onebit/PNG/onebit_34.png);
background-repeat: no-repeat;
background-position:center center;
background-size:30px 30px;
}
我调整了user2314737的答案,为图标使用字体真棒.对于那些不熟悉fa的人来说,与img相比,一个显着的好处是字体固有的基于矢量的渲染.即在任何缩放级别都没有图像锯齿.
div.checkRadioContainer > label > input {
visibility: hidden;
}
div.checkRadioContainer {
max-width: 10em;
}
div.checkRadioContainer > label {
display: block;
border: 2px solid grey;
margin-bottom: -2px;
cursor: pointer;
}
div.checkRadioContainer > label:hover {
background-color: AliceBlue;
}
div.checkRadioContainer > label > span {
display: inline-block;
vertical-align: top;
line-height: 2em;
}
div.checkRadioContainer > label > input + i {
visibility: hidden;
color: green;
margin-left: -0.5em;
margin-right: 0.2em;
}
div.checkRadioContainer > label > input:checked + i {
visibility: visible;
}