Как выбрать все элементы которое находится над другим элементом с помощью CSS?
Никак нельзя выбрать предыдущих в CSS.

Можно зашаманить так, всё же меняя их местами, но визуально они будут в том же положении:
<div>
  <input type="text" id="test">
  <label for="test">Text</label>
</div>

div{
  display: flex;
  flex-direction: column;
}
label{ order: 1 }
input{ order: 2 }
input:focus + label{ background: red }
На пример при фокусе на input надо менять цвет текста label.
Можно, с помощью псевдокласса :focus-within
snippet