Transcript
Page 1: Doing more with LESS

Doing more with LESSDecember 14, 2010 - DallasPHP

Jake Smith

http://joind.in/talk/view/2478

Page 2: Doing more with LESS

What is LESS?

• Dynamic CSS

• CSS pre-processor

• Leaner/Meaner CSS

• Minified CSS (optional)

Page 3: Doing more with LESS

Other Types of LESS

• SASS (Ruby)

• http://sass-lang.com/

• Scaffold (PHP)

• http://github.com/anthonyshort/Scaffold

• LESSPHP

• http://leafo.net/lessphp/

Page 4: Doing more with LESS

SASS vs. LESS

• Not as native syntax (css) as LESS

• SASS mimics ruby

• SASS.js under development now

• In the end it’s all about preference

Page 5: Doing more with LESS

LESS Features

Page 6: Doing more with LESS

Variables

@base_red: #e20d15;@base_blue: #0067b0;@default_gap: 10px;

Page 7: Doing more with LESS

Importing

@import ‘reset’;@import ‘global.css’;

Page 8: Doing more with LESS

Comments

/* Default CSS Comment */// Easier Commenting!

Page 9: Doing more with LESS

Nested Rules.main { background: #F7F7F7; padding-bottom: 20px; .module { background: #FFF; border: 1px #CCC solid; padding: 10px; } .content { width: 650px; .float_left; .module; .shadow(2px, 2px, 10px, #666); .rounded(10px); .title { background: @base_red; border-bottom: 1px @base_red solid; font-weight: bold; margin-bottom: 1px; padding: 5px; .comments { } } }}

Page 10: Doing more with LESS

Nested Rules (Links)

a { color: #F00; text-decoration: none; &:hover { color: #999; } &:active { color: #666; } &:visited { text-decoration: underline; }}

Page 11: Doing more with LESS

Mixins.float_left { display: inline; float: left;}.float_right { display: inline; float: right;}.header { background: #f7f7f7; border-top: 3px @base_red solid; padding: 15px 0; .logo { .float_left; } .navigation { .float_right; }}

Page 12: Doing more with LESS

Operators

@the-border: 1px;@base-color: #111;

#header { color: @base-color * 3; border-left: @the-border; border-right: @the-border * 2;}

#footer { color: (@base-color + #111) * 1.5;}

Source: http://lesscss.org/

Page 13: Doing more with LESS

Namespacing

#bundle { .button { display: block; border: 1px solid black; background-color: grey; &:hover { background-color: white } } .tab { ... } .citation { ... }}

#header a { color: orange; #bundle > .button;}

Source: http://lesscss.org/docs

Page 14: Doing more with LESS

Rule Sets#defaults { @width: 960px; @color: #333;}

#darkTheme { @color: #FFF;}

.article { color: #294366; }

.comment { width: #defaults[@width]; color: .article['color']; }

Page 15: Doing more with LESS

Scope Variables@default_color: #FFF; // Global Variable#bundle { @default_color: #000; // Scope Variable .button { display: block; border: 1px solid black; background-color: grey; &:hover { background-color: white } } .tab { ... } .citation { ... }}

#header a { color: orange; #bundle > .button;}

Source: http://lesscss.org/docs

Page 16: Doing more with LESS

Built-in Mixins

• saturate(color, amount)

• desaturate(color, amount)

• lighten(color, amount)

• darken(color, amount)

• greyscale(color, amount)

Page 17: Doing more with LESS

LESS Development

Page 18: Doing more with LESS

• Install node.js

• Install NPM (Node Package Manager)

• Install LESS

Environment *nix/OSX

Page 20: Doing more with LESS

LESS App

• Compile CSS from LESS file on save

• Ability to Minify

• Reports error line number for failed compiles

• Growl Notifications

Source: http://incident57.com/less/

Page 21: Doing more with LESS

LESS.js

• 40 times faster than Ruby (gem)

• Caches generated CSS to local storage (newer browsers only)

Page 22: Doing more with LESS

LESS.js Code

<link rel="stylesheet/less" href="/stylesheets/main.less" type="text/css" /><script src="http://lesscss.googlecode.com/files/less-1.0.21.min.js" />

Source: http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-you-need-to-check-out-less-js/

Page 23: Doing more with LESS

Live Watch

• Only do this in development environment!

<script type="text/javascript" charset="utf-8"> less.env = "development"; less.watch();</script>

Source: http://fadeyev.net/2010/06/19/lessjs-will-obsolete-css/

Page 24: Doing more with LESS

TextMate Bundle

• Syntax Highlighting

• On Save, produces parsed CSS

• https://github.com/appden/less.tmbundle

Page 25: Doing more with LESS

LESS Examples

Page 26: Doing more with LESS

Mixins

Page 27: Doing more with LESS

Rounded.roundedExpanded(@radius: 3px, @tl: 0, @tr: 0, @br: 0, @bl: 0) { // Webkit -webkit-border-top-right-radius: @radius + @tr; -webkit-border-top-left-radius: @radius + @tl; -webkit-border-bottom-right-radius: @radius + @br; -webkit-border-bottom-left-radius: @radius + @bl; // Firefox -moz-border-radius-topleft: @radius + @tl; -moz-border-radius-topright: @radius + @tr; -moz-border-radius-bottomright: @radius + @br; -moz-border-radius-bottomleft: @radius + @bl; // Implemented Standard border-top-right-radius: @radius + @tr; border-top-left-radius: @radius + @tl; border-bottom-right: @radius + @br; border-bottom-left: @radius + @bl;}// Basic Rounded Corner.rounded(@radius: 3px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius;}

Page 28: Doing more with LESS

Gradient

.gradient (@start: #ffffff, @end: #EDEDED){ background: @start; background: -webkit-gradient(linear, left top, left bottom, from(@start), to(@end)); background: -moz-linear-gradient(-90deg, @start, @end); filter: %("progid:DXImageTransform.Microsoft.gradient(startColorstr=%d, endColorstr=%d)", @start, @end); /* IE6 & 7 */ -ms-filter: %("progid:DXImageTransform.Microsoft.gradient(startColorstr=%d, endColorstr=%d)", @start, @end); /* IE8 */}

Page 29: Doing more with LESS

Shadow

.shadow(@x: 3px, @y: 3px, @blur: 5px, @color: #333) { box-shadow: @x @y @blur @color; -moz-box-shadow: @x @y @blur @color; -webkit-box-shadow: @x @y @blur @color;}

Page 30: Doing more with LESS

Import (include)

@import 'css3';@import 'buttons';@import 'theme';@import 'reset';

Page 31: Doing more with LESS

Operators@base_font: 24px;@base_color: #5b8cff;

h1 { color: @base_color; font-size: @base_font;}h2 { color: @base_color - #333; font-size: @base_font * 0.8;}h3 { color: @base_color + #333; font-size: @base_font * 0.7;}h4 { color: @base_color + #666; font-size: @base_font * 0.6;}

// Outputh1{color:#5b8cff;font-size:24px;}h2{color:#2859cc;font-size:19.200000000000003px;}h3{color:#8ebfff;font-size:16.799999999999997px;}h4{color:#c1f2ff;font-size:14.399999999999999px;}

Page 32: Doing more with LESS

Grid Layout@unit: @pageWidth / 24; // Grid Margin@gm: 10px; .g(@u: 20px, @margin: @gm, @marginTop: 0, @marginBottom: 0) { // Scope Variables

.gpadding: @gpadding + 0; .gborder: @gborder + 0; display: inline; float: left; margin: @marginTop @margin @marginBottom @margin; width: (@u * @unit) - ((@margin * 2) + @gpadding + @gborder); } .shift(@pu: -20px){ left: @pu * @unit; position: relative; } .newRow { clear: left; }

Source: http://net.tutsplus.com/tutorials/php/how-to-squeeze-the-most-out-of-less/

Page 33: Doing more with LESS

Grid Layout Cont.h1 { .gpadding: 6; .g(6); .header(); } #site-navigation { padding: 0; .g(18, 0); li { background: @color2; padding: @gm / 2;

@gpadding: @gm; .g(3, @gm, @gm); &.selected { background: @color4; } } a { color: #FFF; text-decoration: none; } }

Source: http://net.tutsplus.com/tutorials/php/how-to-squeeze-the-most-out-of-less/

Page 34: Doing more with LESS

With Great Power Comes Great Responsibility

Page 35: Doing more with LESS

Nest for need// Unecessary Nesting.wrapper { section.page { .container { aside { width: 440px; a { display: block; font-size: 0.9em; padding: 3px; text-decoration: none; } } } }}

// Outputs.wrapper section.page .container aside a { display: block; font-size: 0.9em; padding: 3px; text-decoration: none;}

// Could easily and more efficiently beaside a { display: block; font-size: 0.9em; padding: 3px; text-decoration: none;}

Page 36: Doing more with LESS

Gotchas!

• LESS.app is not always using the latest version of LESS.js

• LESS.js is still officially BETA

• Only caches output when live, not local machine (text/less only)

• Chrome local development is broken

Page 38: Doing more with LESS

Questions? Concerns? Complaints?

Page 39: Doing more with LESS

Thanks for listening!Contact Information[t]: @jakefolio[e]: [email protected][w]: http://www.jakefolio.com[irc]: #dallasphp


Top Related