jquery, ecsstender & you [devchatt 2011]

83
jQuery, eCSStender you & Aaron Gustafson Easy Designs, LLC slideshare.net/AaronGustafson

Upload: aaron-gustafson

Post on 27-Jan-2015

106 views

Category:

Technology


1 download

DESCRIPTION

Say goodbye to the browser-specific properties and hacks cluttering your files and say hello to lean, mean CSS. With eCSStender, when you write the rules, browsers pay attention. In this session, Aaron Gustafson discusses: * Why Web designers would love eCSStender * How eCSStender works * How extensions can be implemented; and * How to build extensions using jQuery

TRANSCRIPT

Page 1: jQuery, eCSStender & You [DevChatt 2011]

jQuery,eCSStender you&

Aaron GustafsonEasy Designs, LLCslideshare.net/AaronGustafson

Page 2: jQuery, eCSStender & You [DevChatt 2011]

?

Page 3: jQuery, eCSStender & You [DevChatt 2011]

?

Page 4: jQuery, eCSStender & You [DevChatt 2011]
Page 5: jQuery, eCSStender & You [DevChatt 2011]
Page 6: jQuery, eCSStender & You [DevChatt 2011]
Page 7: jQuery, eCSStender & You [DevChatt 2011]
Page 8: jQuery, eCSStender & You [DevChatt 2011]
Page 9: jQuery, eCSStender & You [DevChatt 2011]
Page 10: jQuery, eCSStender & You [DevChatt 2011]
Page 11: jQuery, eCSStender & You [DevChatt 2011]
Page 12: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Download...

eCSStender.org12

Page 13: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Download...

eCSStender.org13

Page 14: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Download...

github.com/easy-designs/eCSStender.js14

Page 15: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

...collect extensions...

15

Page 16: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

...collect extensions...

16

Page 17: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

...include...<script type="text/javascript" src="eCSStender.js"></script><script type="text/javascript" src="eCSStender.CSS3-backgrounds-and-borders.js"></script><script type="text/javascript" src="eCSStender.CSS3-transforms.js"></script><script type="text/javascript" src="eCSStender.CSS3-color.js"></script><script type="text/javascript" src="eCSStender.CSS3-transitions.js"></script>

17

Page 18: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

