При добавлении label в код checkbox по какой-то причине перестает работать

.burger:checked+div {
  background-color: red;
}
<div>
  <input type="checkbox" name="a" id="inp" class="burger" checked="checked">
  <label for="inp">Label</label>
  <div>Hello</div>
</div>

При добавлении label в код checkbox по какой-то причине перестает работать, как можно это исправить, или переписать но правильно. Если же убрать тег label то все начинает работать как положено.

PS: код написан в очень тестовом варианте, код может быть слабо читаемым, извините. Заранее спасибо за ответ


Ответы (2 шт):

Автор решения: soledar10

Один из вариантов, перенести все внутрь label

.checkbox {
  display: block;
  margin-bottom: 1rem;
}

.checkbox__control:checked~.checkbox__text {
  background-color: red;
}
<label class="checkbox">
    <input type="checkbox" name="a" class="checkbox__control" checked>
    <span class="checkbox__label">Label</span>
    <span class="checkbox__text">Hello</span>    
  </label>
<label class="checkbox">
    <input type="checkbox" name="a" class="checkbox__control" checked>
    <span class="checkbox__label">Label 2</span>
    <span class="checkbox__text">Hello 2</span>    
  </label>

→ Ссылка
Автор решения: Anton Shchyrov

Селектор .burger:checked+div обозначает выбрать div, который находится на том же уровне вложенности, что и .burger:checked, и следует непосредственно за ним. Но у вас непосредственно за чекбоксом следует элемент label. Соответственно селектор не выбирает элементов.

Вам же нужно указать комбинатор ~, который выберет все элементы на том же уровне вложенности

.burger:checked~div {
  background-color: red;
}
<div>
  <input type="checkbox" name="a" id="inp" class="burger" checked="checked">
  <label for="inp">Label</label>
  <div>Hello</div>
</div>

→ Ссылка