even.less is a library for LESS CSS that utilizes extremely terse naming abbreviations coupled with consistency to make write you LESS files faster, easier and smaller.
.dsp(@value)
--> setdisplay: @value
.none()
-->none
.blk()
-->block
.nln()
-->inline
.iln()
-->inline
.ilb()
-->inline-block
.nblk()
-->inline-block
.iblk()
-->inline-block
.ilnblk()
-->inline-block
.pos(@value)
--> setposition: @value
.rel()
-->relative
.abs()
-->absolute
.fxd()
-->fixed
.stc()
-->static
.l(@value)
-->left: @value
.r(@value)
-->right: @value
.t(@value)
-->top: @value
.btm(@value)
-->bottom: @value
(.b
is used byborder
, a far more common property)
There are several compound offset properties, the second param is always optional and, if omitted, will be the same as the first:
.tl(@top[, @left])
--> top & left.tr(@top[, @right])
--> top & right.btml(@btm[, @left])
--> bottom & left.btmr(@btm[, @right])
--> bottom & right
Note: Compound properties for top & bottom, or left & right don't exist because of their basically pointless use in most every day settings.
Additionally, the following utility function exists for quickly setting something to absolute position with an x and y:
.xy(@x[, @y])
--> absolute, left, & top
Margin mixins use the .m
prefix, plus optional t, l, b, r
suffixes for combination methods (top, left, bottom, and right, respectively)
.m(@value)
-->margin: @value
.mt(@value)
-->margin-top
.ml(@value)
-->margin-left
.mb(@value)
-->margin-bottom
.mr(@value)
-->margin-right
Combinations (currently only two-sided combos exist, three-sided do not):
.mtl(@top[, @left])
--> top & left.mtr(@top[, @right])
--> top & right.mbl(@btm[, @left])
--> bottom & left.mbr(@btm[, @right])
--> bottom & right.mtb(@top[, @btm])
--> top & bottom.mlr(@left[, @right])
--> left & right
Padding mixins follow the same rules as the margin mixins, but use the .p
prefix
.p(@value)
-->padding: @value
.pt(@value)
-->padding-top
.pl(@value)
-->padding-left
.pb(@value)
-->padding-bottom
.pr(@value)
-->padding-right
Combinations:
.ptl(@top[, @left])
--> top & left.ptr(@top[, @right])
--> top & right.pbl(@btm[, @left])
--> bottom & left.pbr(@btm[, @right])
--> bottom & right.ptb(@top[, @btm])
--> top & bottom.plr(@left[, @right])
--> left & right
Since Borders are much more complex than Margins or Padding, they occupy several prefixes:
.b(@width, @color[, @style: solid])
-->border: @width @style @color
.bt(@width, @color[, @style: solid])
-->border-top
.bl(@width, @color[, @style: solid])
-->border-left
.bb(@width, @color[, @style: solid])
-->border-bottom
.br(@width, @color[, @style: solid])
-->border-right
- Because of the number of parameters and the use of defaults, mutli-side combination mixins only take one set of params and use it for both sides
.btl(@width, @color[, @style: solid])
--> top & left.btr(@width, @color[, @style: solid])
--> top & right.bbl(@width, @color[, @style: solid])
--> bottom & left.bbr(@width, @color[, @style: solid])
--> bottom & right.btb(@width, @color[, @style: solid])
--> top & bottom.blr(@width, @color[, @style: solid])
--> left & right
.bw(@value)
-->border-width: @value
.bwt(@value)
--> top.bwl(@value)
--> left.bwb(@value)
--> bottom.bwr(@value)
--> right
.bc(@value)
-->border-color: @value
.bs(@value)
-->border-style: @value
.brd(@value)
-->border-radius: @value
- (Note:
.brd
and it's combos set vendor-prefixed properties like-webkit-border-radius
) .brd
combos work a bit differently: single corner settings use two letters like.brdtr
for setting the top-right border-radius.- However, one letter suffixes like
.brdt
set both top corners (top-left & top-right)
- (Note:
.c(@color)
-->color: @color
.bg(@value)
-->background: @value
.bgc(@color)
-->background-color: @color
.bgi(@image)
-->background-image: @image
Additional Background Settings:
.bgr(@value)
-->background-repeat: @value
.bgr-no()
-->no-repeat
.bgr-x()
-->repeat-x
.bgr-y()
-->repeat-y
.xtn(@value)
-->transition: @value
& vendor-prefixes.xtn(@time, @function[, @property: all])
--> useful for applying an all transition
.xfm(@value)
-->transform: @value
& vendor-prefixes.rot(@angle)
--> rotate by angle.scl(@factor)
--> scale by factor.skw(@x-angle, @y-angle)
--> skew by x-angle and y-angle.xlt(@x, @y)
--> translate by x,y
Since CSS Transforms will override each other with successive property declarations, we need combos. Combos are chained in alphabetical order (by abbreviation, not function-name).
.rot-scl(@angle, @factor)
.rot-skw(@angle, @x-angle, @y-angle)
.rot-xlt(@angle, @x, @y)