javascript - 属性上的悬停效果
问题描述
我试图弄清楚如何在-slider-thumb
我的范围输入滑块的属性上制作一个 10px 的光环。我正在使用 React、CSS 和 HTML,但由于overflow:hidden
属性的原因,我发现这很难做到。这个属性必须保留,因为没有它基本上没有代码工作(这是编辑滑块基础 css 的解决方案的一部分)。我尝试使用 ::after 和 ::before 无济于事。所以我想知道我做错了什么,或者这是否可能,因为我还没有找到任何文档。下面提供的代码和 Codepen。感谢您的任何帮助/建议!
HTML:
<div id="root"></div>
CSS:
input[type='range'] {
-webkit-appearance: none;
background-color: #ddd;
height: 10px;
overflow: hidden;
width: 300px;
border-radius: 5px;
outline: none;
}
input[type='range']::-webkit-slider-runnable-track {
-webkit-appearance: none;
height: 10px;
}
input[type='range']::-webkit-slider-thumb {
-webkit-appearance: none;
--slider-thumb-background-color: #000;
background: var(--slider-thumb-background-color);
border-radius: 50%;
--box-shadow-color: orange;
box-shadow: -205px 0 0 200px var(--box-shadow-color);
cursor: pointer;
height: 10px;
width: 10px;
--border-color: orange;
border: 3px solid var(--border-color);
}
input[type='range']::-webkit-slider-thumb:hover::after {
content: '';
height: 10px;
width: 10px;
border-radius: 5px;
color: yellow;
}
input[type='range']::-webkit-slider-thumb:hover {
--slider-thumb-background-color: grey;
--box-shadow-color: red;
--border-color: red;
}
input[type='range']::-webkit-slider-thumb:active {
--slider-thumb-background-color: white;
--box-shadow-color: blue;
--border-color: blue;
}
input[type='range']::-webkit-slider-thumb:focus {
--slider-thumb-background-color: white;
--box-shadow-color: yellow;
--border-color: yellow;
}
input[type='range']::-webkit-slider-thumb:hover:after {
border: 10px solid rgb(111, 111, 0.4);
overflow: auto;
postion: fixed;
}
input[type='range']::-moz-range-thumb {
background: #333;
border-radius: 50%;
box-shadow: -1005px 0 0 1000px red;
cursor: pointer;
height: 10px;
width: 10px;
border: 0;
}
JS(通天塔)
class VolumeSlider extends React.Component {
constructor() {
super();
this.state = {
value: 120.5
};
}
onUpdate(e) {
this.setState({
value: e.target.value
});
}
render() {
return (
<div>
<div className="mb1">
<input
className="c-input--range"
list="tickmarks"
max={1200}
onChange={(e) => this.onUpdate(e)}
step={0.1}
type="range"
value={this.state.value}
/>
<div>
<label className="c-label">{this.state.value}c</label>
</div>
</div>
</div>
);
}
}
ReactDOM.render(
<div>
<VolumeSlider />
</div>,
document.getElementById("root")
);
解决方案
看看这支笔,希望这就是你要找的东西,解释:我已经添加了绝对位置使输入相对位置成为后 1px X 1px,插入然后将 X 轴从 0 转换为我想要的任何值.
input[type='range']::after{
content: "";
position: absolute;
top: 0px;
left: 0px;
border-radius: 50%;
visibility: hidden;
width: 1px;
height: 1px;
box-shadow: 0 0 10px 5px #fff, inset 0 0 10px 5px #fff;
}
input[type='range']:hover::after{
visibility: visible;
animation: wave 2s forwards;
}@keyframes wave {
0% {
transform:translateX(0);
}
100% {
transform:translateX(500px);
}
}
推荐阅读
- r - 标记由 axis() 函数生成的轴
- iis - 二维码 URL 有非法的 '%03',我可以 HTTP 重定向吗?
- c++ - 让 LLVM 6.0.0 lld-link 与 Code::Blocks 一起工作
- .net - 如何在不参考谷物实现的情况下调用奥尔良谷物方法?
- android - 带有显示更多选项的网格视图
- c# - 在 C# 中定位多个 office/outlook 版本
- validation - 使用 ConstraintValidator 验证对象
- javascript - 当 Div 在视口中时,希望 JavaScript 脚本运行
- java - Android 分享到 Facebook 不起作用
- c# - 从包含多种类型的 JSON 对象中提取数组