Automatically beautiful
An extensive color manipulation library for the browser and node.js. While extensive, this library is less than 6KB in size (minified and gzipped).
var c = xolor('#c00')
// Calculate a gradient color between #fc0 and #f00 23% of the way through the gradient
c.gradient('#f00', .23)
// Calculate the visible color when lightgrey is overlayed on top of #c00 with an opacity of 69%.
c.opacity('lightgrey', .69)
// Return a color that's 10% lighter
c.lightness(1.1 * c.lightness())
// Chain them together
c.subtractive('#2a3e37').lighter(.1).triad()
// Converts the color to a related grey color
c.greyfilter()var element = document.getElementById('foo')
xolor.colorize(element, "burntsienna", "blue", function() {
// Colors each character a random color between "burntsienna" and "blue"
return Math.random()
})This library was ported from the jquery xcolor plugin, and has all the non-jQuery related functionality that library had. Some great documentation for that library that will help understand the methods in this library, see the code examples and demonstrations here: http://www.xarg.org/project/jquery-color-plugin-xcolor/
npm install xolor
Accessing xolor:
// node.js
var xolor = require('xolor')
// amd
require.config({paths: {xolor: '../dist/xolor.umd.js'}})
require(['xolor'], function(xolor) { /* your code */ })
// global variable
<script src="xolor.umd.js"></script>
xolor; // xolor.umd.js can define xolor globally if you really
// want to shun module-based designUsing xolor:
xolor(cssColorString) - Constructor. Takes in either a css color like "lightskyblue", "#fff", "#fff000", "rgb(1, 234, 56)", "rgb(66%, 55%, 44%)",
xolor(rgbObject) - an rgb object like {r:34,g:45,b:56},
xolor(rgbString) - a comma-sparated rgb string like "34,45,56",
xolor(rgbArray) - an array where each element is interpreted as an rgba component [r,g,b,a] like [34,45,56],
xolor(hslColorString) - an hsl/hsb color like "hsl(10, 90, 20)" or "hsb(10, 90, 20)"
xolor(hslObject) - an hsl object like {h:10,s:90,l:20} or {h:10,s:90,b:20},
xolor(hsvColorString) - an hsv color like "hsv(64, 40, 16)"
xolor(hslObject) - an hsv object like {h:64,s:40,v:16},
xolor(integer) - an integer where the least significant 2 bytes represent blue, the next 2 bytes represent green, the next 2 represent red, and the most significant bytes represent alpha.
xolor(xolorObject) - Returns a copy of the passed in xolor object.
xolor.random() - Returns a xolor object representing a random color with 100% opacity.
xolor.readable(background, textColor, fontSize) - Returns true if text will be readable at the given size with the given background and text colors.
xolor.readable(domNode)
background- The background color. Can be any value thexolorconstructor can take in.textcolor- The text color. Can be any value thexolorconstructor can take in.fontSize- The font size in pixels. Default: 10.domNode- A domNode to check for readability.
xolor.colorize(domNode, from, to, methodFn) - Colors the text within a domNode.
xolor.colorize(domNode, from, to, methodString)
domNode- The domNode to color.from- The color the first letter should be.to- The color the last letter should be.methodFn(charsProcessed,textLength,lastPosition,character)- The method used to transition betweenfromandto. Is a function that should return a number between 0 and 1 indicating how far fromfromand how close totothe color will be at the given position.charsProcessed- The number of characters tha have been processed (ie the index of the character).textLength- The full length of text in this node.lastPosition- The last position returned by a call to this method. Starts at 0.character- The character at the given position.
methodString- The method used to transition betweenfromandto. Can be one of the following values:"gradient"- A smooth gradient betweenfromandto."flip"- Flips betweenfromandtoevery visible character."pillow"- A smooth gradient betweenfromandtoand back tofrom.
xolorObject.r - Returns the red part of the xolor. Setting this value mutates the color.
xolorObject.g - Returns the green part of the xolor. Setting this value mutates the color.
xolorObject.b - Returns the blue part of the xolor. Setting this value mutates the color.
xolorObject.a - Returns the alpha part of the xolor. Setting this value mutates the color.
xolorObject.rbg - Returns an rbga object representing the color (like {r:34,g:45,b:56,a:1}).
xolorObject.css - Returns a css color string representing the color (either "transparent" or a css rbg or rbga string like "rgb(1, 234, 56)").
xolorObject.fraction - Returns an rbga object where each property is a number from 0 to 1 representing a percentage of full color. To clarify, xolor('rbg(10%,20%,30%)').fraction would return [0.1, 0.2, 0.3].
xolorObject.array - Returns an array where each element represents an rgba value. To clarify, xolor('rbg(20,50,100)').array would return [20,50,100].
xolorObject.hsl - Returns an hsla object representing the color in Hue-Saturation-Lightness format.
xolorObject.hsv - Returns an hsva object representing the color in Hue-Saturation-Value format.
xolorObject.hex - Returns a hex string value representing the color.
xolorObject.toString() - Same as xolorObject.hex.
xolorObject.int - Returns an integer where the least significant 2 bytes represent blue, the next 2 bytes represent green, the next 2 represent red, and the most significant bytes represent alpha.
xolorObject.name - Returns the closest name for the color from this list: http://www.w3.org/TR/css3-color/#svg-color
Combinations two colors:
Each of these functions returns a new xolor object based on a function of two colors. Xolor objects are never mutated by commands on them - all methods return new objects and are, consequently, chainable.
xolorObject.blend(topColor, opacity) - Returns the color that would show if topColor was over the xolorObject's color with the given opacity.
xolorObject.combine(otherColor) - Returns the two colors combined with a ximple XOR method.
xolorObject.breed(otherColor) - Returns a xolor with random parts of each color.
xolorObject.add(otherColor) - Returns the additive mix of the two colors.
xolorObject.subtractive(otherColor) - Returns the subtractive mix of the two colors.
xolorObject.subtract(otherColor) - Returns the subtraction of the two colors. I don't believe this is a standard color method.
xolorObject.mult(otherColor) - Returns the multiplicative mix of the two colors.
xolorObject.multiply(otherColor) - Alias for mult.
xolorObject.avg(otherColor) - Returns a color between the two colors by averaging the rgb parts.
xolorObject.average(otherColor) - Alias for avg.
xolorObject.gradient(otherColor, position) - Returns the color on a gradient between the two colors at the given position on the gradient.
otherColor- Can be any value thexolorconstructor can take in.position- A number from 0 to 1 representing how close tootherColorthe returned color should be (where 1 represents theotherColorexactly).
Related colors:
The following methods return a single xolor object:
xolorObject.inverse() - Returns the inverse xolor.
xolorObject.web() - Returns a "web safe" xolor.
xolorObject.complementary() - Returns of the complementary color as a a xolor object.
xolorObject.comp() - Alias for complementary.
xolorObject.red() - Returns a xolor with just the red part.
xolorObject.green() - Returns a xolor with just the green part.
xolorObject.blue() - Returns a xolor with just the blue part.
Color Attributes:
These methods return a color attribute when called with no argument, and return a new xolor object with that attribute modified if you do pass an argument.
xolorObject.lightness() - Returns the lightness level (a number between 0 and 255).
xolorObject.lightness(level) - Returns a xolor with the lightness changed to the given level (a number between 0 and 255).
xolorObject.hue() - Returns the hue (a number between 0 and 360).
xolorObject.hue(newHue) - Returns a xolor with the hue changed to the passed newHue (a number between 0 and 360).
xolorObject.saturation() - Returns the saturation as caluated in the HSV model (a number between 0 and 1).
xolorObject.saturation(newSaturation) - Returns a xolor with the hue (as caluated in the HSV model) changed to the passed newSaturation (a number between 0 and 1).
xolorObject.brightness() - Returns the brightness (aka "value") as caluated in the HSV model (a number between 0 and 1).
xolorObject.brightness(newValue) - Returns a xolor with the brightness (aka "value", as caluated in the HSV model) changed to the passed newValue (a number between 0 and 1).
xolorObject.luminosity() - Returns the WCAG luminosity (a number between 0 and 1).
Filters:
xolorObject.sepia() - Returns a xolor filtered by microsoft's sepia filter.
xolorObject.greyfilter(method) - Returns a grey version of the xolor.
method- (Default: 1) Can be:1- Robert Eisele's grey filter method2- Sun's grey filter method3- An unknown grey filter method (I'm not sure where it came from)
The following methods return arrays of xolor objects.
xolorObject.triad() - Returns the color's triad.
xolorObject.tetrad() - Returns the color's tetrad.
xolorObject.splitcomplement() - Returns the color's split complement colors.
xolorObject.splitcomp() - Alias for splitcomplement.
xolorObject.monochromatic(number) - Returns an array of monochromatic colors.
xolorObject.monochromes(number) - Alias for monochromatic.
xolorObject.analogous(number, slices) - Returns an array of analogous color.
number- (Default:8) The number of colors to return.slices- (Default:32) I'm not entirely sure what this parameter is.
xolorObject.schemeFromDegrees(hueDegreesArray) - Returns an array of xolor objects the same length as the array passed in. For example, xolor('red').schemeFromDegrees([0, 120, 240]) is a triadic color scheme.
hueDegreesArray- An array where each element is a number of degrees representing a color with a hue (0-360) that many degrees from the original color.
Miscellaneous:
xolorObject.distance(fromColor) - Returns an integer representing the "distance" between the xolorObject's color and the fromColor color. fromColor can be any value you can pass into the xolor constructor (a number between 0 and 441.67). See here for details.
xolorObject.contrast(color2) - Returns the WCAG contrast between the two colors (a number between 1 and 21).
Anything helps:
- Creating issues (aka tickets/bugs/etc). Please feel free to use issues to report bugs, request features, and discuss changes
- Updating the documentation: ie this readme file. Be bold! Help create amazing documentation!
- Submitting pull requests.
How to submit pull requests:
- Please create an issue and get my input before spending too much time creating a feature. Work with me to ensure your feature or addition is optimal and fits with the purpose of the project.
- Fork the repository
- clone your forked repo onto your machine and run
npm installat its root - If you're gonna work on multiple separate things, its best to create a separate branch for each of them
- edit!
- If it's a code change, please add to the unit tests (at test/xolor.js) to verify that your change
- When you're done, run the unit tests and ensure they all pass
- Commit and push your changes
- Submit a pull request: https://help.github.com/articles/creating-a-pull-request
- 1.2.0
- Adding hue, saturation, brightness, luminosity, schemeFromDegrees, and contrast
- Removing relLightness and lighter
- Changing
opacitytoblend
- 1.1.8 - Fixing colorize and adding full documentation
- 1.1.0 - Changed lightness and relLightness from getter/setters to functions
- 1.0.0 - Created based on https://github.com/infusion/jQuery-xcolor
- documentation
- Incorporate more color methods from less.js
- Incorporate color methods from the "other useful javascript color modules"
- Incorporate missing methods listed here: http://stackoverflow.com/questions/10266123/hex-rgb-color-manipulation-methods/10266506#10266506
- Write tests
- Add HSI support
- Add HWB support
- Add 'whiteness' and 'blackness' methods
- Add CMYK support
Thanks goes out to:
- Robert Eisele who's xColor jQuery plugin is where I got much of the code for this module.
Dual licensed under the MIT or GPL Version 2 licenses.
These modules may have manipulation methods not contained in this library:
- https://github.com/brehaut/color-js
- https://github.com/mbjordan/Colors
- https://github.com/gka/chroma.js
These modules have manipulations that are already contained in this xolor library as of last checking: