¿Cómo se genera una paleta similar a las del diseño de materiales de Google?


62

Las especificaciones de diseño de materiales de Google tienen conjuntos de paletas de colores :

ingrese la descripción de la imagen aquí

Comenzando con un color primario base, que designan como "500", luego tienen una gama de pasos incrementales de sombra, más brillante y más oscuro, para crear un rango de aproximadamente 10 colores. El más claro se designa como "50", y es casi blanco, y el más oscuro, "900", es casi negro, pero ambos conservan parte del color base.

No puedo determinar cómo se calculan los incrementos. Probé este generador de muestras en línea , pero parece que no puedo marcar en el rango.

Creo que es solo una cuestión de ajustar la luminosidad hacia arriba y hacia abajo desde el color base "500", y supongo que un valor de "0" sería blanco puro y "1000" sería negro puro, pero los rangos en Google Las paletas parecen tener más saturación que un simple rango de luminosidad.

¿Alguien sabe qué algoritmo o proceso puedo usar para tomar un color base y generar una paleta en línea con las paletas de Google?


Parecen ser el color base con la saturación y el valor respectivamente aumentados o disminuidos inversamente a medida que el número sube o baja
Supuhstar

1
En realidad, retrocediendo un paso de la pantalla, parece usar un algoritmo similar al sombreado de phong ... Tendré que considerar esto
Supuhstar,

¿Encontró alguna solución para generar la paleta?
MrBrightside

@MrBrightside Howdy! Puede generar una paleta con la respuesta elegida, aquí: mcg.mbitson.com : tenga en cuenta que los colores no son exactamente iguales a las paletas de diseño de materiales, aunque puede importar las paletas exactas o generar representaciones cercanas con colores personalizados. Más sobre por qué no son los colores exactos aquí: stackoverflow.com/questions/32942503/…
Mikel Bitson

1
El material es SOLO monocromático para la gama 50-500, consulte codepen.io/sebilasse/pen/GQYKJd?editors=1010 para colores más oscuros y
acentuados

Respuestas:


41

Hice esta pequeña herramienta CSS3 / AngularJS para un proyecto para generar paletas de colores de materiales. Puede ingresar su color hexadecimal 500 y usar una herramienta externa como ColorZilla para obtener los valores de color desde allí. También los más claros son exactamente los que usó Google, pero los más oscuros están un poco apagados.

mcg.mbitson.com


Su generador de paletas funciona muy bien y, por lo que puedo ver, se aproxima a los estándares de Google Material Design. Una cosa: es posible que desee crear más contraste para el texto en la página. El texto negro sobre el fondo gris oscuro es muy difícil de leer.
Interlocutor

2
¡Hola chicos! Soy el desarrollador detrás de la versión actualizada de la herramienta. Recientemente he cambiado la forma en que manejo la generación de color. Si alguien tiene algún comentario directo sobre esta herramienta, es la técnica de generación de color o cualquier característica adicional que desee, ¡hágamelo saber! Todavía estoy desarrollando mejoras en mi tiempo libre y me temo que la generación de color puede estar apagada, aunque sigue siendo muy útil. Continuaré investigándolo.
Mikel Bitson

1
@MikelBitson El generador de paletas está apagado (simplemente ingrese cualquier color 500 del estándar de diseño del material y compárelo para ver), sin embargo, funciona de maravilla con muchos otros colores base. ¡Mantener el buen trabajo!
Chris Bornhoft

1
@MikelBitson Fantástica explicación gracias. Pensé que era algo así incluso antes de publicar mi comentario original. Me pregunto cuánto gana el "Selector de color oficial" de Google. Qué título :)
Chris Bornhoft

1
Enlace actualizado para aquellos de ustedes que buscan la nueva versión: mcg.mbitson.com/#
Mikel Bitson

18

Las paletas de google son monocromáticas . Lo que mantiene la misma relación RGB cambiando la luminosidad y la saturación hacia arriba o hacia abajo. Para hacer esto, debe convertir el valor RGB a representación HSL (Tono, Saturación, Luminosidad), alterar la luminosidad y la saturación y luego volver a convertir si es necesario. Es posible mantenerlo en el espacio RGB mientras se calcula, pero las matemáticas son demasiado confusas (para que yo las entienda o explique). HSL fue creado para la mezcla de colores tradicional (es más fácil para nosotros pensar).

Si su objetivo es hacer paletas CSS, puede mantener el color en HSL usando background-color: hsl(0,100%, 50%);.

