Can I change elem's css rule by input range without js? Like this:
<input type="range" min="0" max="100">
<span>Some text</span>
input[value="0"]+span {background:red;}
input[value="50"]+span {background:green;}
No, the CSS parser would look for an attribute called value with a value of 0. It's a stupid language and isn't meant to interpret the way you're hoping. You could add JS to give the input an actual value attribute with the appropriate value on range change, and then the CSS would pick up on it.
Example jQuery snippet:
$('[type="range"]').on('change', function() {
$(this).attr('value', this.value);
}).change();
valuecorrectly. Beyond that this is what I'd try.