Slide 1
GROWNUPS
Andy Hume
MATURING BEST PRACTISES
CSS FOR
Saturday, 10 March 2012
SXSW interactive, 2012
Slide 2
Front-enders shouldn't be a
!
aid to say they
"program". CSS is cons
"
aint programming
and not respec
ng JS in 2011 is just iggnant
[sic]
.
Alex Russell
Saturday, 10 March 2012
https://twitter.com/slightlylate/status/141681624134844416
Slide 3
BEGINNING
IN THE
Saturday, 10 March 2012
Slide 4
Web Standards movement
Saturday, 10 March 2012
http://www.flickr.com/photos/mariachily/4149054961/
Slide 5
<table>
<tr><td><img src=
"spacer.gif"
><img
src=
"spacer.gif"
></td></tr>
<tr><td><font face=
"arial,sans-serif"
size=
"4"
color=
"red"
><b>
Error
</
font><br><br></b></td></tr>
<tr><td><img src=
"spacer.gif"
></td></
tr>
</table>
Saturday, 10 March 2012
Slide 6
<p class=
"error"
>
Error
</p>
Saturday, 10 March 2012
Slide 7
The power of CSS
Saturday, 10 March 2012
http://www.csszengarden.com
Separation of concerns
Slide 8
Web Standards Obsession
Saturday, 10 March 2012
Slide 9
Every
me you need to add a class or id for a
s
$
le hook, put a pound/dollar in a jar.
#malarkeyspro
ps
Andy Clarke, 2011
Saturday, 10 March 2012
https://twitter.com/malarkey/status/70161540254416896
Slide 10
.social li:nth-child(1)
{
background-image
:
url
(twitter.png);
}
.social li:nth-child(2)
{
background-image
:
url
(facebook.png);
}
.social li:nth-child(3)
{
background-image
:
url
(linkedin.png);
}
Saturday, 10 March 2012
Slide 11
.social .twitter
{
background-image
:
url
(twitter.png);
}
.social .facebook
{
background-image
:
url
(facebook.png);
}
.social .linkedin
{
background-image
:
url
(linkedin.png);
}
Saturday, 10 March 2012
Slide 12
Saturday, 10 March 2012
http://www.flickr.com/photos/dippy_duck/2685596185/
Network Effects
Managing complexity
Slide 13
.product-list li a
{
}
Saturday, 10 March 2012
http://www.flickr.com/photos/dippy_duck/2685596185/
Network Effects
Managing complexity
Slide 14
.product-list li a
{
}
.product-list li a
{
display
:
block
;
padding
:
0.5em 0.23em
;
color
:
#54FE87
;
background-color
:
#CCC
;
text-shadow
:
#6374AB 20px -12px 2px
;
}
Saturday, 10 March 2012
http://www.flickr.com/photos/dippy_duck/2685596185/
Network Effects
Managing complexity
Slide 15
Saturday, 10 March 2012
http://www.flickr.com/photos/dippy_duck/2685596185/
With great power...
Slide 16
Saturday, 10 March 2012
http://www.flickr.com/photos/banspy/3843960604/
Constraints are good
Slide 17
Nobody is really smart enough to program
compu
%
rs.
Steve McConnell
Saturday, 10 March 2012
http://www.flickr.com/photos/banspy/3843960604/
Constraints are good
Code Complete 2, Microsoft Press, 2004
Slide 18
#side-bar a
{
color
:
green
!important
;
}
Saturday, 10 March 2012
Slide 19
Nobody is really smart enough to s
$
le web
pages.
Andy Hume
Saturday, 10 March 2012
http://www.flickr.com/photos/banspy/3843960604/
Constraints are good
SXSWi, 2012
Slide 20
‘Code quality’
CORRECTNESS
PERFORMANCE
REUSABILITY
TESTABILITY
RELIABILITY
EXTENSIBILITY
WEB 2.0 COMPLIANT
Saturday, 10 March 2012
Slide 21
Optimize for change
Saturday, 10 March 2012
http://www.flickr.com/photos/anandham/4499539060/
Slide 22
261 declarations of Facebook
blue
Saturday, 10 March 2012
http://www.slideshare.net/stubbornella/our-best-practices-are-killing-us
261 declarations of Facebook blue
Slide 23
Very few people (only professional designers, it
seems) wri
%
s
$
le sheets longer than a
hundred lines.
Bert Bos, 2008
Saturday, 10 March 2012
http://www.w3.org/People/Bos/CSS-variables
Slide 24
Sass
http://sass-lang.com
LESS
http://lesscss.org
/
Stylus
http://learnboost.github.com/stylus/
Saturday, 10 March 2012
Slide 25
OOCSS
http://oocss.org
SMACSS
http://smacss.com
CSS Lint
http://csslint.net
Saturday, 10 March 2012
Slide 26
EXAMPLES
Saturday, 10 March 2012
Slide 27
Layers of CSS
HTML DOCUMENT
DOCUMENT
Saturday, 10 March 2012
Slide 28
Layers of CSS
BASE STYLES
HTML DOCUMENT
DOCUMENT
BASE
Saturday, 10 March 2012
Slide 29
Layers of CSS
BASE STYLES
MODULE STYLES
HTML DOCUMENT
DOCUMENT
BASE
MODULE
Saturday, 10 March 2012
Slide 30
Layers of CSS
BASE STYLES
LAYOUT STYLES
MODULE STYLES
HTML DOCUMENT
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 31
.green
{
color
:
green
;
}
Saturday, 10 March 2012
Slide 32
.green
{
color
:
red
;
}
Saturday, 10 March 2012
Slide 33
.promo-box
{
color
:
red
;
background
:
black
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 34
.promo-box
{
color
:
red
;
background
:
black
;
}
.promo-box h3
{
font-size
:
1.2em
;
text-transform
:
uppercase
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 35
.promo-box
{
color
:
red
;
background
:
black
;
}
.promo-box h3,
.promo-box h4
{
font-size
:
1.2em
;
text-transform
:
uppercase
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 36
.promo-box
{
color
:
red
;
background
:
black
;
}
.promo-box .promo-box-h
{
font-size
:
1.2em
;
text-transform
:
uppercase
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 37
!! headings
Saturday, 10 March 2012
Slide 38
h1
{
font-size
:
3em
; }
h2
{
font-size
:
2.3em
; }
h3
{
font-size
:
2.1em
; }
h4
{
font-size
:
1.8em
; }
h5
{
font-size
:
1.3em
; }
h6
{
font-size
:
1.1em
; }
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 39
.h1
{
font-size
:
3em
; }
.h2
{
font-size
:
2.3em
; }
.h3
{
font-size
:
2.1em
; }
.h4
{
font-size
:
1.8em
; }
.h5
{
font-size
:
1.3em
; }
.h6
{
font-size
:
1.1em
; }
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 40
.h-headline
{
font-size
:
3em
; }
.h-subheadline
{
font-size
:
2.3em
; }
.h-byline
{
font-size
:
2.1em
; }
.h-standfirst
{
font-size
:
1.8em
; }
.h-related
{
font-size
:
1.3em
; }
.h-promo
{
font-size
:
1.1em
; }
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 41
!! lists
Saturday, 10 March 2012
Slide 42
ul.product-list li
{
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 43
.product-list li
{
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 44
.product-item
{
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 45
<ul>
<li class=
"product-item"
>
Prod 1
</li>
<li class=
"product-item"
>
Prod 2
</li>
<li class=
"product-item"
>
Prod 3
</li>
<li class=
"product-item"
>
Prod 4
</li>
<li class=
"product-item"
>
Prod 5
</li>
</ul>
Saturday, 10 March 2012
Slide 46
<p class=
"product-item"
>
Prod 1
</p>
...
<div class=
"product-item"
>
<h4 class=
"product-item-h"
>
Prod 1
</h4>
<p>
Details about product
</p>
</div>
...
<section class=
"product-item"
>
<h2 class=
"product-item-h"
>
Prod 1
</h2>
<p>
Details about product
</p>
</section>
Saturday, 10 March 2012
Slide 47
.product-list li,
.product-item
{
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 48
!! module variants
Saturday, 10 March 2012
Slide 49
.promo-box
{
color
:
red
;
background
:
black
;
}
#sidebar .promo-box
{
background
:
white
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 50
.promo-box
{
color
:
red
;
background
:
black
;
}
.promo-box-light
{
background
:
white
;
}
<div class=
"promo-box promo-box-light"
></
div>
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 51
.promo-box
{
color
:
red
;
background
:
black
;
}
.promo-box--light
{
background
:
white
;
}
<div class=
"promo-box promo-box--light"
></
div>
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 52
!! page specific styles
Saturday, 10 March 2012
Slide 53
.promo-box
{
color
:
red
;
background
:
black
;
}
.product-page .promo-box
{
color
:
green
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 54
.promo-box
{
color
:
red
;
background
:
black
;
}
.product-page .promo-box,
.home-page .promo-box,
.about-page .promo-box,
.tag-page .promo-box
{
color
:
green
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 55
.promo-box
{
color
:
red
;
background
:
black
;
}
.promo-box .promo-box-eco
{
color
:
green
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 56
!! media queries
Saturday, 10 March 2012
Slide 57
.promo-box input[type=text]
{
display
:
block
;
}
@media
screen
and
(min-width: 20em)
{
.promo-box input[type=text]
{
display
:
inline
;
}
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 58
Fontdeck forms
Saturday, 10 March 2012
https://fontdeck.com/register
Slide 59
.promo-box input[type=text]
{
display
:
block
;
}
.promo-box
@
(min-width: 20em)
{
input[type=text]
{
display
:
inline
;
}
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 60
.promo-box input[type=text]
{
display
:
block
;
}
.promo-box
@
(min-width: 20em)
{
input[type=text]
{
display
:
inline
;
}
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 61
.promo-box input[type=text]
{
display
:
inline
;
}
.promo-box.narrow input[type=text]
{
display
:
block
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 62
.promo-box input[type=text]
{
display
:
inline
;
}
.promo-box.narrow input[type=text]
{
display
:
block
;
}
DOCUMENT
BASE
MODULE
LAYOUT
Saturday, 10 March 2012
Slide 63
Selector Queries
https://github.com/ahume/selector-queries
<div data-squery=
"max-width:400px=narrow"
>
<p>
Content here
</p>
</div>
Saturday, 10 March 2012
Slide 64
Selector Queries
https://github.com/ahume/selector-queries
<div data-squery=
"max-width:400px=narrow"
>
<p>
Content here
</p>
</div>
Saturday, 10 March 2012
Slide 65
Selector Queries
https://github.com/ahume/selector-queries
<div data-squery=
"max-width:400px=narrow"
>
<p>
Content here
</p>
</div>
Saturday, 10 March 2012
Slide 66
Selector Queries
https://github.com/ahume/selector-queries
<div data-squery=
"max-width:400px=narrow"
>
<p>
Content here
</p>
</div>
Saturday, 10 March 2012
Slide 67
Selector Queries
https://github.com/ahume/selector-queries
var
e
=
document
.querySelectorAll(
".promo-box"
);
SelectorQueries.
add
(e,
"min-width"
,
"30em"
,
"wide"
);
Saturday, 10 March 2012
Slide 68
!! presentational class names
Saturday, 10 March 2012
Slide 69
Surgical layout helpers
.margin-top
{
margin-top
:
8px
;
}
.margin-bottom
{
margin-bottom
:
8px
;
}
Saturday, 10 March 2012
Slide 70
<div class=
"promo-box margin-top"
>
Module content
</div>
Surgical layout helpers
Saturday, 10 March 2012
Slide 71
.gutter-left
{
padding-left
:
8px
;
}
.gutter-right
{
padding-right
:
8px
;
}
Surgical layout helpers
Saturday, 10 March 2012
Slide 72
<div class=
"gutter-left gutter-right"
>
<div class=
"promo-box"
>
Module content
</div>
</div>
Surgical layout helpers
Saturday, 10 March 2012
Slide 73
!! extra non-semantic elements
Saturday, 10 March 2012
Slide 74
Background icons
<p class=
"icon icon-comment"
>
23 Comments
</
p>
.icon
{
background-image
:
url
(icons.png);
}
.icon-comment
{
background-position
:
0 -30px
;
}
Saturday, 10 March 2012
Slide 75
Background icons
<p><i class=
"icon icon-comment"
></i>
23
Comments
</p>
.icon
{
background-image
:
url
(icons.png);
}
.icon-comment
{
background-position
:
0 -30px
;
}
Saturday, 10 March 2012
Slide 76
<p><i class=
"icon icon-comment"
></i>
23
Comments
</p>
<a><i class=
"icon icon-comment"
></
i>
Comment
</a>
Saturday, 10 March 2012
Slide 77
STYLEGUIDES
DOCS
!
Saturday, 10 March 2012
Slide 78
Saturday, 10 March 2012
BBC Global Experience Language
http://www.bbc.co.uk/gel
Slide 79
Saturday, 10 March 2012
http://twitter.github.com/bootstrap/
Documenting base styles
Slide 80
Saturday, 10 March 2012
Documenting base styles
http://paulrobertlloyd.com/about/styleguide/
Slide 81
Saturday, 10 March 2012
Documenting base styles
http://paulrobertlloyd.com/about/styleguide/
Slide 82
Saturday, 10 March 2012
Documenting layout styles
Slide 83
Saturday, 10 March 2012
http://www.flickr.com/photos/banspy/3843960604/
Module library
Slide 84
Saturday, 10 March 2012
http://www.flickr.com/photos/banspy/3843960604/
Module library
Slide 85
The benefits
Saturday, 10 March 2012
Slide 86
Client-side developers
http://goo.gl/xq76e
Software developers
http://goo.gl/Fj9DP
Saturday, 10 March 2012
Slide 87
Thank-you!
cc
Saturday, 10 March 2012
http://lanyrd.com/spmqc
@andyhume
Creative Commons Licensed
Attribution, Non-Commercial, Share Alike