...and write your CSSsection,article,blockquote { border-radius: 10px; box-shadow: 0 0 15px 1px #000; color: rgb(255, 255, 255); transform-origin: 50% 50%; transition: all 0.5s linear;}section:hover,body:focus section,section:hover blockquote,body:focus blockquote { transform: rotate(-15deg);}section:hover article,body:focus article { transform: rotate(30deg);}

18

Page 19: jQuery, eCSStender & You [DevChatt 2011]
Page 20: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Need selectors?<script type="text/javascript" src="eCSStender.js"></script><script type="text/javascript" src="sizzle.js"></script><script type="text/javascript"> // <![CDATA[ eCSStender.addMethod('findBySelector',Sizzle); // ]]></script><script type="text/javascript" src="eCSStender.CSS3-selectors.js"></script>

20

Page 21: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Compound classes in IE6?p.test { color: green;}p.alt.test { color: red;}

21

Page 22: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Adjacent siblings?p + p { color: green;}

22

Page 23: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

General siblings?p ~ p { color: green;}

23

Page 24: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Advanced pseudo-classes?tr { background: white;}td:empty { background: green;}

24

Page 25: jQuery, eCSStender & You [DevChatt 2011]
Page 26: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Consider border-radius#foo { border-radius: 3px;}

26

Page 27: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Consider border-radius#foo { -moz-border-radius: 3px; -webkit-border-radius: 3px; -o-border-radius: 3px; -khtml-border-radius: 3px; border-radius: 3px;}

27

Page 28: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Consider border-radius#foo { border-radius: 10px 5px;}

28

Page 29: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Consider border-radius#foo { -moz-border-radius: 10px 5px; -webkit-border-top-left-radius: 10px; -webkit-border-top-right-radius: 5px; -webkit-border-bottom-right-radius: 10px; -webkit-border-bottom-left-radius: 10px; -o-border-radius: 10px 5px; -khtml-border-top-left-radius: 10px; -khtml-border-top-right-radius: 5px; -khtml-border-bottom-right-radius: 10px; -khtml-border-bottom-left-radius: 10px; border-radius: 10px 5px;}

29

Page 30: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Ah, memories...#foo { padding: 10px; width: 200px; w\idth: 180px; height: 200px; heigh\t: 180px;}

/* or */

#foo { padding: 10px; width: 200px; height: 200px;}* html #foo { width: 180px; height: 180px;}

30

Page 31: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Simpli!ed CSS3?<script type="text/javascript" src="eCSStender.js"></script><script type="text/javascript" src="eCSStender.CSS3-backgrounds-and-borders.js"></script><script type="text/javascript" src="eCSStender.CSS3-transforms.js"></script><script type="text/javascript" src="eCSStender.CSS3-color.js"></script><script type="text/javascript" src="eCSStender.CSS3-transitions.js"></script>

31

Page 32: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Yup!section,article,blockquote { border-radius: 10px; box-shadow: 0 0 15px 1px #000; color: rgb(255, 255, 255); transform-origin: 50% 50%; transition: all 0.5s linear;}section:hover,body:focus section,section:hover blockquote,body:focus blockquote { transform: rotate(-15deg);}section:hover article,body:focus article { transform: rotate(30deg);}

32

Page 33: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Yup!section,article,blockquote { border-radius: 10px; box-shadow: 0 0 15px 1px #000; color: rgb(255, 255, 255); transform-origin: 50% 50%; transition: all 0.5s linear;}section:hover,body:focus section,section:hover blockquote,body:focus blockquote { transform: rotate(-15deg);}section:hover article,body:focus article { transform: rotate(30deg);}

32

Page 34: jQuery, eCSStender & You [DevChatt 2011]
Page 35: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Valid extension of CSS

-prefix-

34

Page 36: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Browser vendors do it

-webkit--moz- -o--ms-

35

Page 37: jQuery, eCSStender & You [DevChatt 2011]
Page 38: jQuery, eCSStender & You [DevChatt 2011]

THE FUTURE OF CSS

Page 39: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Pointless, but possible.bowling-alley img { -easy-physics-fill: lead;}.beach img { -easy-physics-fill: rubber;}.disney img { -easy-physics-fill: helium;}

38

Page 40: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Pointless, but possible.bowling-alley img { -easy-physics-fill: lead;}.beach img { -easy-physics-fill: rubber;}.disney img { -easy-physics-fill: helium;}

38

Page 41: jQuery, eCSStender & You [DevChatt 2011]
Page 42: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 1: Register extensions

Register

40

Page 43: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Inspect<html>

CSS

Step 2: Find stylesheets

41

Page 44: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 3: Collect the rules

CollectCSS

42

Page 45: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 4: parse process

Process

&

43

Page 46: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 5: Trigger extensions

44

Page 47: jQuery, eCSStender & You [DevChatt 2011]
Page 48: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

๏ Dean Edward’s IE scripts

๏ Selectivizr

๏ css3-mediaqueries.js

Helping hands

BrowserPatchers

46

Page 49: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

๏ SASS (Syntactically Awesome Stylesheets)

๏ LESS (Leaner CSS)

๏ OO CSS (purely conceptual)

Alternative syntax

BrowserPatchers

ShorthandParsers

47

Page 50: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

๏ Modernizr

Capability checking

BrowserPatchers

TestingScripts

ShorthandParsers

48

Page 51: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

๏ More CSS

Something new

BrowserPatchers

ShorthandParsers

CustomCSS

Parsers

TestingScripts

49

Page 52: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

๏ jQuery plug-ins

๏ CSS Sandpaper

๏ CVI scripts

Ecosystem

BrowserPatchers

ShorthandParsers

CustomCSS

Parsers

TestingScripts

One-off CSSscripts libraries&

50

Page 53: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Unity!

BrowserPatchers

ShorthandParsers

CustomCSS

Parsers

TestingScripts

One-off CSSscripts libraries&

51

Page 54: jQuery, eCSStender & You [DevChatt 2011]

Let’s make something awesome!

I thought you’d never ask.

Page 55: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Pointless, but possible

53

Page 56: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 1: Dependencies<script type="text/javascript" src="eCSStender.js"></script><script type="text/javascript" src="jquery.js"></script><script type="text/javascript" src="jquery.EasyPhysics.js"></script>

54

Page 57: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 1: Dependencies// jquery.EasyPhysics.jsEasyPhysics.Balloon = function( el ) { new PhysicalObject( el, // element 0, // velocity -0.5, // kinetic energy -0.1 // gravitational effect );};EasyPhysics.RubberBall = function( el ) { new PhysicalObject( el, 0, -0.8, 0.5 );};EasyPhysics.BowlingBall = function( el ) { new PhysicalObject( el, 1, -0.4, 0.9 );};

55

Page 58: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 2: RegistrationeCSStender.register(

);

56

Page 59: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 2: RegistrationeCSStender.register( { property: '-easy-physics-fill', fingerprint: 'net.easy-designs.-easy-physics' },

);

57

Page 60: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 2: RegistrationeCSStender.register( { property: '-easy-physics-fill', fingerprint: 'net.easy-designs.-easy-physics' }, false,

);

58

Page 61: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Step 2: RegistrationeCSStender.register( { property: '-easy-physics-fill', fingerprint: 'net.easy-designs.-easy-physics' }, false, function( selector, properties ){ var $el = $(selector); switch ( properties['-easy-physics-fill'] ) { case 'helium': new EasyPhysics.Balloon( $el ); break; case 'rubber': new EasyPhysics.RubberBall( $el ); break; case 'lead': new EasyPhysics.BowlingBall( $el ); break; } });

59

Page 62: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Pointless, but possible.bowling-alley img { -easy-physics-fill: lead;}.beach img { -easy-physics-fill: rubber;}.disney img { -easy-physics-fill: helium;}

60

Page 63: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Pointless, but possible.bowling-alley img { -easy-physics-fill: lead;}.beach img { -easy-physics-fill: rubber;}.disney img { -easy-physics-fill: helium;}

60

Page 64: jQuery, eCSStender & You [DevChatt 2011]

I love you you know.

I know.

Page 65: jQuery, eCSStender & You [DevChatt 2011]

Does the browser support border-radius?

Nope.

isSupported()

Page 66: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

isSupported()eCSStender.isSupported( 'property', 'visibility: hidden');// true

eCSStender.isSupported( 'property', 'foo: bar');// false

63

Page 67: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

isSupported()eCSStender.isSupported( 'property', 'visibility', 'hidden');// true

eCSStender.isSupported( 'property', 'color', ['#000000','black','rgb(0,0,0)']);// true

64

Page 68: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

isSupported()varel = document.createElement('b'),html = document.createElement('p');html.appendChild(el);

eCSStender.isSupported( 'selector', 'p b', html, el);// true

eCSStender.isSupported( 'selector', 'p ?? b', html, el);// false

65

Page 69: jQuery, eCSStender & You [DevChatt 2011]

Can you make myCSS smarter?

Of course.

Page 70: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

Inline style sucks...<div style="display: none;"> <p>Some content</p></div>

67

Page 71: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

...don’t do it!<div style="display: none;"> <p>Some content</p></div>

68

Page 72: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

makeUniqueClass()

excerpt from :checked CSS3 Selectors extensiongithub.com/easy-designs/eCSStender.CSS3-selectors.js

(function(){ var e = eCSStender, the_class = e.makeUniqueClass(), the_regex = /:checked/, classify = function() { var inputs = document.getElementsByTagName('input'), i = inputs.length; while ( i-- ) { if ( inputs[i].checked ) { e.addClass( inputs[i], the_class ); } else { e.removeClass( inputs[i], the_class ); } } };

// ...})();

69

Page 73: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

embedCSS()eCSStender.embedCSS( 'p { color: red; }', 'screen', false);// embeds the rule set in a// screen-specific stylesheet immediately

70

Page 74: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

applyWeightedStyle()eCSStender.applyWeightedStyle( el, { 'visibility': 'hidden' }, 10 );// el now has visibility: hidden set// with a specificity of 10

eCSStender.applyWeightedStyle( el, { 'visibility': 'visible' }, 1 );// el is not set to visible because // the specificity is not high enough

eCSStender.applyWeightedStyle( el, { 'visibility': 'visible' }, 10 );// el is now “visible” because the specificity// is equal to the prior specificity

eCSStender.applyWeightedStyle( el, { 'visibility': 'hidden' }, 100 );// el is now “hidden” again because the// specificity is greater than the prior one

71

Page 75: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

excerpt from CSS3 Selectors extensiongithub.com/easy-designs/eCSStender.CSS3-selectors.js

As "exible as possiblefunction embed( selector, properties, medium ){ var style_block = '', prop; for ( prop in properties ) { if ( eCSStender.isInheritedProperty( properties, prop ) ) { continue; }; style_block += prop + ':' + properties[prop] + ';'; } if ( style_block != EMPTY ) { eCSStender.embedCSS( selector + '{' + style_block + '}', medium ); }}

72

Page 76: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

excerpt from CSS3 Selectors extensiongithub.com/easy-designs/eCSStender.CSS3-selectors.js

As "exible as possiblefunction inline( selector, properties, medium, specificity ) { if ( medium != 'screen' ){ return; } try { var $els = $( selector ), i = $els.length; while ( i-- ) { eCSStender.applyWeightedStyle( $els[i], properties, specificity ); } $els = null; } catch(e) { // throw new Error( LIB_ERROR + selector ); }}

73

Page 77: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

excerpt from :checked CSS3 Selectors extensiongithub.com/easy-designs/eCSStender.CSS3-selectors.js

As "exible as possibleeCSStender.register( // ... function( selector, properties, medium, specificity ) { var calc = 'p:nth-child(2n+1)', d = div.cloneNode(true), p = para.cloneNode(true), func = inline; d.appendChild( p ); // embedding is the way to go if ( ( eCSStender.isSupported( 'selector', 'p:nth-child(odd)', d, p ) && ! eCSStender.isSupported( 'selector', calc, d, p ) && selector.match( /:nth-child\(\s*(?:even|odd)\s*\)/ ) != null ) || eCSStender.isSupported( 'selector', calc, d, p ) ) { func = embed; } func( selector, properties, medium, specificity ); return func; });

74

Page 78: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

addRules()var style = eCSStender.embedCSS( 'p { color: red; }', 'screen', false);

// ...

eCSStender.addRules( style, 'p { color: blue; }');

75

Page 79: jQuery, eCSStender & You [DevChatt 2011]

Can you look something up for me?

No problemo.

Page 80: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender & you

DevChatt - June 2011

lookup()var matches = eCSStender.lookup( { selector: 'h1', specificity: { min: 0, max: 2 } }, '*');// looks for rules where the// selector includes an h1 and the// specificity is between 0 and 2// e.g.// [ { medium: 'all' // selector: 'h1',// specificity: 1// properties: { color: 'red' }// }, ... ]

77

Page 81: jQuery, eCSStender & You [DevChatt 2011]
Page 82: jQuery, eCSStender & You [DevChatt 2011]

Help make me better!

MIT Licensed

Fork: github.com/easy-designs/eCSStender.jsDiscuss: groups.google.com/group/ecsstender

Page 83: jQuery, eCSStender & You [DevChatt 2011]

jQuery, eCSStender youby Aaron Gustafson

Slides available athttp://slideshare.net/AaronGustafson

This presentation is licensed underCreative Commons

Attribution-Noncommercial-Share Alike 3.0

More on eCSStender:http://eCSStender.org

@eCSStender

flickr Photo Credits“Everyone loves books but I thought this was the

dullest photo i had ever taken. I guess not.“ by boltron-“Sharing” by bengrey

“Three wise monkeys” by Anderson Mancini“Chemcraft manual” by underwhelmer

“crawfordmarketcarrotman” by Rigmarole“Röck!! on the right” by Adactio

“Internals” by alexsnaps“Wood” by Joost J. Bakker IJmuiden

“Tribute to Willy Puchner's ‘The Penguins Longing’” by Curnenhttp://!ickr.com/photos/aarongustafson/galleries/72157625226185257/

&