当我聚焦这个控件时,它会得到一个轮廓,如所期望的那样,但是当我用主鼠标按钮单击并按住它时,轮廓就会消失。我该怎么解决?
:root {
--color-mint: #02b689;
--color-white: #ffffff;
--color-silver: #c2c2c2;
--focus-color: #3b3e3f;
--focus-opacity: 0.5;
}
.toggle {
position: relative;
display: inline-block;
width: 60px;
height: 26px;
}
.toggle input {
width: 0;
height: 16px;
pointer-events: none;
}
.toggle_slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: var(--color-silver);
transition: .3s;
border-radius: 26px;
}
.toggle_slider:before {
position: absolute;
content: "";
height: 22px;
width: 22px;
left: 2px;
bottom: 2px;
background-color: var(--color-white);
transition: .3s;
border-radius: 50%;
}
.toggle_slider::after {
content: "";
border-radius: 26px;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
border: 2px solid var(--focus-color);
margin: -3px;
opacity: 0;
}
input:checked+.toggle_slider {
background-color: var(--color-mint);
}
input:checked+.toggle_slider:before {
transform: translateX(34px);
}
.toggle input:focus+.toggle_slider::after {
opacity: var(--focus-opacity);
}
个字符
注意:如果可能的话,我不想使用JavaScript。
2条答案
按热度按时间trnvg8h31#
以下是CSS解决方案:您可以将伪选择器
::after
定位到.toggle_slider
的活动状态字符串
的数据
9jyewag02#
您遇到的问题是由于某些浏览器的默认行为,即在单击元素或元素获得焦点时删除轮廓。此行为通常与CSS**:focus伪类相关联。
要防止在单击并按住元素时轮廓消失,可以修改:focus**样式以显式定义聚焦状态的轮廓。
字符串
通过此修改,当**.toggle元素内的复选框获得焦点时(例如,单击它时),.toggle_slider将具有2 px实心轮廓,并在:root块中指定--focus-color**。outline-offset用于使轮廓包围元素,而不影响其大小。
现在,当您单击并按住元素时,轮廓将保持可见。