Titre réinventé : Comment appliquer un effet de débordement uniquement à l'ombre de la boîte
P粉391677921
P粉391677921 2023-09-03 17:14:49
0
1
599
<p>J'essaie de créer une barre de défilement de plage d'entrée, mais je rencontre un problème. </p> <p> <pre class="brush:css;toolbar:false;">body { justifier-contenu : centre ; aligner les éléments : centre ; hauteur min : 100vh ; arrière-plan : #151515 ; } #rangeValue { position : relative ; bloc de visualisation; taille de police : 6em ; couleur : #999 ; poids de la police : 400 ; } .gamme { arrière-plan : dégradé linéaire (-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab) !important ; largeur : 400 px ; hauteur : 5px ; -apparence du webkit : aucun ; arrière-plan : #111 ; contour : aucun ; rayon de bordure : 15 px ; box-shadow : encart 0 0 5px rgba(0, 0, 0, 1); } .range::-webkit-slider-thumb { -apparence du webkit : aucun ; largeur : 15px ; hauteur : 15px ; rayon de bordure : 50 % ; fond : bleu ; curseur : pointeur ; box-shadow : -507px 0 0 500px rouge ; }</pré> <pre class="brush:html;toolbar:false;"><div> <span id="rangeValue">0</span> <Input class="range" type="range" nom "" value="0" min="0" max="1000"></Input> </div></pre> </p> <p>Le problème est le suivant : je souhaite que cette grande zone rouge reste dans le curseur de saisie lorsqu'elle est dessinée. La seule solution est d'appliquer <code>overflow: Hidden</code> à <code>.range</code> mais je perdrai le bouton point bleu. Existe-t-il un moyen d'appliquer simplement <code>overflow: Hidden</code> à <code>box-shadow</code> ? Ou des indices sur d'autres moyens de le faire fonctionner ? </p> <p>Le résultat final devrait être comme ceci =></p> <p><img src="/uploads/20230822/169264211664e3ab441b49a.png" alt=" résultat final " /></p> <p>Merci. </p>
P粉391677921
P粉391677921

répondre à tous(1)
P粉387108772

Je ne sais pas si cela aide, mais voici la refactorisation que j'ai effectuée. Peut-être pouvez-vous apporter quelques modifications en fonction de votre tâche.

HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="style.css">
  <title>Slider</title>
</head>
<body>
    <div>
    <span id="rangeValue">0</span>
    <Input type="range" name="" id="range" value="0" min="0" max="100"></Input>
</div>
</body>
  
  <script src=""></script>
</html>

CSS

body {
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background: #151515;
}
#rangeValue {
    position: relative;
    display: block;
    font-size: 6em;
    color: #999;
    font-weight: 400;
}

/* Input Thumb */
input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  height: 20px;
  width: 20px;
  border-radius: 50%;
  background: #ff4500;
  cursor: ew-resize;
  box-shadow: 0 0 2px 0 #555;
  transition: background .3s ease-in-out;
}

input[type="range"]::-moz-range-thumb {
  -webkit-appearance: none;
  height: 20px;
  width: 20px;
  border-radius: 50%;
  background: #ff4500;
  cursor: ew-resize;
  box-shadow: 0 0 2px 0 #555;
  transition: background .3s ease-in-out;
}

input[type="range"]::-ms-thumb {
  -webkit-appearance: none;
  height: 20px;
  width: 20px;
  border-radius: 50%;
  background: #ff4500;
  cursor: ew-resize;
  box-shadow: 0 0 2px 0 #555;
  transition: background .3s ease-in-out;
}


/* Input Track */
input[type=range]::-webkit-slider-runnable-track  {
  -webkit-appearance: none;
  box-shadow: none;
  border: none;
  background: transparent;
}

input[type=range]::-moz-range-track {
  -webkit-appearance: none;
  box-shadow: none;
  border: none;
  background: transparent;
}

JS

const rangeInputs = document.querySelectorAll('input[type="range"]')

function handleInputChange(e) {
  let target = e.target
  if (e.target.type !== 'range') {
    target = document.getElementById('range')
  }
  
  const min = target.min
  const max = target.max
  const val = target.value
  
  target.style.backgroundSize = (val - min) * 100 / (max - min) + '% 100%'
}

rangeInputs.forEach(input => {
  input.addEventListener('input', handleInputChange)
})

Vous pouvez l'ajuster selon vos préférences. J'espère que cela t'aides.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal