阿波罗的战车
最好的方法是使用CSS Variables将颜色传递给伪选择器。我在下面整理了一个非常简单的例子:const input = document.querySelector( 'input' );input.addEventListener( 'input', event => { // This assigns the strength of the color to a CSS variable, which will in turn style the slider. input.style.setProperty( '--color', `rgba(${input.value},0,0,1)`); }):root { --color: rgba(0,0,0,1);}input[type=range] { width: 100%; height: 1em; appearance: none; -webkit-appearance: none; background: linear-gradient( 90deg, black, red );}input[type=range]::-webkit-slider-thumb { background: var(--color, white); appearance: none; -webkit-appearance: none; width: 20px; height: 20px; border-radius: 20px; border: 1px solid white;}<input type="range" value="1" min="0" max="255" step="1" />这里的优雅之处在于它也与所有旧浏览器很好地兼容,因为您可以为那些懒得使用现代浏览器的人定义默认的白色。不,JS 中无法访问伪元素,因为它们……技术上不存在。