73
Advanced Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) http://www.quirksmode.org VTM Conference, Oct. 24th, 2007

Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Embed Size (px)

Citation preview

Page 1: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Advanced Design Techniques: JavaScript to the Rescue

Peter-Paul Koch (ppk)http://www.quirksmode.orgVTM Conference, Oct. 24th, 2007

Page 2: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

1998

Page 3: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

if (browser == 'Netscape') document.write

('<body background=”pix/bg_nn.gif”>');

else if (browser == 'IE') document.write

('<body background=”pix/bg_ie.gif”>');

<noscript><body background=”pix/bg_nn.gif”></noscript>

Page 4: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

if (browser == 'Netscape') document.write

('<body background=”pix/bg_nn.gif”>');

else if (browser == 'IE') document.write

('<body background=”pix/bg_ie.gif”>');

<noscript><body background=”pix/bg_nn.gif”></noscript>

Maybe this isn't such a good ideaafter all.(Still, the principle remains valid.)

Page 5: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Fast forward to 2007

Page 6: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Using JavaScriptresponsibly

to plug a few holesin browsers' CSS

support

Page 7: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Zebra Lists

Page 8: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li:nth-child(even) {background-color: #00cc00;

}

Opera: YesIE: NoFirefox: NoSafari: No

Page 9: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

<ul id=”navigation”><li><a href=”#”>My books</a></li><li><a href=”#”>Other books</a></li>

</ul>

<p>Titles</p><ul>

<li>PPK on JavaScript</li><li>Designing with Web Standards<li><li>Bulletproof Web Design</li>

</ul>

Page 10: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

<ul id=”navigation”><li><a href=”#”>My books</a></li><li><a href=”#”>Other books</a></li>

</ul>

<p>Titles</p><ul class=”zebra”>

<li>PPK on JavaScript</li><li>Designing with Web Standards<li><li>Bulletproof Web Design</li>

</ul>

Page 11: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Rule #1Use hooks to indicate which HTML elements should be affected.Typical hooks:● id● class

Page 12: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

var lists = getElementsByTagNames('ol,ul');

for (var i=0,list;list=lists[i];i++) {

if (list.className != 'zebra') continue;

var lis = list.getElementsByTagName('li');

for (var j=0;j<lis.length;j+=2) {

lis[j].style.backgroundColor = '#00cc00';

}

}

Page 13: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

What if JavaScript is not supported?

Users won't see the zebra listbut they don't know it's supposed to be there,and the effect is not vital, anyway.

Page 14: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Rule #2If JavaScript is not supported, usability suffers.

(Can't be helped.)(Sorry.)

Page 15: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Focus:focus

Page 16: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

input:focus { border-width: thick;}

Opera: YesFirefox: YesSafari: YesIE: No

Page 17: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

input.onfocus = function () {this.style.borderWidth = 'thick';

}

input.onblur = function () {this.style.borderWidth = '';

}

Page 18: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Rule #3JavaScript needs more precise instructions than CSS.(It's stupider but more versatile.)

Page 19: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

input.onfocus = function () {this.style.borderWidth = 'thick';

}

input.onblur = function () {this.style.borderWidth = '';

}

Page 20: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

input.onfocus = function () {this.style.borderWidth = 'thick';this.className += ' focused';

}

input.onblur = function () {this.style.borderWidth = '';this.className =

this.className.replace(/focused/g,'');}

.focused {border-width: thick;

}

Page 21: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Rule #4Add class names; do not change styles.(Ease of maintenance)Adding class names keeps all CSS classes intact.

Page 22: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

var lists = getElementsByTagNames('ol,ul');

for (var i=0,list;list=lists[i];i++) {

if (list.className != 'zebra') continue;

var lis = list.getElementsByTagName('li');

for (var j=0;j<lis.length;j+=2) {

lis[j].style.backgroundColor = '#00cc00';

}

}

Page 23: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

var lists = getElementsByTagNames('ol,ul');

for (var i=0,list;list=lists[i];i++) {

if (list.className != 'zebra') continue;

var lis = list.getElementsByTagName('li');

for (var j=0;j<lis.length;j+=2) {

lis[j].style.backgroundColor = '#00cc00';

lis[j].className = 'even';

}

}

Page 24: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

:hover

Page 25: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

<ul id=”navigation”>

<li><a href=”#”>Multimedialize</a><li>

<li><a href=”#”>Ajaxify</a>

<ul>

<li><a href=”#”>Web 1.0</a></li>

<li><a href=”#”>Web 2.0</a></li>

<li><a href=”#”>Web 3.0</a></li>

</ul></li>

</ul>

Page 26: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li ul {display: none;

}

Page 27: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li:hover ul {display: block;

}

IE 7: YesFirefox: YesSafari: YesOpera: YesIE 6: No

Page 28: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li.onmouseover = function () {this.className += ' hovered';

}

li.onmouseout = function () {this.className =

this.className.replace(/hovered/g,'');}

li.hovered ul {display: block;

}

Page 29: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li.onmouseover = function () {this.className += ' hovered';

}

li.onmouseout = function () {this.className =

this.className.replace(/hovered/g,'');}

li.hovered ul {display: block;

}

It's MUCH more complicated than that.

Page 30: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')
Page 31: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Event bubbling

Mouse events only!

Page 32: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')
Page 33: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li.onmouseover = function () {this.className += ' hovered';

}

li.onmouseout = function () {this.className =

this.className.replace(/hovered/g,'');}

Page 34: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

ul.onmouseover = function () {var li = [find correct li];li.className += ' hovered';

}

ul.onmouseout = function () {var li = [find correct li];

li.className = li.className.replace(/hovered/g,'');

}

Event delegation

Page 35: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Event bubblingThe down side

Page 36: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li.mouseover, li.mouseout, a.mouseover, a.mouseout, li.mouseover, li.mouseout

Page 37: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

ul.onmouseover = function () {var li = [find correct li];li.className += ' hovered';

}

ul.onmouseout = function () {var li = [find correct li];if (this event is relevant)

li.className = li.className.replace(/hovered/g,'');

}

Page 38: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

a.onmouseover, a.onmouseout

Page 39: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Rule #5When creating a dropdown,make sure the <ul> and<li>s have no visible area.

(Keep it simple.)

Page 40: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

The true JavaScript equivalent of :hoveris not mouseover/out

Page 41: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

The true JavaScript equivalent of :hoveris mouseenter/leave

IE only!

Page 42: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li.mouseenter, li.mouseleave

Page 43: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li.onmouseenter = function () {var li = [find correct li];this.className += ' hovered';

}

li.onmouseleave = function () {var li = [find correct li];if (this event is relevant)

this.className = this.className.replace(/hovered/g,'');

}

Page 44: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Rule #6mouseenter and mouseleave are the true JavaScript equivalents of :hover.(IE only!)(As yet...)

Page 45: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

ul.onmouseover = function () {var li = [find correct li];li.className += ' hovered';

}

ul.onmouseout = function () {var li = [find correct li];if (this event is relevant)

li.className = li.className.replace(/hovered/g,'');

}

Page 46: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

ul.onmouseover = function () {var li = [find correct li];

li.className += ' hovered';}

ul.onmouseout = function () {var li = [find correct li];if (this event is relevant)

li.className = li.className.replace(/hovered/g,'');

}

That's it, right?

Wrong!

Page 47: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Device Independence!

Page 48: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

:hover and onmouseoverare mouse only.

We need a keyboard handler

Page 49: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

:hover and onmouseoverare mouse only.

We need a keyboard handler

:focus / onfocus

Page 50: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li:hover ul, li:focus ul {display: block;

}

Page 51: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li:hover ul, li:focus ul {display: block;

}

Doesn't work.You can't put the keyboardfocus on an <li>.

Page 52: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Rule #7Only links, form fields, and the location bar can receive the keyboard focus in all browsers.

Page 53: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li:hover ul, (li < a:focus) ul {display: block;

}

(Don't try this at home.)

Page 54: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li:hover ul, (li < a:focus) ul {display: block;

}

(Don't try this at home.)Not supported.(Pity, isn't it?)

Page 55: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Rule #8CSS currently does not allow keyboard-accessible hover effects.

(You need JavaScript for perfect accessibility.)

Page 56: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li.onmouseover = li.onfocus = function () {this.className += ' hovered';

}

li.onmouseout = li.onblur = function () {this.className =

this.className.replace(/hovered/g,'');}

Page 57: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

li.onmouseover = li.onfocus = function () {this.className += ' hovered';

}

li.onmouseout = li.onblur = function () {this.className =

this.className.replace(/hovered/g,'');}

Same problem: you can't focus on an <li>.

Page 58: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

CSS:

li:hover ul {display: block;

}

JavaScript:

li.onmouseover = function () {this.className += ' hovered';

}

Page 59: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

CSS:

(li < a:focus) ul {display: block;

}

JavaScript:

a.onfocus = function () {this.parentNode.className += ' hovered';

}

Page 60: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

ul.onmouseover = function () {var li = [find correct li];

li.className += ' hovered';}

a.onfocus = function () {this.parentNode.className += ' hovered';

}

Page 61: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

ul.onmouseout = function () {var li = [find correct li];if (this event is relevant)

li.className = li.className.replace(/hovered/g,'');

}

a.onblur = function () {if (this event is relevant)

this.parentNode.className = this.parentNode.className.replace(/hovered/g,'');

}

Page 62: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

:before and :after

Page 63: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

a.external:after {content: “ (external link)”;

}

Firefox: YesSafari: YesOpera: YesIE: No

Page 64: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

var afterNode = document

.createTextNode(' (external link)');

var links = document

.getElementsByTagName('a');

for (var i=0;i<links.length;i++) {

if (links[i].className != 'external') continue;

links[i].appendChild(afterNode

.cloneNode(true));

}

Page 65: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

What happens if both the CSS and the JavaScript are executed?

“Their findings (external link) (external link) suggest ...“

(Oops)

Page 66: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Situation:- JavaScript for IE- CSS for all other browsers

Page 67: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Conditional comments

<!--[if IE]><script type=”text/javascript” src=”after.js”></script>

<![endif]-->

Page 68: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Rule #9If a script is for IE only, use an IE-only way of including it.

(Conditional comments)

Page 69: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Option #2:Don't use CSS at all.

Is the “ (external link)” text absolutely required?If so, it should go in the HTML (accessibility).

If not, is it presentation or behavior?

Page 70: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

(Personal opinion warning)

The CSS content property should not be used.Using it is akin to using text in images.

Text belongs either in the HTML structural layer, or in the JavaScript behavior layer;but never in the CSS presentation layer.

Page 71: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Using JavaScriptresponsibly

to plug a few holesin browsers' CSS

support

Page 72: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Need any help?

Page 73: Advanced Design Techniques: JavaScript to the … Design Techniques: JavaScript to the Rescue Peter-Paul Koch (ppk) VTM Conference, Oct. 24th, 2007 1998 if (browser == 'Netscape')

Have fun!