所以我使用下面的css设置了我的无线电输入。但是在Firefox中,会出现一个完全不同的收音机,我根本无法设置它的样式。
它在safari和chrome中完美运行但我似乎无法弄清楚为什么它在Firefox中不起作用。
input[type=checkbox] {
border: 0px;
cursor: pointer;
height: 20px;
margin: 0px 10px 0px 0px;
position: relative;
overflow: hidden;
vertical-align: -5px;
width: 20px;
}
input[type=checkbox]:before {
background-color: transparent;
border: 2px solid #E0E0E0;
content: '';
display: block;
height: 20px;
left: 0px;
opacity: 1;
position: absolute;
transition: opacity .15s linear;
top: 0px;
width: 20px;
}
input[type=checkbox]:after {
border: 2px solid #EC407A;
content: '';
display: block;
height: 23px;
left: -5px;
opacity: 0;
position: absolute;
top: -9px;
transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transition: opacity .15s linear;
width: 27px;
}
input[type=checkbox]:checked:before {
opacity: 0;
}
input[type=checkbox]:checked:after {
opacity: 1;
}
input[type=checkbox]:focus {
box-shadow: none;
outline: 0px;
}
.radio-wrapper {
position: relative;
}
input[type='radio'] {
-webkit-appearance: none;
-moz-appearance: none;
-ms-appearance: none;
-o-appearance: none;
appearance: none;
position: relative;
right: 0;
bottom: 0;
left: 0;
height: 20px;
width: 20px;
-webkit-transition: all 0.15s ease-out 0s;
-moz-transition: all 0.15s ease-out 0s;
transition: all 0.15s ease-out 0s;
background: #cbd1d8;
border: none;
color: #fff;
cursor: pointer;
display: inline-block;
outline: none;
position: relative;
border-radius: 50%;
}
@-webkit-keyframes click-wave {
0% {
height: 40px;
width: 40px;
opacity: 0.35;
position: relative;
}
100% {
height: 200px;
width: 200px;
margin-left: -80px;
margin-top: -80px;
opacity: 0.0;
}
}
@-moz-keyframes click-wave {
0% {
height: 40px;
width: 40px;
opacity: 0.35;
position: relative;
}
100% {
height: 200px;
width: 200px;
margin-left: -80px;
margin-top: -80px;
opacity: 0.0;
}
}
@keyframes click-wave {
0% {
height: 40px;
width: 40px;
opacity: 0.35;
position: relative;
}
100% {
height: 200px;
width: 200px;
margin-left: -80px;
margin-top: -80px;
opacity: 0.0;
}
}
.option-input {
-webkit-transition: all 0.15s ease-out 0s;
-moz-transition: all 0.15s ease-out 0s;
transition: all 0.15s ease-out 0s;
background: #7CE1C9;
border: none;
color: #fff;
cursor: pointer;
display: inline-block;
outline: none;
position: relative;
margin-right: 0.5rem;
}
.option-input:hover {
background: #9faab7;
}
.option-input:checked {
background: #7CE1C9;
}
.option-input:checked::before {
height: 20px;
width: 20px;
position: relative;
content: '\2716';
display: inline-block;
font-size: 14.66667px;
text-align: center;
line-height: 20px;
}
.option-input:checked::after {
-webkit-animation: click-wave 0.65s;
-moz-animation: click-wave 0.65s;
animation: click-wave 0.65s;
background: #7CE1C9;
content: '';
display: block;
position: relative;
}
.option-input.radio {
border-radius: 50%;
}
.option-input.radio::after {
border-radius: 50%;
}
input[type='radio'] + label {
user-select: none;
cursor: pointer;
padding-left: 30px;
}
input[type='radio'] + label:before,
input[type='radio'] + label:after {
background: #fff;
background-clip: padding-box;
border: 2px solid #EC407A;
border-radius: 50%;
bottom: 3px;
content: '';
display: block;
height: 16px;
left: 3px;
margin-top: -8px;
position: absolute;
top: 50%;
transition: all 0.3s ease;
width: 16px;
}
input[type='radio'] + label:after {
background: #7CE1C9;
border: 2px solid #fff;
transform: scale(0);
-wekbit-transform: scale(0);
transition: all 0.3s ease;
}
input[type='radio']:focus + label:before {
box-shadow: 0 0 5px #EC407A;
}
input[type='radio']:checked + label:before {
border-color: #EC407A;
}
input[type='radio']:checked + label:after {
transform: scale(0.75, 0.75);
-webkit-transform: scale(0.75, 0.75);
}
`
<form>
<li class='initialForm'><span class='optionText'>$option1</span><strong><input type='radio' class='option-input radio option1' id='$id' value='1' name='option'></strong>
</li>
<li class='initialForm'><span class='optionText'>$option2</span><strong><input type='radio' class='option-input radio option2' id='$id' value='2' name='option'></strong>
</li>
</form>
答案 0 :(得分:0)
您使用的是-webkit
CSS前缀,专门用于Chrome和Safari(或基于webkit的浏览器)。
您还应该使用-moz
CSS前缀,特别是Firefox。当然,如果你想支持IE,它们可能对某些方法有额外或不同的风格。
专门针对您的transform
方法,在Firefox中,它被认为是实验性的,可能-moz-transform
更合适。
答案 1 :(得分:0)
来源:https://clarknikdelpowell.com/blog/styling-radio-buttons-select-boxes-in-firefox/
尽管它是Chrome,Safari和Firefox(-webkit-appearance,-moz-appearance)的一部分,但实际上并不是CSS。很多人使用-webkit-appearance:none从按钮,输入重命名所有内容的外观。但是,有一些Firefox错误使得-moz-appearance:没有一个危险的命题。
由于外观在复选框和单选按钮上都不起作用。你仍然可以设置单选按钮的样式,你只需要使用一些技巧就可以实现它。这是你如何做到的。
将收音机输入设为display:none。
按照您要设置单选按钮样式的方式设置单选按钮旁边的范围。
使用:checked属性切换其外观。
有关浏览器兼容性和更多信息,请参阅源代码 使用:checked属性切换其外观。
答案 2 :(得分:-1)
我在网上找到了这篇博文,它解决了你遇到的问题:https://clarknikdelpowell.com/blog/styling-radio-buttons-select-boxes-in-firefox/
编辑:
一般来说,直接设置单选按钮被认为是不好的做法。您遇到问题的原因是因为-webkit-appearance, -moz-appearance
实际上不是CSS。由于您不能直接设置单选按钮的样式,因此您必须使用一些解决方法。
我使用您指定的一些代码在jsFiddle上绘制了一个基本示例:https://jsfiddle.net/o3nurghw/2/
HTML:
<form>
<li class='initialForm'>
<span class='optionText'>$option1</span>
<input type='radio' class='option-input radio option1' id='$id' value='1' name='option' />
<span class="overlay"></span> <!-- the adjacent span -->
</li>
<li class='initialForm'>
<span class='optionText'>$option2</span>
<input type='radio' class='option-input radio option2' id='$id' value='2' name='option' />
<span class="overlay"></span> <!-- the adjacent span -->
</li>
</form>
CSS:
.initialForm {
margin-bottom: .5em;
display: block;
cursor: pointer;
font-size: 16px;
line-height: 1em;
}
.overlay {
position: relative;
right: 0;
bottom: 0;
left: 0;
height: 20px;
width: 20px;
-webkit-transition: all 0.15s ease-out 0s;
-moz-transition: all 0.15s ease-out 0s;
transition: all 0.15s ease-out 0s;
background: #cbd1d8;
border: none;
color: #fff;
cursor: pointer;
display: inline-block;
outline: none;
position: relative;
border-radius: 50%;
}
.radio {
display: none;
}
.radio:checked + span:before {
width: .75em;
height: .75em;
margin: .125em;
display: block;
content: " ";
background-color: #666;
border-radius: 100%;
}