Problème widget toggle switch css

Bonjour à tous,

j’ai créé un widget toggle switch css pour gérer mes lumières, mais j’ai un petit soucis d’affichage.
Lorsque le switch est sur off, aucun soucis, tous s’affiche correctement:
BtnOff

Lorsque le switch est sur on, il reste deux secondes sur la bonne position puis disparait :
BtnOn

Voici les paramètres de l’équipement lumière:

Et le code du widget:

<div style="width:350px;min-height:50px;" class="cursor cmd cmd-widget container-fluid" data-type="action" data-cmd_id="#id#" data-cmd_uid="#uid#">

  	
   <div id="cadreLum#id#">
     <center>
     <i><img class="Icone2#id#" src="/mytheme/Dashboard/img/light100.png" height=30 width=32></i>
        <div style="font-weight: bold;font-size : 12px;#hideCmdName#" class="label2#id#">#label#</div>
        <span style="font-size: 3em;font-weight: bold;margin-top: 5px;" class="action iconCmd#uid#"></span>
   
     <div class="btlumiere2-#id#">
      <input type="checkbox" id="check2#id#" onchange="jeedom.cmd.execute({id: '#id#'});">
        <label><i></i></label>
        
     </div>
     </center>
      
<style>
*,
*:after,
*:before {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  padding: 0;
  margin: 0;  
  }
  
  .Icone2#id# {
    
    display: block;
    position: absolute;
    margin: 10px;
    left: 0px;
    
  }
  
 /**** Label de l'objet *****/ 
  .label2#id#{
    position: relative;
    text-align:center;
    color: #AADD33; /* Couleur du label */
    vertical-align: middle;
    line-height:10px;
    width:95%;
    right: 80px;
    top: 20px;
    
    }
  
 
 #cadreLum#id# {
width: 350px;
height: 50px;
display: block;
background-color: #202125; /* Couleur de fond du cadre*/ 
border-radius: 5px;
box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.8);
    
text-align: center;
overflow: hidden;
}


 
 .btlumiere2-#id# {
  margin: 15px auto;
  left: 90px;
  position: relative;
  width: 130px;
  height: 20px;
  top: -10px;  
  
}

.btlumiere2-#id# label {
   width: 100% !important;
  height: 100% !important;
  position: relative;
  display: block;
  background: #333; /* Couleur du fond éteint  */
  border-radius: 40px;
    
  box-shadow: inset 1px 1px 5px 3px rgba(0, 0, 0, 0.8) /* Ombres */, 0 -2px 5px 2px rgba(50,50,50,0.8) , 0 -2px 3px 4px transparent , 0 2px 5px 3px #767477;

}

.btlumiere2-#id# input {
  top: 0; 
  right: 0; 
  bottom: 0; 
  left: 0;
  opacity: 0;
  z-index: 100;
  position: absolute;  
  width: 100% !important;
  height: 100% !important;
  cursor: pointer;
  }

