Olá, Mauricio! Tudo bem?
Realmente, o combinador ~
(til) só funciona para selecionar elementos que vêm depois no DOM. Uma das abordagens possíveis para não depender da ordem seria usar JavaScript para adicionar uma classe ao elemento desejado quando o checkbox for marcado. Deixo abaixo um exemplo de como você pode fazer isso:
Criei um arquivo script.js e, no HTML, adicionei o link de script após o fechamento do body
:
<!DOCTYPE html>
<html>
<head>
<!-- código omitido -->
</head>
<body>
<!-- código omitido -->
</body>
<script src="script.js"></script>
</html>
No CSS (header.css), apaguei o estilo de .lista-menu e substituí pelo código abaixo:
CSS
.lista-menu {
display: none;
}
.lista-menu.active {
display: block;
}
No arquivo script.js recém criado, escrevi o código abaixo, que monitora se a checkbox foi clicada ou não e, se sim, ela recebe a classe active
:
document.addEventListener('DOMContentLoaded', function() {
const checkbox = document.getElementById('menu');
const menu = document.querySelector('.lista-menu');
checkbox.addEventListener('change', function() {
if (checkbox.checked) {
menu.classList.add('active');
} else {
menu.classList.remove('active');
}
});
});
Neste exemplo, estamos usando JavaScript para adicionar ou remover a classe active
ao elemento .lista-menu
com base no estado do checkbox. Isso permite que você estilize o elemento .lista-menu
independentemente de sua posição no HTML.
Espero ter ajudado. Em caso de dúvidas, conte com o fórum!
Um abraço e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!