我正在尝试创建一个轻量级切换开关,用于混合Android应用程序 - 取代我目前的努力,依靠脚本来实现其魔力。这是我迄今为止所取得的成就
.onoffBox
{
text-align:left !important;
padding:0.5em;
}
.onOffBox > span
{
display:inline-block;
width:90vw;
text-align:left !important;
color:white;
}
.inpOnOff
{
display:none;
}
.inpOnOff + label
{
width:10vw;
float:right;
background-color:silver;
border-radius:3vw;
height:3vw;
padding:0;
margin:0;
position:relative;
}
.inpOnOff + label:before
{
padding:0;
margin:0;
background-color:white;
content:'';
border-radius:5vw;
height:5vw;
width:5vw;
position:absolute;
left:0;
top:-1vw;
}
.inpOnOff:checked + label{background-color:aqua;}
.inpOnOff:checked + label:before
{
left:calc(100% - 5vw);
background-color:aqua;
}
body{background-color:black;}
<div class='onOffBox'>
<span>Hide Hints</span>
<input id='inpHideHints' class='inpOnOff' type='checkbox'/>
<label for='inpHideHints' id='lblHideHints'></label>
</div>
查看this fiddle以查看此操作。
虽然这有效但我有两个问题
CSS float
感到满意,所以我不确定我的用法是否正确input:checked
状态下我使用CSS calc
来定位label:before
伪元素的左侧。鉴于所有这些都适用于Android混合网络应用程序,我担心早期版本的Android WebView可能无法理解calc
。对于那些可能会在这里提出一些改进或替代方案的人,我非常感激。
答案 0 :(得分:1)
我已将浮动位置更改为绝对值,将其调整为右:0px(或任何您喜欢的)并设置边距。 (这一点取决于你)。
关于左边的计算,也可以避免它用右边定位:0px(从另一个状态向左覆盖)
.onoffBox
{
text-align:left !important;
padding:0.5em;
}
.onOffBox > label
{
display:inline-block;
width:90vw;
text-align:left !important;
color:white;
}
.inpOnOff
{
display:none;
}
.inpOnOff + span
{
width:10vw;
background-color:silver;
border-radius:3vw;
height:3vw;
padding:0;
margin: 10px;
position: absolute;
right: 0px;
}
.inpOnOff + span:before
{
padding:0;
margin:0;
background-color:white;
content:'';
border-radius:5vw;
height:5vw;
width:5vw;
position:absolute;
left:0;
top:-1vw;
}
.inpOnOff:checked + span{background-color:aqua;}
.inpOnOff:checked + span:before
{
left: initial;
right: 0px;
background-color:aqua;
}
body{background-color:black;}
&#13;
<div class='onOffBox'>
<label for='inpHideHints'>Hide Hints</label>
<input id='inpHideHints' class='inpOnOff' type='checkbox'/>
<span id='lblHideHints'></label>
</div>
&#13;
答案 1 :(得分:0)
我已经设法找到一个更好的解决方案,我在这里为了社区的利益而分享。
目标
使用的技巧
使用隐藏的HTML checkbox
输入元素
将其后继label
兄弟作为relative
定位block
元素的样式
使用绝对定位的label:before
伪元素为开关控件创建曲目
使用label:after
伪元素为控件创建滑块
使用input:checked
伪元素使控件响应
代码
body{background-color:black;font-family:arial}
.inpOnOff{display:none;}
.inpOnOff + label
{
display:block;
position:relative;
margin:1vw;
margin-bottom:1em;
color:white !important;
}
.inpOnOff + label:before
{
content:'';
position:absolute;
right:0;
width:10vw;
height:5vw;
border-radius:5vw;
background-color:silver;
}
.inpOnOff + label:after
{
content:'';
position:absolute;
right:5vw;
height:5vw;
width:5vw;
border-radius:5vw;
background-color:white;
z-index:100;
}
.inpOnOff:checked + label:before{background-color:white;}
.inpOnOff:checked + label:after
{
right:0;
background-color:blue;
}
&#13;
<input class='inpOnOff' id='inpHideHint' type='checkbox'/>
<label for='inpHideHint'>Hide Hint</label>
&#13;
切换控件嵌入标签本身的事实确保了控件能够响应其体内任何一个点击/点击。附带好处 - 更轻量级的标记。