/*****  Curseur ******/
.btlumiere2-#id# label i {
  display: block;
  height: 140%;
  width: 50%;
  border-radius: inherit;
  position: absolute;
  z-index: 2;
  right: 53%; /* Position du curseur éteint*/
  top: -2px;
  
  background: -moz-linear-gradient(#5f6168, #202125);
  background: -ms-linear-gradient(#5f6168, #202125);
  background: -o-linear-gradient(#5f6168, #202125);
  background: -webkit-gradient(linear, 0 0, 0 100%, from(#5f6168), to(#202125));
  background: -webkit-linear-gradient(#5f6168, #202125);
  background: linear-gradient(#5f6168, #202125);
  
  
  box-shadow:
      inset 0 1px 0 #202125,
      0 0 8px rgba(0,0,0,0.3),
      0 5px 5px rgba(0,0,0,0.2);
}
  

  /*****  Curseur secondaire ******/
.btlumiere2-#id# label i:after {
  content: "";
  position: absolute;
  left: 15%;
  top: 25%;
  width: 70%;
  height: 50%;
  
   background: #5f6168; /* Couleur du curseur Eteint */
  box-shadow:
      inset 1px 1px 2px 2px rgba(0, 0, 0, 0.8) /* Ombres */,
      0 0 1px rgba(0,0,0,0.8);
  
  border-radius: inherit;
}

.btlumiere2-#id# label i:before {
  content: "éteint";
  text-transform: uppercase;
  font-style: normal;
  font-weight: bold;
  color: #555; /* Couleur du texte éteint */
  text-shadow: 0 1px 0 rgba(155, 155, 155, 0.8); /* ombre du texte éteint */
  font-family: Helvetica, Arial, sans-serif;
  font-size: 12px;
  position: absolute;
  top: 80%;
  margin-top: -15px;
  right: -80%; /* Position du texte Eteint*/
}

.btlumiere2-#id# input:checked ~ label {
  
  background: #AADD33; /* couleur du fond allumé */
  box-shadow: inset 1px 1px 5px 3px rgba(0, 0, 0, 0.8) /* Ombres */, 0 -2px 5px 2px rgba(50,50,50,0.8) , 0 -2px 3px 4px transparent , 0 2px 5px 3px #767477;
}

.btlumiere2-#id# input:checked ~ label i {
  right: -1%;
}
  
  .btlumiere2-#id# input:checked ~ label i:after{
  
  background: #AADD33; /* Couleur du curseur Allumé */
  box-shadow: inset 1px 1px 2px 2px rgba(0, 0, 0, 0.8) /* Ombres */
  
}

.btlumiere2-#id# input:checked ~ label i:before {
  content: "Allumé";
  
  
  text-transform: uppercase;
  font-style: normal;
  font-weight: 600;
  color: rgba(0,0,0,0.4);
  text-shadow: 0 1px 0 #bcb8ae, 0 -1px 0 #97958e;
  font-family: Helvetica, Arial, sans-serif;
 
    
  left: -275%; /* Position du texte Allumé*/
  top: 80%; /* Position du texte Allumé*/
  
  color: #122A0A; /* Couleur du texte Allumé */ 
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
  
}
  
</style>

<script type="text/javascript">

  jeedom.cmd.update['#id#'] = function(_options){
    var cmd = $('.cmd[data-cmd_id=#id#]');
    
    if (_options.display_value == '1' || _options.display_value == 1 || _options.display_value == '99' || _options.display_value == 99 || _options.display_value == 'on') {     
    document.getElementById('check2#id#').checked = true;
      if (jeedom.cmd.normalizeName('#name#') == 'on') {
        cmd.hide();
      }else{
        cmd.show();
      }} else {
      document.getElementById('check2#id#').checked = false;
      if (jeedom.cmd.normalizeName('#name#') == 'off') {
        cmd.hide();
      }else{
        cmd.show();
      }		}	}
	jeedom.cmd.update['#id#']({display_value:'#state#'});
  
</script>
     

Si quelqu’un a une idée de ce que j’ai loupé ou mal fait?
Merci de votre aide.

Personne n’a une petite idée?
Merci.

Salviaff a publié un widget identique, base toi sur son travail.

Ou Winhex

<div class="Doc-#id# cursor cmd tooltips cmd-widget container-fluid" data-type="action" data-cmd_id="#id#" data-cmd_uid="#uid#">
<center>
  	<div class="title #hide_name#">
		<div class="cmdName">#name_display#</div>
	</div>
  <label class="switch">
      <input type="checkbox" id="check#id#" onchange="jeedom.cmd.execute({id: '#id#'});">
      <div class="slider round"></div>
   </label>
</center>
<style>
  :root{ 
 --background-color-on: #94CA02;    
  --background-color-off: #a6a6a6;     
}    
  .cmd[data-cmd_id="#id#"] .switch {
  position: relative;
  display: block;
  top: 5px;
  width: 66px;
  height: 24px;
}
  .cmd[data-cmd_id="#id#"] .switch input {display:none;}
  .cmd[data-cmd_id="#id#"] .slider {

  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
    background-color: var(--background-color-off);  
  -webkit-transition: .4s;
  transition: .4s;
border: 1px solid #FFFFFF;
}

  .cmd[data-cmd_id="#id#"] .slider:before {
  position: absolute;
  content: "";
  height: 20px;
  width: 20px;
  left: 2px;
  bottom: 1px;
  background-color: white;
  -webkit-transition: .4s;
  transition: .4s;

}


  .cmd[data-cmd_id="#id#"] input:checked + .slider {
  background-color: var(--background-color-on);
}

  .cmd[data-cmd_id="#id#"] input:checked + .slider:before {

  -webkit-transform: translateX(40px);
  -ms-transform: translateX(40px);
  transform: translateX(40px);
}


  .cmd[data-cmd_id="#id#"] .slider.round {
  border-radius: 20px;
}

  .cmd[data-cmd_id="#id#"] .slider.round:before {
  border-radius: 50%;
}

</style>