Puede hacer esto manualmente en Photoshop utilizando el selector de color. El HSB es para el brillo de saturación de tono (sinónimo de HSL, lo mismo). Elija un tono que le guste y modifique la Saturación y el Brillo por un valor consistente. En la imagen a continuación S = 54 y B = 77, suba un 5% usando 54 + 54 * 0.05y 77 + 77 * 0.05. O para bajarS - S * 0.05

selector de color de photoshop

Nota al margen para aclarar entre Hex y RGB. Los 6 dígitos HEX # FFEB3B son en realidad 3 números separados, que representan RGB.

#FFEB3B -> FF,EB,3B -> red:FF green:EB blue:3Bconvertir los valores HEX a decimal te da red:255 green:235 blue:59 OR rgb(255,235,59).

Hay algoritmos para convertir RGB a HSL si realmente los quiere en Wikipedia, pero la forma más sencilla es usar una biblioteca de colores. Este ejemplo hace una paleta monocromática con please.js también tiene otros algoritmos para crear paletas complementarias o agradables. Al igual que kuler.adobe, que también es genial.

Please.make_scheme(
    Please.HEX_to_HSV('#ffeb3b'),
    {scheme_type: 'mono', format:'hex'}
);
// returns ->["#ffeb3b", "#ffe821", "#ffe508", "#e5d54c"]

44
Las paletas propias de Google no muestran un gradiente de brillo constante en HSV / HSB. He creado una ilustración para que pueda ver de qué estoy hablando. Basado en eso, probablemente sería mejor jugar con uno de los otros modelos de color. Además, parecen haber modificado un poco su tono para obtener los tonos más oscuros de algunos colores, para evitar que se enturbien.
Tess

Me gustaría agregar un poco aquí que segundos la respuesta de @ Tess ... He desarrollado la versión mejorada del generador MCG y en el proceso he notado algunas cosas. Cada paleta de google sigue una progresión diferente de colores, no es monocromática. No existe una fórmula o método para imitar los colores exactamente, ya que la fórmula para cada paleta termina siendo completamente diferente. Más detalles y un ejemplo de esto se pueden encontrar aquí: github.com/mbitson/mcg/issues/19
Mikel Bitson

@MikelBitson Pero en respuesta a la pregunta 'qué algoritmo o proceso puedo usar', votaría por monocromática o una versión de la misma en.wikipedia.org/wiki/Monochromatic_color Pero tú y Tess tienen razón, no es estrictamente mono, se desvían de el matiz
Lex

1
@Lex - Estoy de acuerdo contigo, usaría monocromática para estimar una paleta. Solo secundé la respuesta de Tess porque tu respuesta dice que "Las paletas de Google son monocromáticas". y recientemente he pasado mucho tiempo luchando con estos colores. :)
Mikel Bitson

1
HSB / HSV no es lo mismo que HSL en.wikipedia.org/wiki/HSL_and_HSV
Kevin Thibedeau

1

¿Has intentado trabajar con Adobe's Color Wheel? Creo que es un poco más flexible que la herramienta SlayerOffice que estás usando.

https://color.adobe.com/

Para su caso exacto, elija "Sombras" e intente perder el tiempo desde allí. No generará diseño de material como muestras, pero es un comienzo.



0

Para generar gradiente de color / paleta a partir de un color dado, esencialmente puede usar el siguiente algoritmo.

  1. Decide el tono mínimo y máximo que deseas en tu paleta
  2. Divida el 'espacio de color' entre estos colores en una partición igual (ver más abajo)
  3. Salida de colores en estos pasos

Para dividir el espacio de color entre, primero puede convertir el color de su HEX a RGB. Seleccione valores en cada canal. Digamos que tiene color1 (r1, g1, b1) y color2 (r2, g2, b2). Y desea 3 colores entre color1 y color2 , entonces puede hacer algo como seguir

all_colors = []
steps = no_of_colors + 1
rdelta, gdelta, bdelta = (r2 - r1) / steps, (g2 - g1) / steps, (b2 - b1) / steps
for step in range(steps - 1):
    r1 += rdelta
        g1 += gdelta
        b1 += bdelta
all_colors.append((r1, g1, b1)) 

Recuerde convertir los valores RGB entre (0 a 1).

En su caso, puede tomar el color base y dividir el espacio de color entre white to basecolory basecolor to black. Puede ajustar sus pasos según sus necesidades.

Finalmente, voy a hacer una promoción descarada de la biblioteca de Python que creé, solo porque es relevante para esta pregunta con respecto a la generación de paletas de colores. Se llama SecretColors . Puede generar paletas de colores, degradados propios o utilizar paletas de colores estándar como IBM, Material Design, ColorBrewer o Clarity.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.