`
- Horizontal rules `
`
- Strong `` which defaults to a bold style and emphasis `` which defaults to italicized in most browsers.
---
# Adding content
- There are 100s of tags! See [Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/HTML/Element)!
- Some simple tags
- Some tags add semantic context
- ``: The header or banner that displays the title of the page
- ``: The bulk of the content of the page
- ``: The footer is optional but you can put contact info and copyright date in there.
---
# Adding content
- There are 100s of tags! See [Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/HTML/Element)!
- Some simple tags
- Some tags add semantic context
- Some tags need additional information, added to a tag with attributes
- Links to other pages ``
- Links to images `
`
---
# Adding content
- There are 100s of tags! See [Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/HTML/Element)!
- Some simple tags
- Some tags add semantic context
- Some tags need additional information, added to a tag with attributes
- Some tags (comments) are important for documentation ``
---
# Cascading Style Sheets (CSS)
- Allows us to change the look and feel of the content on the page
- Style is separated into a .css file
- Makes styling multiple pages easier
- Allows changing multiple pages easier
- Style sheets must be linked to an html page in the for the styles to work
``
- Great example is [CSS Zen Garden](http://www.csszengarden.com/)
---
# Document Object Model (DOM) (1/3)
.left-column[

]
.right-column[
- We must build up a hierarchy of document elements (the **Document Object Model**)
- The structure of this depends on our HTML (or the toolkit that generates your HTML or App)
- The structure of this influences layout
]
---
# Document Object Model (DOM) (2/3)
.left-column[

]
.right-column[
What does this hierarchy look like?
]
---
# Document Object Model (DOM) (3/3)
.left-column[

]
.right-column[
flowchart TD
A(Main Window)
B(Vertical Layout)
C("Spot the Heron" Label)
D(Picture of a heron in water with some reeds)
E(Horizontal Layout: Controls)
F(Left arrow)
G(Play)
H(Right arrow)
A --> B
B --> C
B --> D
B --> E
E --> F
E --> G
E --> H
classDef default fill:#009688,stroke:#333,stroke-width:2px, color:white;
classDef reflect fill:#4CAF50,stroke:#333,stroke-width:2px, color:white;
class A,B,C default
class A,B,C,D,E reflect
linkStyle default stroke: black,stroke-width:8px
]
---
# Let's compare that to an app
.left-column50[
Components: *library elements* (e.g. buttons and labels) combined according to *toolkit rules*

]
.right-column50[
- What are the "components" in this image?
- What does the "interactor hierarchy" look like for this image
]
???
discuss with your neighbor
- what to draw; where to draw it
---
# Let's compare that to an app (Answer)
.left-column50[
Components: *library elements* (e.g. buttons and labels) combined according to *toolkit rules*

]
.right-column50[
graph TD
W(Window) --> H[Horizontal layout]
H --> I1[fa:fa-bell Bell ]
H --> V[Vertical Layout]
V --> I2[Title: Google Calendar reminder]
V --> I3[Text: Christian and Anind --Jen Mankoff-- is
starting at 12:30pm. - Video call]
classDef default fill:#009688,stroke:#333,stroke-width:2px, color:white;
classDef reflect fill:#4CAF50,stroke:#333,stroke-width:2px, color:white;
class H,V default
class I1,I2,I3 reflect
linkStyle default stroke: black,stroke-width:8px
]
---
# How do we make it more interactive?
How about we add a button?
--
count: false
Wait? When you hear the word "button" in the context of a graphical user
interface (GUI), what do you think of?
---
# What should it do?
What do we tell the toolkit about the button?
- Where to place it
- How it should react to user input (from which device?)
---
# Screen Reader Information Flow (1/2)
What happens when the user is exploring/navigating?
graph LR
SR[fa:fa-volume-up
Screenreader
]:::bluelarge -->|Asks for next object in DOM| API(fa:fa-codepen
Accessibility API
):::bluelarge
API -->|Passes along request| ATK[
Toolkit
]:::bluelarge
ATK -->|Checks Details| App[fa:fa-mobile
App
]:::bluelarge
App -->|Name: Foo| ATK
ATK -->|Name, Role: Button| API
API -->|Name, Role| SR
Speak(fa:fa-volume-up Button, Foo ):::bluelarge
--
... (repeat for each swipe / component)
---
# Screen Reader Information Flow (2/2)
What happens when the user double taps to invoke?
graph LR
SR[fa:fa-volume-up
Screenreader
]:::bluelarge -->|Invokes object| API(fa:fa-codepen
Accessibility API
):::bluelarge
API -->|Passes along request| ATK[
Toolkit/
Browser]:::bluelarge
ATK -->|Invokes Callback| App[fa:fa-mobile
App
]:::bluelarge
App -->|Updates Interface
Announces Changes| ATK
ATK -->|Passes along information| API
API -->|Deleted text| SR
Speak(fa:fa-volume-up Deleted Text ):::bluelarge
---
# Different types of interfaces are similar
| Does What? | Android | Web |
|--- | --- | --- |
| Content| Java | HTML/CSS/JS |
| Style | Layout | CSS |
| Structure | Interactor Hierarchy | Document Object Model (DOM) |
| Content | Components | DIVS |
| Style | Paint objects on a canvas | CSS |
| Behavior | Event Handling | Event Handling/JS |
---
# Which of these Impacts Accessibility?
| Does What? | Android | Web | Accessibility (Examples) |
|-- |--------------------------------|---------------------------------------------------|--------------------------------------|
| Content | Java | HTML/CSS/JS | Does the toolkit support access? |
|Style | Layouts | CSS | Comprehension/Magnification |
| Structure | Interactor Hierarchy | Document Object Model (DOM) | Navigation |
| Content | Components | DIVS | Alternative text (toolkit dependent) |
| Style | Paint objects on a canvas | CSS | Color choices |
| Behavior | Event Handling ` | Event Handling/JS | Proper Interaction with access API? |
---
# Building for Accessibility
graph LR
SR[fa:fa-volume-up
Screenreader
]:::bluelarge -->|Asks for next object in DOM| API(fa:fa-codepen
Accessibility API
):::bluelarge
API -->|Passes along request| ATK[
Toolkit
]:::bluelarge
ATK -->|Checks Details| App[fa:fa-mobile
App
]:::bluelarge
App -->|Name: Foo| ATK
ATK -->|Name, Role: Button| API
API -->|Name, Role| SR
- This information must be provided by the developer (and in some cases, parts of the info provided by toolkit library)
- Accessibility APIs provide the information to a screen reader.
- Screen readers provide this information visually, through audio or in Braille to users.
???
As an example, we'll focus on screen readers
Screen readers get underlying information about controls from operating systems.
---
# Example: Accessible Button (1/4)
Minimum needed for screen reader access
- **Location** (for Navigation)
???
Naturally exists in the interactor hierarchy/DOM, but is it in an intuitive place for navigation?
---
# Key Navigation Concept
Reaching times: How long does it take to get somewhere
Information you need to collect to assess this:
- You need to know the linear order of a webpage or app.
- You need to know about any hierarchy that is programmatically available (e.g. headers)
No way to automatically assess this! Hard to assess well without knowing best tricks for navigation that disabled people use.
---
# A page with layout
.left-column60[
(table but imagine it was CSS)
Title spanning whole width of table |
Navigation 1 Navigation 2 Navigation 3 Navigation 4 |
Banner Ad |
Right Nav 1 Right Nav 2 Right Nav 3 |
Main content area with lots of text and stories filling the center part of the window |
]
.right-column40[
What focus order makes sense for the Facebook newsfeed?
Does this match the actual focus order?
When might you need to skip things?
]
---
# Linear Order with no CSS
Depends on how the page was designed. One possibility
- Title
- Right Nav 1
- Right Nav 2
- Right Nav 3
- Navigation 1
- Navigation 2
- Navigation 3
- Navigation 4
- Banner ad
- Main content area
---
# Swipe order? (bad)
.left-column60[
| Cell | Nefarious order |
|--------------|-----------------|
| Title | 1 |
| Right Nav 1 | 8 |
| Right Nav 2 | 9 |
| Right Nav 3 | 10 |
| Banner ad | 3 |
| Navigation 1 | 4 |
| Navigation 2 | 5 |
| Navigation 3 | 6 |
| Navigation 4 | 7 |
| Content | 11 |
]
.right-column40[
Title spanning whole width of table |
Nav 1 Nav 2 Nav 3 Nav 4 |
Banner Ad |
Right Nav 1 Right Nav 2 Right Nav 3 |
Main content area with lots of text and stories filling the center part of the window |
]
---
# Swipe order? (better)
.left-column60[
| Cell | Well designed order |
|--------------|---------------------|
| Title | 1 |
| [skip cell] | 2 |
| Right Nav 1 | 3a |
| Right Nav 2 | 3b |
| Right Nav 3 | 3c |
| Banner ad | 3e |
| Navigation 1 | 3a |
| Navigation 2 | 3b |
| Navigation 3 | 3c |
| Navigation 4 | 3d |
| Content | 3 |
]
.right-column40[
Title spanning whole width of table |
Nav 1 Nav 2 Nav 3 Nav 4 |
Banner Ad |
Right Nav 1 Right Nav 2 Right Nav 3 |
Main content area with lots of text and stories filling the center part of the window |
Hidden skip Link to get to main content
]
---
# Swipe order? (best)
.left-column60[
| Cell | Chunked order |
|-------------|---------------------|
| Title | 1 |
| [skip cell] | 2 |
| Nav Area | 3 |
| Right Nav | 3a |
| Right Nav 1 | 3a.1 |
| Right Nav 2 | 3a.2 |
| Right Nav 3 | 3a.3 |
| Left Nav | 3b |
| Navigation 1 | 3b.1 |
| ... | |
| Banner ad | 3c |
| Content | 4 |
]
.right-column40[
Title spanning whole width of table |
Nav 1 Nav 2 Nav 3 Nav 4 |
Banner Ad |
Right Nav 1 Right Nav 2 Right Nav 3 |
Main content area with lots of text and stories filling the center part of the window |
Use chunks to group meaningful info and reduce number of navigation steps.
]
???
- User can double tap to drill down into chunk (e.g. navigate to the “like” button by drilling down into an individual post).
---
# More Navigation Concepts
Forms and inputs have issues with *order* and *labels*. This is fixed different ways on different platforms, but all major UI dev tools have APIs for accessibility. Make sure you use them *and* testing.
- Web [advice](http://webaim.org/techniques/forms/controls) and [advanced advice](http://webaim.org/techniques/forms/advanced) on this. Look for similar documentation for android/iOS.
Tables are not ideal, but *best* when headers are labeled. Again, check the API for your interface dev platform.
---
# Example: Accessible Button (2/4)
Minimum needed for screen reader access
- Location (for Navigation)
- **Does it have proper labeling/ALT text?**
- Did you use a library element or ensure that events are properly announced
- State changes
- Invocation
- Can it be triggered through the keyboard or API?
???
---
# Interactive Component ALT text
- What is a good name for a "Like" Button?
- Enable the user to understand the name of the control they have navigated to, what type of control it is, what value it has, what state it has.
---
# Proper ALT text
Screen reader will read out name, role, and state. Don't repeat these.
Good alt text: Name ("Like")
API knows: Role ("Button")
API knows: State ("Not selected")
---
# Example: Accessible Button (2/4)
Minimum needed for screen reader access
- Location (for Navigation)
- Does it have proper labeling/ALT text?
- Did you use a library element or ensure that **events are properly announced**
- State changes
- Invocation
???
---
.column[

]
.column[
## Announce UI changes
If you can't see the UI, you have no idea if login succeeded
Requires *programmatically* calling an API to announce the change
]
--
.column[
## Common places this happens
Dialog boxes
Success notifications
Errors
]
---
# Example: Accessible Button (2/4)
Minimum needed for screen reader access
- Location (for Navigation)
- Does it have proper labeling/ALT text?
- Did you use a library element or ensure that events are properly announced
- State changes
- Invocation
- **Can it be triggered through the keyboard or API?**
???
---
# Other API specific issues Impact Access
You always must to understand your accessibility API in depth to make an app accessible
For example, when [Ross et al, 2017](https://dl.acm.org/doi/10.1145/3132525.3132547) studied 1000s of android apps. Some common errors came up which aren't in guidelines because they are either tool specific or straight up UX errors: [next slide]
---
# Errors that require manual inspection
| | Description|
|--|
| | TextView has a content description. This might interfere with a screen reader’s ability to read the content of the text field |
| | Overlapping clickable items |
| | URL in link may be invalid |
---
# Summary of Common Problems
Common Problems To Remember (from [Ross et al, 2017](https://dl.acm.org/doi/10.1145/3132525.3132547) study of 1000s of android apps)
.left-column50[
| |Description |
|--|----------------------|
| | Missing element label ||
| | Item label ends with type, e.g., “Play Button.” TalkBack automatically announces item type, so information is redundant |
| | UI Change not announced |
| | Navigation lacks hierarchy; or makes no sense |
]
.right-column50[
| |Description |
|--|----------------------|
| | Item is too small|
| | Low contrast in image or icon |
| | Low text contrast between foreground and background |
| | Item's role identical with alt text|
]
---
# Key Take Home Message
IF you take one thing away from this whole discussion, it should be:
*YOU* decide who is disabled with respect to the technology you create
---
[//]: # (Outline Slide)
# Learning Goals for Today
- Manual Accessibility Testing
- We will focus on screen readers
- And understanding structure in interactive apps
- And how this impacts user agents (such as screen readers)
- Building for Accessibility
- **Assignment**
- [if time] Get comfortable using existing freely available accessibility technology to manually support assessment
---
# This week's assignment
The goal of this homework is to make something more accessible (e.g. website, visualization, user interface, AR/VR, etc) that you’ve already made.
Required learning goals:
- Accessible Document Creation
- Familiarity with a Range of Accessibility Technologies
- Image Description
???
If you don't have an interface, come speak with us!
---
[//]: # (Outline Slide)
# Learning Goals for Today
- Manual Accessibility Testing
- We will focus on screen readers
- And understanding structure in interactive apps
- And how this impacts user agents (such as screen readers)
- Building for Accessibility
- Assignment
- [if time] **Get comfortable using existing freely available accessibility technology** to manually support assessment
---
# Break up into groups
Decide who will
- use switch control
- use magnification
- browser settings
Open your phone's web browser and load [seattleschools.org](https://www.seattleschools.org/)
Share on the [class discussion](https://edstem.org/us/courses/56844/discussion/4677684)
---
# In your groups
Visit or [UW Libraries](https://www.lib.washington.edu/). Evaluate
1. Whether a student can easily learn about Seattle Public Schools or UW Libraries
2. Whether a student can "Report a Concern" about how accessible the website is.
What are some problems you found? Try to separate out what is difficult for you as a beginner from what is a flaw in the website itself.