DEV Community

Cover image for edición del <input type color> con CSS
Flkt Crnpio
Flkt Crnpio

Posted on

edición del <input type color> con CSS

.

de las cosas mas difíciles e interesantes para mi siempre han sido los elementos de HTML de formulario, desde hacer que se vean del mismo modo en todos los navegadores, luchar contra instalar un plugin que hace magia en sus node_modules para ponerle mil elementos encima que se ven hermosos, o jugar para ver hasta donde puede llegar un elemento que cada que sacan nuevo es 'ineditable'

el <input type="color" /> es un elemento que se ve re diferente en todos los navegadores ( ni hablar de su menú contextual ! )

color en Chrome, Safari y Firefox, en ese orden
input color en Chrome, Safari y Firefox

como se medio aprecia en la imagen (salió re chiquita) es un bloque de color dentro de algún contenedor con color de fondo y borde, que ni en su casa han de saber como quisieron alinear

.

homogeneizando el

en CSS es empezar de general a particular, así que comenzando por normalizar el elemento, hay que alinearlo, quitarle el padding, el borde y el color de fondo al contenedor

$height: 40px; 
$radius: 2px;

[type="color"] {
  display: inline-flex;
  vertical-align: bottom;
  border: none;
  border-radius: $radius;
  padding: 0; // para quitar el pading en FF
  height: $height;
  width: 100%;
  cursor: pointer;
}
Enter fullscreen mode Exit fullscreen mode

para quitar el padding en chrome y safari se necesita editar el sub-elemento ::-webkit-color-swatch-wrapper

::-webkit-color-swatch-wrapper {
  padding: 0;
}
Enter fullscreen mode Exit fullscreen mode

por ultimo, para editar el bloque de color, necesitamos editar los sub-elementos ::-webkit-color-swatch y ::-moz-color-swatch para quitarles los bordes y redondearlo como necesitemos

::-webkit-color-swatch {
  border: 0;
  border-radius: $radius;
}

::-moz-color-swatch {
  border: 0;
  border-radius: $radius;
}
Enter fullscreen mode Exit fullscreen mode

listo! ya se ve igual en todos los navegadores (que estaba probando al menos)

input color homogeneizado

.

ahora vamo a ponerlo buapo

para hacerlo en tarjetas tipo pantone primero hay que agregarle un elemento mas que pueda contener al y al

para quienes no lo hayan utilizado, el es un elemento de html muy bonito de los formularios, al que se le puede conectar su contenido con alguna formula definida en el formulario o en un

con el atributo oninput="colorhex.value=value" se liga el valor del color con el valor del que tenga el id colorhex

<input type="color" value="#6600ff" oninput="colorhex.value=value">
<output id="colorhex">#6600ff</output>
Enter fullscreen mode Exit fullscreen mode

de esta manera cada que se seleccione un color diferente en el , veremos el valor hexadecimal en el (pa’ poder hacer más rápido el copy&paste)

para crear las tarjetas, agregamos un contenedor para tener en columnas los elementos y y editamos un poco los atributos de ambos para darle el estilo final

$radius: 10px;
$height: 220px;

.pantone-card {
  background: #fff;
  display: grid;
  width: $height * 1.25;
  border-radius: $radius;
  box-shadow: 0 2px 4px #0001;
  border: 4px solid #fff;
}
Enter fullscreen mode Exit fullscreen mode

como cambiamos la variable height, el color del quedará del nuevo valor de alto y se ajustará al ancho que tome la tarjeta… únicamente nos resta acomodarle el border-radius de los sub-elementos ::-webkit-color-swatch y ::-moz-color-swatch para que el bloque de color quede redondeado de arriba y abajo quede recto

[type="color"] {
  display: inline-flex; // esto ya no se necesita 
  vertical-align: bottom; // esto tampoco
  border: none;
  border-radius: $radius;
  padding: 0;
  height: $height;
  width: 100%;
  cursor: pointer;

  &::-webkit-color-swatch-wrapper {
    padding: 0;
  }

  &::-webkit-color-swatch {
    border: 0;
    border-radius: $radius $radius 0 0; // arriba redondeado y abajo recto
  }

  &::-moz-color-swatch {
    border: 0;
    border-radius: $radius $radius 0 0; // arriba redondeado y abajo recto
  }
}
Enter fullscreen mode Exit fullscreen mode

al final nada mas nos resta agregarle los estilos al para que parezca el texto típico de las tarjetas de pantone

output {
  display: block;
  background: #fff;
  font-size: 28px;
  padding: 16px;
  line-height: 1em;
  font-family: 'helvetica', sans-serif;

  &:before {
    content: 'HEXADECIMAL';
    font-size: 14px;
    font-weight: bold;
    display: block;
  }
}
Enter fullscreen mode Exit fullscreen mode

al final tendremos tarjetas de color seleccionable, con los elementos nativos de HTML y
Tarjetas de color seleccionable, con los elementos nativos de HTML

. . .

de referencia, acá dejo el ejemplo corriendo

codepen.io/flkt-crnpio/pen/dygbBxy

Top comments (0)