jquery, ecsstender & you [jquery summit 2010]

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

Upload: aaron-gustafson

Post on 27-Jan-2015

137 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 [jQuery Summit 2010]

jQuery,eCSStender you&

Aaron GustafsonEasy Designs, LLCslideshare.net/AaronGustafson

Page 2: jQuery, eCSStender & you [jQuery Summit 2010]

?

Page 3: jQuery, eCSStender & you [jQuery Summit 2010]

?

Page 4: jQuery, eCSStender & you [jQuery Summit 2010]
Page 5: jQuery, eCSStender & you [jQuery Summit 2010]
Page 6: jQuery, eCSStender & you [jQuery Summit 2010]
Page 7: jQuery, eCSStender & you [jQuery Summit 2010]
Page 8: jQuery, eCSStender & you [jQuery Summit 2010]
Page 9: jQuery, eCSStender & you [jQuery Summit 2010]
Page 10: jQuery, eCSStender & you [jQuery Summit 2010]
Page 11: jQuery, eCSStender & you [jQuery Summit 2010]
Page 12: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Download...

eCSStender.org12

Page 13: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Download...

eCSStender.org13

Page 14: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Download...

github.com/easy-designs/eCSStender.js14

Page 15: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

...collect extensions...

15

Page 16: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

...collect extensions...

16

Page 17: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

...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 [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

...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 [jQuery Summit 2010]
Page 20: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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 [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

21

Page 22: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

22

Page 23: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

23

Page 24: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

24

Page 25: jQuery, eCSStender & you [jQuery Summit 2010]
Page 26: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

26

Page 27: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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 [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

28

Page 29: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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 [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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 [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Simplified 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 [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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 [jQuery Summit 2010]
Page 34: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Valid extension of CSS

-prefix-

34

Page 35: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Browser vendors do it

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

35

Page 36: jQuery, eCSStender & you [jQuery Summit 2010]
Page 37: jQuery, eCSStender & you [jQuery Summit 2010]

THE FUTURE OF CSS

Page 38: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

38

Page 39: jQuery, eCSStender & you [jQuery Summit 2010]

Trivia Question:Who were the

co-creators of CSS?

(First person to answer correctly, gets a book)

Page 40: jQuery, eCSStender & you [jQuery Summit 2010]
Page 41: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Step 1: Register extensions

Register

41

Page 42: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Inspect<html>

CSS

Step 2: Find stylesheets

42

Page 43: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Step 3: Collect the rules

CollectCSS

43

Page 44: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Step 4: parse process

Process

&

44

Page 45: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Step 5: Trigger extensions

45

Page 46: jQuery, eCSStender & you [jQuery Summit 2010]
Page 47: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

๏ Dean Edward’s IE scripts

๏ Selectivizr

๏ css3-mediaqueries.js

Helping hands

BrowserPatchers

47

Page 48: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

๏ SASS (Syntactically Awesome Stylesheets)

๏ LESS (Leaner CSS)

๏ OO CSS (purely conceptual)

Alternative syntax

BrowserPatchers

ShorthandParsers

48

Page 49: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

๏ Modernizr

Capability checking

BrowserPatchers

TestingScripts

ShorthandParsers

49

Page 50: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

๏ More CSS

Something new

BrowserPatchers

ShorthandParsers

CustomCSS

Parsers

TestingScripts

50

Page 51: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

๏ jQuery plug-ins

๏ CSS Sandpaper

๏ CVI scripts

Ecosystem

BrowserPatchers

ShorthandParsers

CustomCSS

Parsers

TestingScripts

One-off CSSscripts libraries&

51

Page 52: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Unity!

BrowserPatchers

ShorthandParsers

CustomCSS

Parsers

TestingScripts

One-off CSSscripts libraries&

52

Page 53: jQuery, eCSStender & you [jQuery Summit 2010]

Let’s make something awesome!

I thought you’d never ask.

Page 54: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Pointless, but possible

54

Page 55: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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>

55

Page 56: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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 );};

56

Page 57: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

Step 2: RegistrationeCSStender.register(

);

57

Page 58: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

);

58

Page 59: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

);

59

Page 60: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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; } });

60

Page 61: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

61

Page 62: jQuery, eCSStender & you [jQuery Summit 2010]

I love you you know.

I know.

Page 63: jQuery, eCSStender & you [jQuery Summit 2010]

Does the browser support border-radius?

Nope.

isSupported()

Page 64: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

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

64

Page 65: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

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

65

Page 66: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

66

Page 67: jQuery, eCSStender & you [jQuery Summit 2010]

Can you make myCSS smarter?

Of course.

Page 68: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

68

Page 69: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

69

Page 70: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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 ); } } };

// ...})();

70

Page 71: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

71

Page 72: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

72

Page 73: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

As flexible 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 ); }}

73

Page 74: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

As flexible 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 ); }}

74

Page 75: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

As flexible 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; });

75

Page 76: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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

// ...

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

76

Page 77: jQuery, eCSStender & you [jQuery Summit 2010]

Can you look something up for me?

No problemo.

Page 78: jQuery, eCSStender & you [jQuery Summit 2010]

jQuery, eCSStender & you

jQuery Summit - November 2010

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' }// }, ... ]

78

Page 79: jQuery, eCSStender & you [jQuery Summit 2010]
Page 80: jQuery, eCSStender & you [jQuery Summit 2010]

Help make me better!

MIT Licensed

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

Page 81: jQuery, eCSStender & you [jQuery Summit 2010]

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://flickr.com/photos/aarongustafson/galleries/72157625226185257/

&