/* ------------------------------------------------------------------------------ * * # Spectrum color picker * * Flexible and powerful jQuery colorpicker library * * Version: 1.0 * Latest update: May 25, 2015 * * ---------------------------------------------------------------------------- */ // Base styles // ------------------------------ // Base .sp-sat, .sp-val, .sp-top-inner, .sp-color, .sp-hue, .sp-clear-enabled .sp-clear, .sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { position: absolute; top: 0; left: 0; right: 0; bottom: 0; } // Hide containers by default .sp-container.sp-input-disabled .sp-input-container, .sp-container.sp-buttons-disabled .sp-button-container, .sp-container.sp-palette-buttons-disabled .sp-palette-button-container, .sp-palette-only .sp-picker-container, .sp-palette-disabled .sp-palette-container, .sp-initial-disabled .sp-initial { display: none; } .sp-hidden { display: none!important; } .sp-cf { &:before, &:after { content: ""; display: table; } &:after { clear: both; } } // Elements .sp-preview, .sp-alpha, .sp-thumb-el { position: relative; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); } // Previews .sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner { display: block; } // Picker and palette containers .sp-container { position: absolute; top: 0; left: 0; display: inline-block; z-index: 9999994; background-color: #fafafa; border: 1px solid @dropdown-border; border-radius: @border-radius-base; overflow: hidden; .box-sizing(content-box); &.sp-flat { position: relative; overflow-x: auto; max-width: 100%; white-space: nowrap } } .sp-picker-container, .sp-palette-container { display: block; white-space: nowrap; vertical-align: top; position: relative; padding: 10px; padding-bottom: 300px; margin-bottom: -290px; @media (min-width: @screen-sm) { display: inline-block; } } .sp-picker-container { width: 220px; } // Disable user selection .sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button { .user-select(none); } // Picker elements // ------------------------------ // Colors and hue areas .sp-top { position: relative; width: 100%; display: block; } .sp-color { right: 20%; } .sp-hue { left: 85%; height: 100%; } .sp-clear-enabled .sp-hue { top: 40px; height: 75%; } .sp-fill { padding-top: 80%; } // Alpha .sp-alpha-enabled { .sp-top { margin-bottom: 26px; } .sp-alpha { display: block; } } .sp-alpha-handle { position: absolute; top: -4px; bottom: -4px; width: 5px; left: 50%; cursor: pointer; border: 1px solid @gray-light; background-color: #fff; border-radius: @border-radius-large; } .sp-alpha { display: none; position: absolute; bottom: -16px; right: 0; left: 0; height: 6px; } // Clear .sp-clear { display: none; } .sp-clear-display { cursor: pointer; // Icon &:after { content: '\ee6e'; display: block; font-family: 'icomoon'; font-size: @icon-font-size; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; line-height: 30px; } // Hide icon in previews .sp-preview &:after, .sp-initial &:after { content: none; } } .sp-clear-enabled .sp-clear { display: block; left: 85%; height: 30px; text-align: center; color: #999; .box-shadow(0 0 0 1px #ddd inset); } // Input .sp-input-container { margin-top: 10px; .sp-initial-disabled & { width: 100%; } } .sp-input { border: 1px solid @input-border; padding: @padding-base-vertical @padding-base-horizontal; width: 100%; background-color: @input-bg; border-radius: @input-border-radius; outline: 0; color: @input-color; } // Initial .sp-initial { margin-top: 10px; span { width: 50%; height: 25px; display: block; float: left; .sp-thumb-inner { height: 25px; width: 100%; display: block; } } } // Dragger and slider .sp-dragger { height: 5px; width: 5px; border: 1px solid #fff; background-color: #333; cursor: pointer; position: absolute; top: 0; left: 0; } .sp-slider { position: absolute; top: 0; cursor: pointer; height: 4px; left: -2px; right: -2px; border: 1px solid @gray-light; background-color: #fff; border-radius: @border-radius-base; } // Color preview // ------------------------------ // Replacer (the little preview div that shows up instead of the ) .sp-replacer { overflow: hidden; cursor: pointer; padding: 5px; display: inline-block; border: 1px solid @input-border; background-color: #fafafa; vertical-align: middle; border-radius: @input-border-radius; // States &:hover, &.sp-active { border-color: darken(@input-border, 10%); color: @text-color; .sp-dd { color: @text-color; } } // Custom color replacer &[class*=bg-] { &, &:hover, &:focus { border-color: transparent; } .sp-dd { color: #fff; } &.sp-active .sp-dd { color: #fff; } } } // Disabled state .sp-replacer { &.sp-disabled { cursor: default; .opacity(0.8); &:not([class*=bg-]) { &:hover, &:focus { border-color: @input-border; } } .sp-dd, &[class*=bg-] .sp-dd { color: @text-muted; } } } // Color preview .sp-preview { position: relative; width: 26px; height: 24px; margin-right: 5px; float: left; z-index: 0; .sp-preview-inner, .sp-clear-display { .box-shadow(0 0 0 1px fade(#000, 5%)); } .sp-replacer[class*=bg-] & { .sp-preview-inner { .box-shadow(0 0 0 1px fade(#000, 50%)); } } } // Arrow .sp-dd { float: left; font-size: 0; position: relative; margin: 3px 1px; color: @gray-light; // Arrow icon &:after { content: '\e9c5'; display: block; font-family: 'icomoon'; font-size: @icon-font-size; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } } // Gradients // ------------------------------ // Gradients for hue, saturation and value instead of images. Not pretty... but it works .sp-sat { background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0))); background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0)); background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0)); background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)"; filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81'); .box-shadow(0 0 0 1px #ccc inset); } .sp-val { background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0))); background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0)); background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0)); background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)"; filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000'); } .sp-hue { background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000)); background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); } // // IE filters do not support multiple color stops. // Generate 6 divs, line them up, and do two color gradients for each. // Yes, really. // .sp-1 { height: 17%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00'); } .sp-2 { height: 16%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00'); } .sp-3 { height: 17%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff'); } .sp-4 { height: 17%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff'); } .sp-5 { height: 16%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff'); } .sp-6 { height: 17%; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000'); } // Color palettes // ------------------------------ // Basic styles .sp-palette { max-width: 220px; } .sp-palette-container { .sp-palette-only & { border: 0; } @media (min-width: @screen-sm) { border-right: 1px solid @dropdown-border; } } // Palette thumbs .sp-thumb-el { position: relative; .sp-palette & { display: inline-block; position: relative; cursor: pointer; } // Add 1px inner semi-transparent border .sp-thumb-inner { .box-shadow(0 0 0 1px fade(#000, 10%) inset); &:hover { .box-shadow(0 0 0 1px fade(#000, 25%) inset); } } .sp-palette & { width: 16px; height: 16px; + .sp-thumb-el { margin-left: 5px; } &.sp-thumb-active { .box-shadow(0 0 0 2px fade(#000, 10%) inset); .sp-thumb-inner { .box-shadow(0 0 0 1px fade(#000, 25%) inset); } } } } // Adding checkmark to the active thumb .sp-palette { .sp-thumb-active { &.sp-thumb-dark, &.sp-thumb-light { .sp-thumb-inner { &:after { content: '\e600'; display: block; font-family: 'icomoon'; font-size: @icon-font-size; line-height: 1; color: #fff; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } } } &.sp-thumb-light .sp-thumb-inner:after { color: @text-color; } } } // Thumbnail row .sp-palette-row { font-size: 0; & + .sp-palette-row { margin-top: 5px; } &:empty { margin-top: 0; } } // Picker buttons // ------------------------------ // Button base .sp-cancel, .sp-choose, .sp-palette-toggle { border: 0; border-radius: @border-radius-small; padding: @padding-small-vertical @padding-small-horizontal; float: left; width: 48%; text-align: center; outline: 0; } // Button containers .sp-palette-button-container, .sp-button-container { margin-top: 10px; text-align: center; // In colored container .sp-container[class*=bg-] & { a, button { background-color: fade(#000, 25%); color: #fff; border-color: transparent; } } } // Button states .sp-cancel, .sp-palette-toggle, .sp-choose { border: 1px solid transparent; // Hover state &:hover, &:focus { .box-shadow(0 0 0 100px fade(#000, 2%) inset); } // Active state &:active { .box-shadow(0 0 0 100px fade(#000, 4%) inset) } } // Cancel and palette toggle buttons .sp-cancel, .sp-palette-toggle { color: @btn-default-color; margin-right: 5px; background-color: @btn-default-bg; margin-right: 4%; border-color: @btn-default-border; &:hover, &:focus { color: @btn-default-color; } } .sp-palette-toggle { margin-right: 0; width: auto; float: none; } // Choose button .sp-choose { color: #fff; background-color: @color-slate-500; }