8. Start by…
1. Becoming Responsive
• Shift your brain
• Mobile first
• Watch out
• 3 components
• Flexible grid
• Flexible images
• Media queries
• Planning
• 3 or 4-in-one
• Crunch the numbers
8
9. …And end with
2. CSS3
• Getting started
• What’s new
• Rules of the road
• Helping tools and scripts
• Properties
• Standard effects
• Advanced effects
• Selectors
3. Resources
9
24. Flexible Images: Background
Use background-position to selectively crop
your backgrounds
http://goo.gl/YLLC3
24
25. @media queries
@media queries are now being used as a
basis for responsive web design: web
interfaces that change with the size (and
orientation) of the device.
25
26. How do they work?
Through media queries, the browser is served
different styles or stylesheets based on the
dimensions and the device.
The @media construct allows style sheet
rules for various media in the same style
sheet.
An @media rule specifies the target media
types (separated by commas) of a set of
statements (delimited by curly braces).
26
41. What’s New in CSS3?
CSS3 is the third generation of the CSS
specification recommendations from the
W3C.
In CSS3 there are new selectors, pseudo-
elements and classes, properties, and
values specifically created to answer the
needs and solve the problems of modern
web design and development.
41
42. CSS3 Modularity
CSS3 has been broken up into different
unique modules. This means is that, for
example, the particular CSS properties and
values for layout is grouped into one
specific module.
42
43. CSS3 Modularity: Benefits
• Browser producers can now implement
CSS3 module by module
• Speeds up the browser implementation
process
• Encourages innovation
43
44. The CSS3 Modules
• Template Layout • Values and Units
• Backgrounds and Borders • Web Fonts
• Ruby • Behavioral Extensions to CSS
• Basic User Interface • Line Layout
• Basic Box Model • Flexible Box Layout
• Grid Positioning • Image Values
• Speech • 2D Transformations
• Marquee • Multi-column Layout
• Style Attribute Syntax • 3D Transformations
• Cascading and Inheritance • Namespaces
• Color • Transitions
• Fonts • Animations
• Text • View Module
• Generated Content for Paged • Media Queries
Media • Paged Media
• Generated and Replaced • Selectors
Content
44
45. Resources: New in CSS3
http://www.w3.org/TR/tr-groups-all#
tr_Cascading_Style_Sheets__CSS__
Working_Group
45
46. Colors in CSS3: RGB
• Regular RGB
rgb(x, x, x):
ex. rgb(255, 0, 0)
• RBG with alpha-opacity
rgba(x, x, x, y):
An RGB value
ex. rgba(255, 0, 0, 0.2)
46
47. RGBA Color
Alpha opacity:
0.0 = 0% = no opacity
1.0 = 100% = full opacity
47
48. Colors in CSS3: HSL
HSL stands for hue, saturation, and
luminosity (lightness)
• Regular HSL
hsl(x%, x%, x%):
ex. hsl(0, 100%, 50%)
• HSL with alpha-opacity
hsla(x%, x%, x%, y):
ex. hsla(0, 100%, 50%, 0.5)
48
49. HSL Color Wheel
0º – Red
60º – Yellow
120º – Green
180º – Cyan
240º – Blue
300º – Magenta
49
50. HSL Color Picker Tool
http://www.workwithcolor.com/hsl-color-picker-01.htm
50
51. Getting Started with
CSS3:
The Rules of the
Road
51 http://www.flickr.com/photos/ilike/3707503212/
53. The Scoop
• Many properties are browser-specific,
requiring vendor prefixes
• Plus there is a standard property
• There are syntax differences between
browser-specific properties and the
standard property
• All of this causes an increase in the amount
of CSS
53
56. None of the older IEs support CSS3
…as in “not any.”
6 7 8
56 http://www.flickr.com/photos/johnsnape/4258191545/
57. IE9 now supports CSS3
…But still not as fully as
the other browsers
yet.
57
58. Resources: IE9 CSS3 support
http://msdn.microsoft.com/en-
us/ie/ff468705.aspx#_Web_standards_sup
port
http://msdn.microsoft.com/en-
us/library/cc351024%28v=vs.85%29.aspx
http://www.impressivewebs.com/css3-
support-ie9/
58
59. Tools you’ll need:
1. CSS3 Property browser support charts
2. CSS3 Selector browser support charts
3. CSS3 Specifications
4. All browsers to test in and/or
cross-browser testers
59
61. CSS3 Selector browser support charts
http://www.standardista.com/css3/
css3-selector-browser-support
61
62. The CSS3 Specifications
The CSS3 Specifications are THE resource for
finding out exactly is the intented behavior
and use of any given property.
http://www.w3.org/standards/techs/
css#w3c_all
62
66. How do we achieve this?
66 http://www.flickr.com/photos/barretthall/205175534/
67. Steps to get as close as possible
1. Leverage source order
2. Filter it
3. Let tools do all of the work
67
68. Leverage source order
• Place default properties first
• Place browser-specific properties ahead of
standard properties
• The standard properties will override the
vendor’s when the standard is established.
68
70. A Proper Stack
.gradient {
color: #fff;
background: #aaaaaa url(gradient_slice.jpg) 0 0
x-repeat; /*fallback background color & image*/
70
71. A Proper Stack
.gradient {
color: #fff;
background: #aaaaaa url(gradient_slice.jpg) 0 0
x-repeat; /*fallback background color & image*/
background-image: -moz-linear-gradient(top,
#07407c, #aaaaaa); /* gradient for Mozilla */
71
72. A Proper Stack
.gradient {
color: #fff;
background: #aaaaaa url(gradient_slice.jpg) 0 0
x-repeat; /*fallback background color & image*/
background-image: -moz-linear-gradient(top,
#07407c, #aaaaaa); /* gradient for Mozilla */
background-image: -webkit-gradient(linear,left
top,left bottom,color-stop(0, #07407c),color-
stop(1, #aaaaaa)); /* gradient for the Webkits
*/
72
73. A Proper Stack
.gradient {
color: #fff;
background: #aaaaaa url(gradient_slice.jpg) 0 0
x-repeat; /*fallback background color & image*/
background-image: -moz-linear-gradient(top,
#07407c, #aaaaaa); /* gradient for Mozilla */
background-image: -webkit-gradient(linear,left
top,left bottom,color-stop(0, #07407c),color-
stop(1, #aaaaaa)); /* gradient for the Webkits
*/
-ms-filter:
"progid:DXImageTransform.Microsoft.gradient(sta
rtColorStr='#07407c', EndColorStr='#aaaaaa')";
/* filter for IE8 (& IE9) */
73
74. A Proper Stack
.gradient {
color: #fff;
background: #aaaaaa url(gradient_slice.jpg) 0 0
x-repeat; /*fallback background color & image*/
background-image: -moz-linear-gradient(top,
#07407c, #aaaaaa); /* gradient for Mozilla */
background-image: -webkit-gradient(linear,left
top,left bottom,color-stop(0, #07407c),color-
stop(1, #aaaaaa)); /* gradient for the Webkits
*/
-ms-filter:
"progid:DXImageTransform.Microsoft.gradient(sta
rtColorStr='#07407c', EndColorStr='#aaaaaa')";
/* filter for IE8 (& IE9) */
filter:
progid:DXImageTransform.Microsoft.gradient(star
tColorStr='#07407c', EndColorStr='#aaaaaa');
} /* filter for IE7 and lower */
74
75. Apply a Filter
• If you must have the effect in IE lt 8, such as alpha
opacity, gradient, shadow, transitions etc. you
could use a proprietary IE filter.
• The -ms-filter attribute is an extension to CSS.
This syntax will allow other CSS parsers to skip the
value of this unknown property completely and
safely. It also avoids future name clashes with other
CSS parsers.
• In IE 8 mode, filters must be prefixed with "-ms-"
and the PROGID must be in single or double quotes
to make sure IE 8 renders the filters properly.
75
76. Filters: {Caveat Coder}
• IE filters work, but are essentially hacks
– IE filters are proprietary and thus not part of
any standard specification, and never will be
76
77. Resources: IE Filters
Microsoft Visual Filters and Transitions Reference
http://msdn.microsoft.com/en-us/library/
ms532853%28v=VS.85%29.aspx
77
78. Let the tools do the work
• We’ll talk about those next!
78
88. Get a helping hand…
These scripts help IE lt 8 behave like CSS3-
compliant browsers. However, support of
CSS3 properties varies between scripts.
88
94. What does Modernizr do?
Modernizr detects which CSS3 (and HTML5)
properties are supported by the browser,
and appends classes to the <html> tag,
which then allows you to create styles to
target specific properties to individual
browsers.
It is a premier progressive enhancement
tool!
94
95. How to use Modernizr
http://www.alistapart.com/articles/taking-
advantage-of-html5-and-css3-with-
modernizr/
http://webdesignernotebook.com/css/
how-to-use-modernizr
http://www.ericlightbody.com/2010/
modernizr-your-tool-for-html5-and-css3-
functionality/
95
101. @font-face
• Note:
– Actually part of the CSS2.1 specification.
– Therefore, the IEs do support it!
• Tips & issues
– When you decide to use a font as a webfont,
you have to be sure that the EULA supports it.
– One way to avoid that is to use ONLY fonts
that are listed as approved webfonts.
• Browser Support
– IE lt 8 require fonts to be in EOT format
– IE9 now supports WOFF
101
103. @font-face bug: IE lt 8
@font-face super bullet-proofing
The problem:
@font-face doesn’t work, even with the
proper normal syntax. What gives?
103
104. @font-face bug: Webkit
@font-face bold and italics “bug”
The problem:
Applying font-weight:bold or font-
style: italic to @font-face'd text doesn’t
work.
104
108. Webfont Services
Instead of generating the webfonts yourself,
you can pay a service where the webfonts
are hosted elsewhere, and you link to them
and use the fonts on their server.
108
114. border-radius
• Tips & issues
– Different syntax for mozilla, webkit, and
opera browsers
• Browser Support
– IE lt 8 does not support, IE9 does
114
115. border-radius
Syntax comparison breakdown:
• -moz allows multiple values for each position
• -webkit individual values
115
• Standard is like mozilla
116. border-radius
#contentcolumn {
-moz-border-radius: 20px 20px 0 0;
-webkit-border-top-left-radius: 20px;
-webkit-border-top-right-radius: 20px;
border-radius: 20px 20px 0 0;
}
116
121. opacity
• Tips & issues
– Do not use on elements that would cover
important content
• Browser Support
– IE lt 8 does not support
– There is a filter: opacity
121
122. opacity
#feature-meta {
background:none repeat scroll 0 0
#3C4C55;
opacity:0.85;
}
Override for children elements
div.opacity * {opacity: 1.0;}
122
126. rgba
• Tips & issues
– More granular control of the color
opacity of a particular element than
opacity
• Browser Support
– IE lt 8 does not support, IE9 does
– There is an IE filter that will give
transparency with a color.
126
127. Cross-browser: rgba
• Place after regular rgb color property to
override in modern browsers; older
browsers will ignore it
• IE lt 8 bug: use the property background
instead of background-color for the
regular color
127
128. Full solution: rgba
.rgba {
background-color: #ff0000;
/* fallback color in hexidecimal. */
background-color: transparent; /* transparent
is key for the filter to work in IE8. best
done through conditional comments */
background-color: rgba(255, 0, 0, 0.3);
-ms-filter:
"progid:DXImageTransform.Microsoft.gradient
(startColorstr=#4CFF0000,
endColorstr=#4CFF0000)";
/* filter for IE8 */
filter:
progid:DXImageTransform.Microsoft.gradient(
startColorstr=#4CFF0000,
endColorstr=#4CFF0000);
/* filter for older IEs */
}
128
130. box-shadow
• Tips & issues
– Different syntax for mozilla, webkit, and
opera browsers
• Browser Support
– IE lt 8 does not support, IE9 does
– There is a filter for IE: shadow (actually
there are 2: shadow and dropshadow,
but shadow is said to be better)
130
131. box-shadow
.portfolio {
-moz-box-shadow: 0 5px 20px
rgba(0,0,0,0.6);
-webkit-box-shadow: 0 5px 20px
rgba(0,0,0,0.6);
box-shadow: 0 5px 20px rgba(0,0,0,0.6);
}
131
136. text-shadow
• Tips & issues
– Can help accentuate text and improve
readability and visual importance
• Browser Support
– IE lt 8 does not support, nor does IE9 :/
– could use the IE filter: shadow
136
141. gradient
• Tips & issues
– Very different syntax for mozilla and
webkit browsers
• Browser Support
– IE does not support, so will still need a
fallback image for those browsers
141
150. border-image
Borders can now be created using images
and sections thereof for enhanced visual
design.
• Tips & issues
– Documentation on best use is sparse
– No adequate fall-back techniques for graceful
degradation
– Vendor prefixes for Mozilla and webkit
• Browser support
150
– The IEs do not support
155. Multiple backgrounds
• Tips & issues:
– The backgrounds are shown according to the
order listed, with the first background image
listed is the one “on top” and the rest stack
underneath it.
– Can use CSS3 gradients (which are like
background images) in conjunction with
multiple background images.
• Browser support:
– IE lt 8 does not support, but IE9 does
155
159. background-size
You can set the size of a background image and
make sure it covers the entire background of a
page, no matter what the size.
• Tips & Issues:
– Vendor prefixes for mozilla, webkit, and opera
• Browser support:
– IE lt 8 does not support, but IE9 does
159
160. background-size: values
contain
Contain always fits the entire image within your
viewport, leaving opaque borders on either the
top-bottom or the left-right whenever the ratio of
the background image and browser window are
not the same.
cover
Cover always fills the browser window. You can
control how your image is aligned within the
viewport by using the background-position
property.
160
161. background-size
Example:
body { background: #000
url(myBackground_1280x960.jpg) center
center fixed no-repeat;
-moz-background-size: cover;
-webkit-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
161
164. Multiple text columns
You can have one div containing a number of
paragraphs which can be displayed in columns,
with no float or height manipulations.
• Tips & Issues:
– Some of the properties are not widely
supported, and many of the related (like
dividers, breakers, etc.) haven’t been
implemented or aren’t supported yet either.
164
169. transform
• Tips & issues
– Mozilla, Webkit, and Opera vendor
prefixes; no standard yet.
• Browser Support
– IE lt 8 does not support, but IE9 does
169
170. 2D Transformations
Different kinds of transforms:
• rotate
• scale
• skew
• translate
• matrix
170
171. transform/rotate: Syntax
breakdown
The generic syntax for transform is
<-prefix->transform: type(<value>)
type(<value>) type(<value>)
type(<value>);
For rotate specifically, here is the syntax:
<-prefix->transform:
rotate(<value>)
Positive values will rotate the object clockwise to
the right, and negative values will rotate the
171
element counter-clockwise to the left.
180. transition
You can create subtle transitions between
hover states on elements. The transitions
smooth out visual jumps.
• Tips & issues
– Be sure to put the transition effect on the
correct element
180
181. transition
Example:
#id_of_element {
-webkit-transition: all 1s ease-in-out;
-moz-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
transition: all 1s ease-in-out;
}
181
183. Animation
You can create subtle animations in the
browser!
• Tips & issues:
– Plan out the animation sequence ahead of
time
– Be aware of style order in the CSS
183
184. Animation
div {
animation-name: diagonal-slide;
animation-duration: 5s;
animation-iteration-count: 10;
}
@keyframes diagonal-slide {
from { left: 0; top: 0; }
to { left: 100px; top: 100px; }
}
184
187. Getting Advanced
Advanced selectors are a good way to
specifically target styles for modern
browsers.
The right selector will help you achieve
targeting nirvana, so it’s important to know
which selectors you can use now.
187
188. Let’s peek at
1. CSS2 Selectors
• browser support
2. CSS3 Selectors
• browser support
188
190. Advanced Selectors: Usage Tips
• All of the CSS2 selectors are supported by the
modern browsers, and almost all of the CSS3 ones
are, so use them!
• It’s easy to target styles away from the IEs, but
target them to the IEs with simpler combinator
selectors
190
195. Combinator Selectors: Child
• A child selector targets an element that is a child
of another element.
• A child is a direct descendant of an element in the
document tree (as opposed to a more distant
descendant).
Syntax:
parent selector > descendant
selector
E > F
Example:
p > strong {font-family: Tahoma,
195
196. Combinator Selectors:
Sibling/Adjacent
A sibling selector (also known as adjacent) selects
an element that is next to another element in the
document tree.
Syntax:
sibling selector + sibling selector
{property: value; }
E + F
Example:
p + ol {font-family: Georgia,
196 serif;}
197. Combinator Selectors: Attribute
An attribute selector targets a selector with a
particular attribute.
Syntax:
selector[attribute]
Example:
• a[title] {font-variant:
italic;}
197
201. CSS3 Selectors
Advanced selectors give us the power to
target elements that are not part of the
document tree and/or those that are
generated dynamically.
• Tips & issues
– There are a lot of options to choose from!
– Great to use for progressive enhancement
– Need to be aware of changes to specificity
201
202. CSS3 Selector Specification
• General sibling • Pseudo-classes
E~F – Target
• :target
• Attribute substrings
– a[attribute^="value"] – Negation
– a[attribute$="value"] • :not(s)
– a[attribute*="value"]
– State
• Pseudo-elements • :enabled
no new ones, all pseudo-
• :disabled
elements in CSS3
indicated with :: • :checked
• :indeterminate
202
204. Uses for advanced selectors
• Great for progressive enhancement
• Styling first, last or x-number of elements
204
205. Combinator Selectors: General Sibling
A general sibling selector (also known as adjacent)
selects an element that shares the same parent as
another element in the document tree.
Syntax:
sibling selector ~ sibling selector
{property: value; }
E ~ F
Example:
p ~ dd {font-family: Georgia,
205 serif;}
206. Combinator Selectors: Attribute presence
selector[attribute="value"] targets a selector with a
particular attribute and specific value.
Example:
img[src=“catchathief.jpg”] {border:
1px solid #999; }
selector [attribute~="value"] targets a selector with
a particular attribute and value where the value is
one of multiple values separated by a space.
Example
img[alt~="CSI"] {border: 1px
#ff8000 solid;}
206
207. Combinator Selectors: Attribute presence
selector [attribute|="value"] targets an element with an
attribute that contains values separated by a hypen in a
list.
Example:
img[title|="large"] { border: 1px solid
#000; }
207
208. Combinator Selectors: Attribute substrings
selector [attribute^="value"] targets an element
with an attribute that begins with a prefix of
“value”.
Example:
img[title^=“th_"] { border: 1px
solid #000; }
selector [attribute$="value"] targets an element
with an attribute which ends with a suffix of
“value.”
Example:
img[title$=“png"] { border: 1px
208 solid #000; }
209. Combinator Selectors: Attribute substrings
selector [attribute*="value"] targets an element
with an attribute that contains “value” as any
part of a value string.
Example:
img[title*="large"] { border: 1px
solid #000; }
209
211. Pseudo-class: Target
:target targets the target of a url on a page –
most often used for fragment identifiers.
Example:
div.window:target {
opacity: 1;
z-index: 7;
}
211
212. Pseudo-class: Negation
:not targets all elements that are not
indicated. A very useful pseudo-class.
Example:
*:not(img) {text-align: left;}
(This would match all elements except
images.)
212
214. Pseudo-elements: State
The :enabled and :disabled pseudo-classes allow
developers to specify the appearance of user
interface elements (form controls) that are
enabled or disabled, provided that the browser
allows styling of form controls.
Example:
input[type="text"]:enabled {
background:#ffc; }
input[type="text"]:disabled {
background:#ddd; }
214
215. The :checked pseudo-class
The :checked pseudo-class allows developers
to specify the appearance of checked radio
and checkbox elements. Again, this is
provided that the browser allows styling of
form controls.
Example:
input:checked {border:1px solid
#090;}
215
217. The :root pseudo-class
The :root pseudo-class targets the
document’s root element. In HTML, the
root element is always the HTML element.
:root actually has a higher specificity than
html.
Example:
:root { background:#ff0; }
217
218. The :nth-child() pseudo-class
The :nth-child() pseudo-class targets an
element that has a certain number of
siblings before it in the document tree. This
argument, which is placed within the
parentheses, can be a number, a keyword,
or a formula.
A number x matches the x-th child.
Example:
• p:nth-child(3) { color:#f00;
218 }
219. The :nth-child() pseudo-class
The keywords odd and even can be used to match child
elements whose index is odd or even. The index of an
element’s first child is 1, so this rule will match any p
element that is the first, third, fifth, and so on, child of its
parent element.
Example:
p:nth-child(odd) { color:#f00; }
The formula an + b can be used to create more complex
repeating patterns. In the formula, a represents a cycle
size, n is a counter starting at 0, and b represents an
offset value. All values are integers.
Example:
p:nth-child(3n+1) { color:#f00; }
219
220. The :nth-last-child() pseudo-class
The :nth-last-child() pseudo-class works just like the
:nth-child() pseudo-class, except that it targets an
element that has a certain number of siblings
after it in the document tree.
In other words, it starts counting from the last child
instead of the first, and counts backwards.
Example:
tr:nth-last-child(2) {
background:#ff0; }
220
221. The :nth-of-type() pseudo-class
The :nth-of-type() pseudo-class works exactly
like the :nth-child() pseudo-class, but only
counts those elements that are of the same
type as the element the rule is applied to.
Example:
p:nth-of-type(3) {
background:#ff0; }
221
222. The :nth-last-of-type() pseudo-
class
The :nth-last-of-type() pseudo-class targets an
element that has a certain number of siblings of
the same element type after it in the document
tree.
Just like the :nth-last-child() pseudo-class, it starts
counting from the last child instead of the first,
and counts backwards.
Example:
p:nth-last-of-
type(2){background:#ff0;}
222
223. The :last-child pseudo-class
The :last-child pseudo-class targets an
element that is the last child of its parent
element.
It is the same as :nth-last-child(1).
Example:
p:last-child {background:#ff0;}
223
224. The :first-of-type pseudo-class
The :first-of-type pseudo-class targets an
element that is the first sibling of its type.
it is the same as :nth-of-type(1).
Example:
p:first-of-type {
background:#ff0; }
224
225. The :last-of-type pseudo-class
The :last-of-type pseudo-class targets an
element that is the last sibling of its type. it
is the same as :nth-last-of-type(1).
Example
p:last-of-
type{background:#ff0;}
225
226. The :only-of-type pseudo-class
The :only-of-type pseudo-class targets an
element whose parent element has no
other children of the same element type.
It is the same (but with a lower specificity) as
:first-of-type:last-of-type or :nth-of-
type(1):nth-last-of-type(1).
Example:
p:only-of-
type{background:#ff0;}
226
227. The :only-child pseudo-class
The :only-child pseudo-class targets an
element whose parent element has no
other element children.
It is the same (but with a lower specificity) as
:first-child:last-child or :nth-child(1):nth-
last-child(1).
Example:
p:only-child {background:#ff0;}
227
238. This is just the beginning!
My Delicious links are HUGE compendia of all
things related to CSS3, updated as I find
new articles, resources and tools!
http://delicious.com/denisejacobs/css3
http://delicious.com/denisejacobs/
css3training
238
239. Books are not for
the old-fashioned…
239 http://upload.wikimedia.org/wikipedia/commons/e/e2/New_York_State_Library_1900.jpg
240. CSS3, hot off the presses!
The Book of CSS3
240 by Peter Gasston