FUCSS client & server styling generator
Fucss is fastest tool and method to write custom styling generator for riot, react, webpack and plain html.
Fucss styling generator Hell YEAH!!!!
client: https://cdn.jsdelivr.net/npm/fucss/fucss.js
server: npm install --save fucss
next: npm install --save next-fucss
fuico: https://github.com/noneedsystem/fuico
Example
You just implement fucss to your project using only client script
or server side options fucss
| next-fucss
button.js
<button className="p:15px-30px br:5px bs:1 bd:0 bg:prim c:white m:10px fl:r">text</button>;
output.css
/** Fucss class rules */
#0.7.9
added
tools to generate jsx, webpack classes and styling separately
#0.7.8
added
fucss.grab class generating function from objects. fucss.grab({'p:20px': true} | (isTrue) => ({ 'p:20px': isTrue}), {isTrue: true})
improved
fucss.storeHTML now stores object inside div dummy elem for class harvesting
added
md-fs:16px_lh:1.3 class chaining support
{
solved
bg:lg-70ndg-prim-sec linear gradient implementation
todo fix
transition-delay | multi transition fix required
todo improv
unit testing
#0.7.7
fixed
jc:...
has no auto margin on its items. Now justify-content will work.
added
class | classname | class... attributes are supported.
solved
tt:uc text-transform: uppercase
added
an:hide-1s sets osition: absolute; visibility: hidden;
after 1s
added
afm:fwd support animation-fill-mode: forwards
added
bv:hd support backface-visibility:hidden
added
bg-atc:fx support background-attachment:fixed
parallax
added
zm:2 support zoom:2
added
cp:ins(100px-50px) support clip-path: inset(100px 50px)
added
t3d:0-0-0 support transform: translate3d(0, 0, 0)
solved
bft-blr:1px support backdrop-filter:blur(1px)
added
prsp:1000 support perspective:1000
refactored
Parser. Now riot parser supports classNames = (value) => ({ 'classname': value })
#0.7.6
added
scaler animation @keyframes scaler
added
animation support an inf added an:scaler-inf-1s-eio
{ animation: scaler infinite 1s ease-in-out }
#0.7.5
fixed
dp:flx
has no auto margin on its items. Now align-items & justify-content will work
added
calc support w:calc(100pc-300px)
added
value ini: initial included bz:ini
added
value st: static included dp:st
#0.7.4
fixed
grayscale typo
#0.7.3
added
node server support require('fucss')
added
fucss.storeHTML function that stores array of html strings in fucss.HTML array
added
props to fucss.generateStyling function
// Returns css rules on the server side fucss // Now returnStyle option executes \' replacer ifoptsriot && optsreturnStyle htmlString = htmlString;
#0.7.2
fixed
now all riot component classes are generated EG class="ts:tf { 'trx:30pc': modify }"
#0.7.1
fixed
negative values z:20n
{ z-index: -20 }
added
properties scaleX scaleY scaleZ added scx:1n
{ transform: scaleX(-1) }
fucssproperties = scx: 'scaleX' scy: 'scaleY' scz: 'scaleZ'
#0.7.0
add
property visability added vsb:vs
vsb:hd
#0.6.9b
refactored
riot tags are now collected through xhr response
#0.6.9a
changed
global values moved to top of the generated code
removed
moz, webkit prefexis
changed
smx: 401, mdx: 769, lgx: 1025
#0.6.9
refactored
txt property is now config instead of property (use in body) txt:black100
fixed
values 1s,tf ar now not sticky (multiple transition support added) ts:op-1s,tf-500ms-eio-1s
{ transition: opacity 1s, transform 500ms easy-in-out 1s; }
fixed
ac - align-content now is not treated as state active ac-ac:c
:active { align-content: center }
changed
bl -> blr filter function value blr:1px
{ filter:blur(1px) }
changed
op - opacity filter removed op:0.1
{ opacity:0.1 }
fucssproperties = mbm: 'mix-blend-mode'
fucssvalues = dif: 'difference' light: 'lighten' dark: 'darken'
#0.6.8
No need for fux-trans & fux-boxsh Features: transitions, transform, functional values, sibling selector support, boxshadow
//box shadow now is auto generated bs:1 //transition all .45s cubic-bezier(0.23, 1, 0.32, 1) ts:all //transform scl:11 /** scl: 'scale', trl: 'translate', rot: 'rotate', skw: 'skew', mtx: 'matrix', prp: 'perspective', trx: 'translateX', try: 'translateY', trz: 'translateZ', */ //version 0.6.8 fucssfunctions = //background lg: 'linear-gradient' rg: 'radial-gradient' //color rgb: 'rgb' rgba: 'rgba' //transition cb: 'cubic-bezier' fucsstransforms = scl: 'scale' trl: 'translate' rot: 'rotate' skw: 'skew' mtx: 'matrix' prp: 'perspective' trx: 'translateX' try: 'translateY' trz: 'translateZ' fucssfilters = bl: 'blur' bh: 'brightness' cn: 'contrast' ds: 'drop-shadow' gs: 'greyscale' hr: 'hue-rotate' iv: 'invert' op: 'opacity' st: 'saturate' sp: 'sepia' fucss'shape-outside' = crc: 'circle' rec: 'rect' els: 'ellipse' ins: 'inset' poly: 'polygon'
#0.6.7
style in header now is created dynamically
#0.6.6a
multiple target escape fix
#0.6.6
fixed multiple target issue
fixed fux-trans // now it works for all transitions
implemented first, last child
//multiple targets now are escaped fs:100pc_ah1 = 'a, h1 { font-size: 100% }'; //fux-trans fixed fucssExtras = 'fux-trans': 'transition: all .3s ease;' //new state last-child implemented fucssstates = lc: 'last-child' last: 'last-child' first: 'frist-child' //new props fucssproperties = jc: 'justify-content' cont: 'content'
#0.6.5
media queries now have max-width
//smx => @media only screen and max-width 399px ... fucssmedia = smx: 399 mdx: 767 lgx: 1023 ;
fucss properties added
fucssproperties = flxf: 'flex-flow'
#0.6.4
color modifiers enabled for example default pink = '#E91E63':
bg:pinka5 = { background: rgba(233,30,99,0.5); }
bg:pinkl10 = { background: #ff387d; }
bg:pinkd10 = { background: #d0054a; }
Flex box support implemented.
https://css-tricks.com/snippets/css/a-guide-to-flexbox/
default colors modified and implemented color modifier
implemented global default rules
//css important eg: bg:pink-! = { background: ## #E91E63 !important; } //colors moved to separate object and redefined fucsscolors = //version 6 colors prim: '#DE3E3E' // red sec: '#2F3B50' // grey dark red: '#F44336' pink: '#E91E63' purple: '#9C27B0' dpurple: '#673AB7' indigo: '#3F51B5' blue: '#2196F3' lblue: '#03A9F4' cyan: '#00BCD4' teal: '#009688' green: '#4CAF50' lgreen: '#8BC34A' lime: '#CDDC39' yellow: '#FFEB3B' amber: '#FFC107' orange: '#FF9800' dorange: '#FF5722' brown: '#795548' grey: '#9E9E9E' bgrey: '#607D8B' black: '#111' silver: '#DDD' white: '#fff' navy: '#001f3f' aqua: '#7FDBFF' teil: '#39CCCC' olive: '#3D9970' maroon: '#85144b' fuchsia: '#F012BE' // social twitter: '#5AACF2' facebook: '#3C599C' google: '#D8503D' ; // now you can specify color modes for the color eg: pink400 = pinklight6 fucsscolorMods = //50: 'l52', // white 'a13' 100: 'l37' // white 'a31' 200: 'l26' // white 'a50' 300: 'l12' // white 'a7' 400: 'l6' // white '185' 500: '' 600: 'd6' // black 'a91' 700: 'd12' // black 'a81' 800: 'd18' // black 'a71' 900: 'd24' // black 'a52' ; // now you can predefine color configs eg: <body class="prim:indigo sec:pink err:red warn:yellow"> fucssconfig = 'prim': 'colors' 'sec': 'colors' 'err': 'colors' 'warn': 'colors' ; // flex box support var fucssProperties = //version 0.6.3 ww: 'word-wrap' fd: 'flex-direction' od: 'order' flxg: 'flex-grow' flxs: 'flex-shrink' flxw: 'flx-wrap' flxb: 'flex-basis' flx: 'flex' as: 'align-self' ai: 'align-items' ac: 'align-content' var fucssValues = //version 0.6.3 pl: 'pre-line' nm: 'normal' bl: 'baseline' flx: 'flex' if: 'inline-flex' row: 'row' col: 'col' rr: 'row-reverse' cr: 'column-reverse' li: 'list-item' wrap: 'wrap' sb: 'space-between' sa: 'space-around' fs: 'flex-start' fe: 'flex-end' stc: 'stretch' var fucssGlob = false; // by default it is enabled var fucssGlobalExtras = "[contenteditable='plaintext-only']": 'cursor: text' "[contenteditable='plaintext-only']:empty:before" : 'content: attr(placeholder); opacity: 0.5; display: block;' "body": 'margin: 0; text-align: center; font-family: inherit; border-width: 0;' "*": 'margin: 0 auto; outline: 0; padding: 0; box-sizing: border-box; border-style: solid; border-width: 0; vertical-align: baseline;' "a": 'text-decoration: none;' "a, span, img, button, i": 'display: inline-block;' "button, a": 'cursor: pointer' "input, button, select, option, textarea": 'font-size: 100%; font-family: inherit;'
#0.6.2
Predefined colours, animations implemented. Splash screen deprecated.
//all values can be overwrited using fucssValues var fucssValues = //version 6 colors prim: '#DE3E3E' // red sec: '#5FBA7D' // grey dark tert: '#2F3B50' // green quat: '#f6f7f4' // grey quin: '#D3D1D1' // grey light //sext: '#D3D1D1', //sept: '#D3D1D1', //oct: '#D3D1D1', //non: '#D3D1D1', //den: '#F1F1F1', // bg grey very light, navy: '#001f3f' blue: '#0074D9' aqua: '#7FDBFF' teil: '#39CCCC' olive: '#3D9970' green: '#2ECC40' lime: '#01FF70' yellow: '#FFDC00' orange: '#FF851B' red: '#FF4136' maroon: '#85144b' fuchsia: '#F012BE' purple: '#B10DC9' black: '#111111' grey: '#AAAAAA' silver: '#DDDDDD' //deprecated splash screen value var fucssSplash = false; //implemented var fucssAnim = false; // default true // animations implemented @keyframes spin @keyframes fadeIn @keyframes fadeOut // new extras added var fucssExtras = 'fux-bb': 'border-sizing: border-box;' 'fux-clear': 'overflow: hidden;' 'fux-fadeIn': 'animation-name: fadeIn;animation-iteration-count: 1;\ animation-timing-function: ease-in;animation-duration: 0.2s;opacity: 1;' 'fux-spinner': 'position: absolute; top: calc(50% - 25px); left: calc(50% - 25px); width: 50px; height: 50px; border: 3px solid ## #fff;\ border-radius: 50%; border-top-color: ## #DE3E3E; -webkit-animation: spin 0.75s ease-in-out infinite;' 'fux-boxsh': 'box-shadow: 0 1px 2px rgba(0,0,0,.1)' 'fux-trans': 'transition: color 0.1 ease-in; transition-property: color, background-color;' fucss{}
#0.6.1
Auto riot class generator implemented
//now generates automatically riot tag classes when script[type="riot/tag" and !!window.riotfucss{}
#0.6.0
Minified version now available
// now riot.js class object can be extracted too and all rules will be generated var _jsStr = "<div class={'op:0.8 hv-op:1': true, 'p:10px': true, 'm:10px': false} />"; fucss; // if you need to use fucss for riot.js var _tags = document; var _jsStr = documentbodyouterHTML; var _jsLoadedCount = 0; _tags;
#0.5.9c
Fixed fucssValues implementation
// now it is assigned before window.onloadObject
#0.5.9
Fixed color generator
#0.5.8
Change log
//default splash value now is set to false fucsssplash = false; //colors can be predefined var fucssValues = main: '#ffcb05' grey: '#dadada' ; /** new function for react.js and classNames library implemented <div className="bg:000"/> or var getDivClassNames = classNames({ 'bg:000': true, }); **/ fucss;
<!-- now it is possible to use lighten(l25) / darken(d25) / alpha(a25) for colours. Can be used with predifined values eg: (bg:mainl25) --> colour ## #ffcb05 lightened by 25%
#0.5.6
Change log
Media queries changed
fucssmedia = sm: 400 md: 768 lg: 1024 ;
#0.5.5
Change log
Splash screen implemented
<!-- put inside body -->
Properties
<!-- "bs" changed to "bz" "box-sizing"-->bs => bz // box-sizing <!-- We need bs for "box-shadow" more then "box-sizing" -->bs // box-shadow <!-- NEW table-layout prop-->tl //table-layout
Now fucss is a bit more customizable. AT LAST WE CAN PREDEFINE COLORS and create custom rules
#0.5.4
Change log
<!-- Atlast we have two "font-family" word support --> ff:Open+Sans // font-family:"Open+Sans"; <!-- ls changed to lis "list-style"--> ls => lis // list-style <!-- We need ls for "letter-spacing" more then "list-style" --> ls // letter-spacing <!-- Added Important functionality --> c:fff-! // color:## #fff !important;
#0.5.2
Stuff
// set fucss.init = false and fucss will not initiate after document is loaded // function fucss.generateStyling(html, returnStyle) lets you to initate style rendering in js// u can pass 2 props to this function// html lets you to pass htmlString// returnStyle lets you to get back the cssString instead of inserting automatically to your html header fucsswatch = 0;fucssinit = true; fucssseps = 'value': ':' 'space': '-' 'target': '_'; fucssmedia = sm: 480 md: 768 lg: 1024; fucssstates = hov: 'hover' act: 'active' foc: 'focus' hv: 'hover' ac: 'active' fc: 'focus'; fucssproperties = bs: 'box-sizing' pdg: 'padding' mrg: 'margin' clr: 'color' bg: 'background' txt: 'text-align' brd: 'border' dsp: 'display' pos: 'position' h: 'height' w: 'width' fnt: 'font' flt: 'float' vlgn: 'vertical-align' hlgn: 'text-align' col: 'width' lh: 'line-height' crs: 'cursor' dec: 'text-decoration' tb: 'table' // added by me idx: 'z-index' op: 'opacity' tran: 'text-transform' mh: 'min-height' mxw: 'max-width' mxh: 'max-height' mnw: 'min-width' mnh: 'min-height' ls: 'list-style' ltrs: 'letter-spacing' ws: 'white-space' //version 4 ff: 'font-family' ta: 'text-align' fs: 'font-size' dp: 'display' t: 'top' r: 'right' b: 'bottom' l: 'left' of: 'overflow' br: 'border-radius' bd: 'border' fw: 'font-weight' c: 'color' p: 'padding' m: 'margin' va: 'vertical-align' ps: 'position' xw: 'max-width' nw: 'min-width' td: 'text-decoration' z: 'z-index' fl: 'float' cl: 'clear' sh: 'box-shadow' tr: 'text-transform'; //version 4fucsscolorazable = 'color' 'background' 'background-color' 'border' 'border-color' 'border-bottom' 'border-top' 'border-left' 'border-right' 'border-right-color' 'border-left-color' 'border-top-color' 'border-bottom-color'; fucssunits = 'px' 'em' 'pc' 'vh' 'vw'; fucssgroups = 'tb' 'rl'; fucssaddons = t: 'top' r: 'right' b: 'bottom' l: 'left' pos: 'position' rad: 'radius' fml: 'family' // added by me sz: 'size' rd: 'radius' w: 'width' clr: 'color' stl: 'style' lyt: 'layout' wg: 'weight' upc: 'uppercase' //version 4 c: 'color' s: 'style' rp: 'repeat' ps: 'position'; fucssvalues = bb: 'border-box' greyd1: '#ffcb05' blackl3: '#f24543' bot: 'bottom' c: 'center' r: 'right' l: 'left' t: 'top' b: 'bottom' m: 'middle' n: 'none' clr: 'color' rel: 'relative' abs: 'absolute' fix: 'fixed' inh: 'inherit' tc: 'table-cell' td: 'table-cell' tr: 'table-row' tb: 'table' no: 0 hid: 'hidden' vis: 'visible' pnt: 'pointer' sld: 'solid' // added by me ib: 'inline-block' blk: 'block' cl: 'clear' //version 4 hd: 'hidden' vs: 'visible' bk: 'block' pt: 'pointer' rl: 'relative' ab: 'absolute' sd: 'solid' ts: 'transparent' np: 'nowrap' bt: 'both' fx: 'fixed' cv: 'cover' uc: 'uppercase' rp: 'no-repeat' nrp: 'no-repeat';