Skip to content

Instantly share code, notes, and snippets.

@simbo
Created May 29, 2013 20:38
Show Gist options
  • Save simbo/5673640 to your computer and use it in GitHub Desktop.
Save simbo/5673640 to your computer and use it in GitHub Desktop.
useful LESS functions
/* =============================================================================
Box-Sizing
========================================================================== */
.box-sizing( @mode ) {
-webkit-box-sizing: @mode;
-moz-box-sizing: @mode;
-ms-box-sizing: @mode;
-o-box-sizing: @mode;
box-sizing: @mode;
}
.border-box() {
.box-sizing( border-box );
}
.content-box() {
.box-sizing( content-box );
}
/* =============================================================================
User-Select
========================================================================== */
.user-select( @mode: none ) {
-webkit-user-select: @mode;
-moz-user-select: @mode;
-ms-user-select: @mode;
-o-user-select: @mode;
user-select: @mode;
}
/* =============================================================================
Tab Size
========================================================================== */
.tab-size( @size: 4 ) {
-moz-tab-size: @size;
-o-tab-size: @size;
tab-size: @size;
}
/* =============================================================================
Opacity
========================================================================== */
.opacity( @value: 1 ) {
-ms-filter: ~`"\"progid:DXImageTransform.Microsoft.Alpha(Opacity="+("@{value}"*100)+")\""`;
filter: ~`"alpha(opacity="+("@{value}"*100)+")"`;
opacity: @value;
}
/* =============================================================================
Border-Radius
========================================================================== */
.border-radius( @radius: 3*@px ) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
-ms-border-radius: @radius;
-o-border-radius: @radius;
border-radius: @radius;
}
/* =============================================================================
Transformations
========================================================================== */
.rotate( @transform ) {
-webkit-transform: rotate(@transform);
-moz-transform: rotate(@transform);
-ms-transform: rotate(@transform);
-o-transform: rotate(@transform);
transform: rotate(@transform);
}
/* =============================================================================
Box-Shadow
========================================================================== */
.box-shadow( @shadow, @more... ) when not ( @more = ~'' ) {
@shadow: ~`"@{arguments}".substr(1,"@{arguments}".length-2)`;
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
-ms-box-shadow: @shadow;
-o-box-shadow: @shadow;
box-shadow: @shadow;
}
.box-shadow( @shadow ) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
-ms-box-shadow: @shadow;
-o-box-shadow: @shadow;
box-shadow: @shadow;
}
/* =============================================================================
Gradients
========================================================================== */
.gradient( @gradient_type, @gradient_direction, @gradient_def... ) {
@gradient: ~`"@{gradient_def}".substr(1,"@{gradient_def}".length-2)`;
@gradient_direction_prefixed:
~`(function(dir){
switch(dir) {
case 'to right': return 'left';
case 'to right bottom': return 'left top';
case 'to right top': return 'left bottom';
case 'farthest-side at center center': return 'center center, farthest-side';
case 'to bottom': default: return 'top';
};
})("@{gradient_direction}".substr(1,"@{gradient_direction}".length-2).split(', ').join(' '))`;
background-image: ~`"-webkit-@{gradient_type}-gradient( @{gradient_direction_prefixed}, @{gradient} )"`; // Chrome10+,Safari5.1+
background-image: ~`"-moz-@{gradient_type}-gradient( @{gradient_direction_prefixed}, @{gradient} )"`; // FF3.6+
background-image: ~`"-ms-@{gradient_type}-gradient( @{gradient_direction_prefixed}, @{gradient} )"`; // IE10+
background-image: ~`"-o-@{gradient_type}-gradient( @{gradient_direction_prefixed}, @{gradient} )"`; // Opera 11.10+
background-image: ~`"@{gradient_type}-gradient( "+"@{gradient_direction}".substr(1,"@{gradient_direction}".length-2).split(', ').join(' ')+", @{gradient} )"`; // W3C
}
.gradient-vertical( @gradient... ) {
.gradient( linear, to bottom, @gradient );
}
.gradient-vertical-repeating( @gradient... ) {
.gradient( repeating-linear, to bottom, @gradient );
}
.gradient-horizontal( @gradient... ) {
.gradient( linear, to right, @gradient );
}
.gradient-horizontal-repeating( @gradient... ) {
.gradient( repeating-linear, to right, @gradient );
}
.gradient-diagonal-down( @gradient... ) {
.gradient( linear, to right bottom, @gradient );
}
.gradient-diagonal-up( @gradient... ) {
.gradient( linear, to right top, @gradient );
}
.gradient-radial( @gradient... ) {
.gradient( radial, farthest-side at center center, @gradient );
}
/* =============================================================================
Function for generating @font-face definition
========================================================================== */
.font-face( @family, @file, @weight: 400, @style: normal ) {
(~"@font-face") {
font-family: @family;
font-weight: @weight;
font-style: @style;
src: url('../fonts/@{file}.eot');
src: url('../fonts/@{file}.eot?#iefix') format('embedded-opentype'),
url('../fonts/@{file}.woff') format('woff'),
url('../fonts/@{file}.ttf') format('truetype');
}
}
/* =============================================================================
Clearfix
========================================================================== */
.clearfix( @selector: '.clearfix' ) {
(~"@{selector}:after,@{selector}:before") {
content: " ";
display: table;
}
(~"@{selector}:after") {
clear: both;
}
(~"@{selector}") {
*zoom: 1;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment