После введения кастомных свойств, его можно делать хоть градиентом. Раньше тоже было можно, но это был не очень вариант.
Итак:
- градиент
- стилизовать range (правда, не очень подходит, т.к. не клиент его двигает)
- два блока, один над другим
- svg
Нарисовать SVG и вставить фоном?
Нарисовать градиентами?
Вы сделайте хоть как-нибудь, а потом оптимизируйте.
Тут нет однозначного "правильно". Есть более или менее удобные для вас варианты для решения задачи.
Кстати, поиск по codepen.io даст вам десяток-другой примеров реализиций.