<script>

  jeedom.cmd.update['#id#'] = function(_options){
        var cmd = $('.cmd[data-cmd_id=#id#]');
    
    testcolor = ("#couleur#" == '#'+'couleur#');
	if (testcolor != true) {
$('.cmd[data-cmd_id=#id#] .slider').css({'--background-color-on': '#couleur#' });
    }
    testcolor_off = ("#couleur2#" == '#'+'couleur2#');
	if (testcolor_off != true) {
$('.cmd[data-cmd_id=#id#] .slider').css({'--background-color-off': '#couleur2#' });
    }
    
  if (_options.display_value == '1' || _options.display_value == 1 || _options.display_value == '99' || _options.display_value == 99 || _options.display_value == 'on') {document.getElementById('check#id#').checked = true;
      if (jeedom.cmd.normalizeName('#name#') == 'on') {
        cmd.hide();
      }else{
          cmd.show();
      }
    } else {
      document.getElementById('check#id#').checked = false;
        if (jeedom.cmd.normalizeName('#name#') == 'off') {
        cmd.hide();
      }else{
          cmd.show();
      }
    }
  }
                jeedom.cmd.update['#id#']({display_value:'#state#'});

</script>
</div>

Merci pour ta réponse prfalken.
je me suis inspiré du widget de Salviaff pour réaliser le mien et ce qui bloque, c’est le cadre de fond sous le bouton switch. Sans ce cadre, le widget fonctionne très bien.
Merci encore de prendre du temps pour regarder ce week-end.

Bonjour,
Je suis d’accord avec toi en ce qui concerne l’esthétique de ton widget, aurais tu l’amabilité s’il te plait de me communiquer le code de ton widget sans le cadre de fond sous le bouton switch.
En te remerciant par avance et contant sur ton prompte réponse je te souhaite une excelente soirée.
Cordialement

Voici le code avec seulement le switch, inspiré de l’auteur, geqr du superbe site www.ma-maison-intelligente.fr

<link href='https://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet'> 

<div id='switch-#id#' 
     class="toggle cursor cmd tooltips cmd-widget container-fluid" 
     onClick="$('#switch-#id#').toggleClass('toggle-on'); jeedom.cmd.execute({id: '#id#'});"
     data-type="action" data-cmd_id="#id#" data-cmd_uid="#uid#">
  
 
  <div class='toggle-text-off'>éteint</div>
  <div class='glow-comp'></div>
  <div class='toggle-button'></div>
  <div class='toggle-text-on'>allumé</div>
   
   </div>
 
<style type="text/css">
  
  
  
#switch-#id#{
    width: 130px;
    height: 20px;
   
  }
  
 
 
  
.toggle{
   
  
    border-radius: 20px;
    background: #333; /* Couleur du fond éteint  */
    box-shadow: inset 1px 1px 5px 3px rgba(0, 0, 0, 0.8) /* Ombres */, 0 -2px 5px 2px rgba(50,50,50,0.8) , 0 -2px 3px 4px transparent , 0 2px 5px 3px #767477;
    box-sizing: border-box;
    z-index: 9;
}

.toggle.toggle-on{
    background: #AADD33; /* couleur du fond allumé */
  box-shadow: inset 1px 1px 5px 3px rgba(0, 0, 0, 0.8) /* Ombres */, 0 -2px 5px 2px rgba(50,50,50,0.8) , 0 -2px 3px 4px transparent , 0 2px 5px 3px #767477;
    -webkit-transition: all .5s .15s ease-out;
    transition: all .5s .15s ease-out;
}

  /*****  Curseur ******/ 
