Du menu hamburger à la croix en CSS

Fermé
Celio - Modifié le 5 mai 2022 à 12:57
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 5 mai 2022 à 17:44
Bonjour,

J'ai trouvé un bout de code sur le site W3Schools tout à fait intéressant, et je l'ai déjà un peu modifié pour m'approcher du résultat escompté. Il y a une seule chose que je ne parviens pas à faire ; que .bar1 et .bar2 changent leur longueur pour rejoindre le coin opposé du container. La longueur serait donc égale à l’hypoténuse d'un triangle rectangle dont les cathètes mesurent 50px.

<style>
.container {
  display: inline-block;
  cursor: pointer;
  height: 50px;
  width: 50px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.bar1, .bar2, .bar3 {
  height: 5px;
  width: 100%;
  background-color: #454545;
  transition: 0.4s;
  border-radius: 5px;
}

.bar1 {
transform-origin: right;
width: 50px;
}

.bar3 {
transform-origin: right;
}

.change .bar1 {
  -webkit-transform: rotate(-45deg);
  transform: rotate(-45deg);
}

.change .bar2 {opacity: 0;}

.change .bar3 {
  -webkit-transform: rotate(45deg);
  transform: rotate(45deg);
  
}
</style>

<div class="container change" onclick="myFunction(this)">
  <div class="bar1"></div>
  <div class="bar2"></div>
  <div class="bar3"></div>
</div>

<script>
function myFunction(x) {
  x.classList.toggle("change");
}
</script>


Une idée ?

Avec mes remerciements,

Celio
A voir également:

1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
5 mai 2022 à 17:44
Bonjour,

Supprime la propriété display: flex; sur la classe .conteneur, il y a déjà un display défini (inline-block).

Dans l'exemple du w3c, l'espace entre les barres est gérée via les marges. Ajoute une marge au-dessus et en dessous de .bar2 pour les espacer.

Il faut ensuite modifier la taille des barres lorsque la classe change est appliquée, et jouer avec les translations pour les positionner correctement : https://jsfiddle.net/60oc7u41/
0