Я использую положение relative и absolute на переключателе и ручке соответственно, затем использую left на ручке, чтобы переместить ее в конец или начало «cSwitch», но примененная мной продолжительность перехода работает только слева направо.
Я тоже пытался применить right, но это ничего не изменило.
const cSwitch = document.querySelectorAll('.cSwitch')[0];
cSwitch.onclick = () => {
(cSwitch.getAttribute('state') === 'on') ? cSwitch.setAttribute('state', 'off') : cSwitch.setAttribute('state', 'on');
}.cSwitch{
position: relative;
width: 150px;
aspect-ratio: 2/1;
border-radius: 50px 50px;
background: crimson;
}
.cSwitch[state = on] .cSwitch_handle{
position: absolute;
left: 50%;
}
.cSwitch_handle{
width: 75px;
aspect-ratio: 1;
border-radius: 50%;
background: skyblue;
left: 0%;
transition: left 0.5s;
}<div class = "switch-wrapper">
<div class = "cSwitch" state = "off" id = "neon-switch">
<div class = "cSwitch_handle"></div>
</div>
</div>





Вы забыли применить position: absolute в состоянии по умолчанию, поэтому left не действует. left может перейти от 50% обратно к 0%, но не применять, потому что элемент не позиционирован.
Вместо этого поместите position: absolute в правило с помощью селектора .cSwitch_handle.
спасибо за ответ, я узнал, что использование margin-left вместо left также исправляет проблему, должен ли я удалить этот вопрос?