.toggle-button{
    position: absolute;
    top: -4px; /* Position du curseur éteint en hauteur*/
    width: 65px; /* Largeur du curseur éteint */
    height: 30px; /* Hauteur du Curseur éteint*/
    bottom: 4px;
    right: 66px; /* Position du curseur éteint à droite */
    
  background: -moz-linear-gradient(#5f6168, #202125);
  background: -ms-linear-gradient(#5f6168, #202125);
  background: -o-linear-gradient(#5f6168, #202125);
  background: -webkit-gradient(linear, 0 0, 0 100%, from(#5f6168), to(#202125));
  background: -webkit-linear-gradient(#5f6168, #202125);
  background: linear-gradient(#5f6168, #202125);
  
  z-index: 10;
  box-shadow:
      inset 0 1px 0 #202125,
      0 0 8px rgba(0,0,0,0.3),
      0 5px 5px rgba(0,0,0,0.2);
  
    border-radius: 19px; 
    cursor: pointer;
    -webkit-transition: all .3s .1s, width .1s, top .1s, bottom .1s;
    transition: all .3s .1s, width .1s, top .1s, bottom .1s;
}

  
 /*****  Curseur secondaire ******/
.toggle-button:after {
  content: "";
  position: absolute;
  left: 15%;
  top: 25%;
  width: 70%;
  height: 50%;
  
   background: #5f6168; /* Couleur du curseur Eteint */
  box-shadow:
      inset 1px 1px 2px 2px rgba(0, 0, 0, 0.8) /* Ombres */,
      0 0 1px rgba(0,0,0,0.8);
  
  border-radius: inherit;
} 
  
   
  
  
.toggle-on .toggle-button{
    top: -4px; /* Position du curseur Allumé en Hauteur */
    width: 65px;
    bottom: 3px;
    right: 1px; /* Position du curseur Allumé à droite*/
    border-radius: 23px;
   
    -webkit-transition: all .2s .1s, right .1s;
    transition: all .2s .1s, right .1s;
}

.toggle-on .toggle-button:after{
  background: #AADD33; /* Couleur du curseur Eteint */
  box-shadow:
      inset 1px 1px 2px 2px rgba(0, 0, 0, 0.8) /* Ombres */,
      0 0 1px rgba(0,0,0,0.8);
  
  }
  
/*****  Texte Allumé ******/
.toggle-text-on{
    position: absolute;
    top: -7px; /* Position du texte Allumé */
    bottom: 0;
    left: 0;
    right: 60px; /* Position du texte Allumé */
    line-height: 36px;
    text-align: center;
    
    /*font-family: 'Montserrat', 'Arial', sans-serif;
    font-size: 14px;
    font-weight: 600;*/
    cursor: pointer;
  
  text-transform: uppercase;
  font-style: normal;
  font-weight: 600;
  font-family: Helvetica, Arial, sans-serif;
  color: #122A0A; /* Couleur du texte Allumé */ 
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
    -webkit-user-select: none; /* Chrome/Safari */    
    -moz-user-select: none; /* Firefox */
    -ms-user-select: none; /* IE10+ */


}

  
.toggle-on .toggle-text-on{
    color: #122A0A; /* Couleur du texte Allumé */ 
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
    -webkit-transition: color .3s .15s ;
    transition: color .3s .15s ;
}

 /*****  Texte éteint ******/
.toggle-text-off{
    position: absolute;
    top: -7px; /* Position du texte éteint */
    bottom: 0;
    right: 15px; /* Position du texte éteint */
    line-height: 36px;
    text-align: center;
    font-family: 'Montserrat', 'Arial', sans-serif;
    font-size: 14px;
    font-weight: bold;
    -webkit-user-select: none; /* Chrome/Safari */        
    -moz-user-select: none; /* Firefox */
    -ms-user-select: none; /* IE10+ */

    cursor: pointer;

    color: #555; /* Couleur du texte éteint */
    text-shadow: 0 1px 0 rgba(155, 155, 155, 0.8); /* ombre du texte éteint */
}

.toggle-on .toggle-text-off{
    color: #555; /* Couleur du texte éteint */
    text-shadow: 0 1px 0 rgba(155, 155, 155, 0.8); /* ombre du texte éteint */
}


</style>



<script type="text/javascript">
  jeedom.cmd.update['#id#'] = function(_options){
    if (_options.display_value == '1' || _options.display_value == 1 || _options.display_value == '99' || _options.display_value == 99 || _options.display_value == 'on') {      
      $('#switch-#id#').addClass('toggle-on');
      if (jeedom.cmd.normalizeName('#name#') == 'on') {
        $('.cmd[data-cmd_uid=#uid#]').hide();
      }else{
        $('.cmd[data-cmd_uid=#uid#]').show();
      }
    } else {
      if ($('#switch-#id#').hasClass('toggle-on')) {
        $('#switch-#id#').removeClass('toggle-on');
      }
      if (jeedom.cmd.normalizeName('#name#') == 'off') {
        $('.cmd[data-cmd_uid=#uid#]').hide();
      }else{
        $('.cmd[data-cmd_uid=#uid#]').show();
      } 
    }
  }
  jeedom.cmd.update['#id#']({display_value:'#state#'});
</script>

Si quelqu’un arrive à rajouter un cadre et le nom de l’équipement…

Merci, je ne te promet riens mais je vais assayer
Cordialement