¿Cómo crear controles de formulario personalizados usando HTML?

Hay casos en los que desea realizar un estilo avanzado en algunos controles y siente que los controles de formulario HTML nativos disponibles no son suficientes. En todos estos casos, debe crear sus propios controles.

En este artículo, aprenderemos a crear un control personalizado. Veamos la reconstrucción del elemento <select> . Es bueno comenzar con un control existente porque sus estados y comportamientos son bien conocidos. Si desea crear un control estandarizado completamente nuevo, no es una tarea fácil, porque cuando se trata de elementos estandarizados como <select> , los autores dedicaron una cantidad extraordinaria de tiempo a describir todas las interacciones para cada escenario de uso y cada dispositivo de entrada. Por lo tanto, el diseño de un control completamente nuevo a menudo se reserva para jugadores muy importantes de la industria.

HTML: Define la estructura para el control de formulario <select>. También se incluye al final la parte del script del código que da vida a los controles aduaneros. El script utiliza el método selector de consultas de documentos() y hace clic en el detector de eventos para la entrada seleccionada por el usuario. El método JavaScript toggle() se utiliza para marcar el elemento seleccionado como «activo» o eliminar el estado «activo».

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Building custom control</title>
    <link rel="stylesheet"
          type="text/css"
          href="style.css">
     <script src=
"https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js">
   </script>
      
</head>
<body>
    <h2 style="color:green">GeeksforGeeks</h2>
    <strong>Custom form controls</strong>
    <br/><br/>
     <div class="select-container">
      <div class="option-container">
        <div class="option">Lemon</div>
        <div class="option">Cherry</div>
        <div class="option">Apple</div>
        <div class="option">Strawberry</div>
        <div class="option">Banana</div>
        <div class="option">Pineapple</div>
        <div class="option">Mango</div>
        <div class="option">Papaya</div>
        <div class="option">Orange</div>
        <div class="option">Grapes</div>
      </div>
      <div class="selected">Select</div>
    </div>
    <script>
       $( document ).ready(function() {
           const selected = document.querySelector(".selected");
           const optionContainer = 
               document.querySelector(".option-container");
  
           const optionList = document.querySelectorAll(".option");
  
            selected.addEventListener("click", () => {
              optionContainer.classList.toggle("active");
            });
  
            optionList.forEach((item) => {
              item.addEventListener("click", () => {
                selected.innerHTML = item.innerHTML;
                optionContainer.classList.remove("active");
              });
            });
       });
    </script>
</body>
</html>

style.css: el siguiente código se usa en el código HTML anterior para la apariencia usando CSS.

CSS

body {
  font-family: "Roboto", sans-serif;
}
  
.select-container {
  display: flex;
  flex-direction: column;
  width: 400px;
}
  
.select-container .option-container {
  background: #2f3640;
  color: #f5f6fa;
  max-height: 0;
  width: 100%;
  opacity: 0;
  transition: all 0.4s;
  border-radius: 8px;
  overflow: hidden;
  order: 1;
}
  
.selected {
  background: #2f3640;
  border-radius: 8px;
  margin-bottom: 8px;
  color: #f5f6fa;
  position: relative;
  order: 0;
}
  
.selected::after {
  content: "v";
  position: absolute;
  height: 100%;
  width: 30px;
  right: 10px;
  top: 11px;
  transition: all 0.4s;
}
  
.select-container .option-container.active {
  max-height: 240px;
  opacity: 1;
  overflow-y: scroll;
}
  
.select-container .option-container.active + .selected::after {
  transform: rotateX(180deg);
  top: -14px;
}
  
.select-container .option-container::-webkit-scrollbar {
  width: 8px;
  background: #0d141f;
  border-radius: 0 8px 8px 0;
}
  
.select-container .option-container::-webkit-scrollbar-thumb {
  background: #525861;
  border-radius: 0 8px 8px 0;
}
  
.select-container .option,
.selected {
  padding: 12px 24px;
  cursor: pointer;
}
  
.select-container .option:hover {
  background: #414b57;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por vishalkumar98765432 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *