Slide 1 of 64
previous (not available)
CSUN 2008 (This presentation can be found at: http://www.paciellogroup.com/CSUN08/webapps)
Slide 2 of 64
Slide 3 of 64
| Traditional Websites | Web applications |
|---|---|
| Entire page is recreated when something changes. | Relevant parts of the page are updated dynamicallty. |
| Standard HTML controls. | Custom interface controls |
| Content comes from one place. | Modularized content comes from external locations, not always under developer's control. |
| Looks and feels like a website. | Looks and feels like a desktop application. |
| All HTML is created on the server. | Highly dependent on client side scripting. |
Slide 4 of 64
This course is divided in the following sections, grouped by the type of accessibility problems common to web application:
Slide 5 of 64


Slide 6 of 64
Slide 7 of 64
Slide 8 of 64
a:hover, a:focus, a:active {
color: white;
background-color: black; }
element.onfocus = highlightFocus;
element.onblur= unHighlightFocus;
...
addClassName(element, 'highlighted');
removeClassName(element, 'highlighted');
Slide 9 of 64
Slide 10 of 64
Slide 11 of 64
Slide 12 of 64
Slide 13 of 64
Slide 14 of 64
Slide 15 of 64
<input type="text" name="search" />
<input type="submit" value="Search" />
<input type="text" name="search" title="Search criteria"/>
<input type="submit" value="Search" />
Slide 16 of 64
<input type="text" name="searchtext" />
<input type="submit" name="mail" value="search mail" />
<input type="submit" name="web" value="search the web" />
<input type="text" name="searchtext" title="Search mail or web" />
<input type="submit" name="mail" value="search mail" />
<input type="submit" name="web" value="search the web"
title="search the web: opens in a new window" />
Slide 17 of 64
Before control; in left-to-right languages, either to the left or immediately above the control. Buttons are self-labelled labels. Check boxes and radio buttons are special types of buttons, and so the label is part of the button (increases target area), and placed immediately after the control to show the semantic difference
| Control | label |
|---|---|
| text, text area, select | To the left or immediately above |
| check box and radio buttons | Immediately after the control |
| buttons | self-labelled |
Results from an eye tracking study concluded that:
Placing a label above an input field works better in most cases, because users aren’t forced to look separately at the label and the input field. Be careful to visually separate the label for the next input field from the previous input field. But this conclusion needs to be tempered by the power of convention and remembering it is only one study.
Slide 18 of 64
label: <input type="text" size="30" name="uname" />
<label></strong>label: <input type="text" size="30" name="uname" /></label>
<label for="uname">label:</label>
<input type="text" size="30" id="uname" name="uname">
<label for="uname">label:
<input type="text" size="30" id="uname" name="uname">
</label>
Slide 19 of 64
<select name="city">
<option value="-1">choose a city</option>
<option value="1">Birmingham</option>
<option value="2">London</option>
</select>
<select name="city" title="choose a city">
<option value="-1">choose a city</option>
<option value="1">Birmingham</option>
</select>
Slide 20 of 64
<label for="city">City</label>
<select name="city" id="city">
<option value="-1">choose a city</option>
<option value="1">Birmingham</option>
<option value="2">London</option>
</select>
Slide 21 of 64
<label for="multi1">name</label>
<input type="text" id="multi1" name="multi">
first name optional
<label
for="multi2">name <input type="text" id="multi2" name="multi">
first name optional</label>
Slide 22 of 64
<label for="multi3">name</label>
<input type="text" id="multi3" name="multi">
<label for="multi3">first name optional</label>
<label
for="multi4">name (first name optional)
</label>
<input type="text" id="multi4" name="multi">
Slide 23 of 64
Recommended
<label for="a">input 1
<span class="formhint">tip: between 1 and 4</span>
</label>
<input class="range:1-4" id="a">
Recommended
<label for="a">
<img id="errorimga" height="16" alt="error" src="error.png">
input 1
<span class="formhint">tip: between 1 and 4</span>
<em class="errortext" id="errortexta">must be within 1 and 4</em>
</label>
<input class="range:1-4" id="a">
Slide 24 of 64
.hidden {
position: absolute;
left: 0;
top: -999em;
width: 1em;
height: 1em;
overflow: hidden;
}
<input type="text" id="search3" name="search3" title="search criteria">
<input type="submit" value="Search">
Slide 25 of 64
| code | item | quantity | price |
|---|---|---|---|
| 123 | pencil | $1.00 | |
| 124 | pens | $1.50 |
<td>
<label class="hiddenlabel" for="q1">quantity of pencils</label>
<input type="text" id="q1" name="q1" size="3" value="0"></td>
<td>
<input type="text" name="q1" size="3" value="0" title="quantity of pens"></td>
Slide 26 of 64
Slide 27 of 64
<fieldset>
<legend>Personal Details</legend>
<label for="t6">Title</label>
<select name="ddlTitle">
<option>Mr</option>
<option>Ms</option>
</select>
<label for="t1"> First Name</label>
<input type="text"id="t1" name="txtFirstName">
<label for="t2">Middle Name</label>
<input type="text"id="t2"cname="txtmiddleName">
<label for="t3">Last Name</label>
<input type="text" id="t3" name="txtlastName">
</fieldset>
Slide 28 of 64
<fieldset>
<legend>Search This Site</legend>
<label for="searchfor">Search for</label>
<input id="searchfor" name="searchfor" type="text">
<fieldset>
<legend>filter by</legend>
<input type="radio" id="a" value="1"> <label for="a">television</label>
<input type="radio" id="b" value="2"> <label for="b">radio</label>
<input type="radio" id="c" value="3"> <label for="c">cinema</label>
</fieldset><input type="submit" value="search">
</fieldset>
Slide 29 of 64
<label for="spin">Spin:</label>
<input id="spin" size="3" value="0" maxlength="2">
<input id="spinup" type="image" alt="increase value" src="spintop.png">
<input id="spindown" type="image" alt="decrease value" src="spinbot.png">
Slide 30 of 64
<div id="slide">
<input
style="background: url(closefocus.gif) #ccc no-repeat 0px 50%; height: 216px"
type="image" alt="close panel" src="transparent.gif">
</div>
Slide 31 of 64
<div class="slider">
<input id="thumb" title="effectiveness, between 0 and 500"
type="image" alt="effectiveness" src="thumb.gif">
<label id="lbl" for="thumb">effectiveness
<span id="result">0</span>
</label></div>
Slide 32 of 64
<li class="firstclosed"><a class="branchnode collapse" href="#">
<img alt="collapse folder" src="node.png"></a>
<input class="treecheck branchcheck" id="tr1"
title="select all children of item1" type="checkbox">
<img class="branchicon" alt="opened folder" src="folder.png"> item1
Slide 33 of 64
Slide 34 of 64
Slide 35 of 64
Slide 36 of 64
Slide 37 of 64
Slide 38 of 64
Slide 39 of 64
Slide 40 of 64
Slide 41 of 64
Slide 42 of 64
Slide 43 of 64
Slide 44 of 64
Slide 45 of 64
Slide 46 of 64
Slide 47 of 64
Slide 48 of 64
Slide 49 of 64
Slide 50 of 64
Slide 51 of 64
Slide 52 of 64
<span role="checkbox" aria-checked="true" />
Slide 53 of 64
Slide 54 of 64
<p id="flickrSliderLbl" role="label">Number of results to display: </p> <input type="image" role="button" alt="Decrease slider value" src="images/slider/left.png" tabindex="-1" />
<div id="flickrSlider" role="slider" aria-valuemin="0" aria-valuemax="100" aria-valuetext="0 pictures" aria-valuenow="0" aria-labelledby="flickrSliderLbl" tabindex="0">
<input class="sliderThumb" type="image" role="button" id="sliderThumb" src="images/slider/thumb.png" alt="Slider handle" tabindex="-1" />
Slide 55 of 64
<span tabindex="0" role="checkbox"
aria-checked="true">Any checkbox label </span>
Slide 56 of 64
Slide 57 of 64
Slide 58 of 64
Slide 59 of 64
Slide 60 of 64
Levels can be overridden by the user
Slide 61 of 64
Slide 62 of 64
Slide 63 of 64
Slide 64 of 64
next (not available)