SlideShare a Scribd company logo
1 of 74
CSS Display Properties
versus
HTMLSemantics
Adrian Roselli
Agenda
 About Me
 Use Case
 HTML Tables
 Responsive Web Design (RWD)
 CSS Display Properties
 ARIA to the Rescue?
 ARIA Grid
 display:contents
 How is This a Thing?
 Wrap-up
Adrian Roselli
• Building for the web
since 1993,
• Learn more at
AdrianRoselli.com,
• Avoid on Twitter
@aardrian.
A Use Case
UseCase
 Build a layout that can adapt to screen sizes,
 Uses a native HTML element that has inbuilt structure,
 Also has inbuilt semantics,
 Provides a specific set of nodes in the accessibility tree.
HTML Tables
HTMLTables
 We will use HTML tables as our proxy,
 They have a long history on the web,
 Used for layout and tabular data,
 Have a specific DOM structure,
 Have their own navigation methods in screen readers.
BasicHTMLTable
 Make a valid HTML <table>,
 Avoid spanning cells,
 Make sure you use <th> for headers,
 Add a useful <caption>.
<table>
<caption>Books I May or May Not Have Read</caption>
<tr>
<th>Author</th>
<th>Title</th>
<th>Year</th>
</tr>
<tr>
<td>Miguel De Cervantes</td>
<td>The Ingenious Gentleman Don Quixote of La Mancha</td>
<td>1605</td>
</tr>
[…]
</table>
BasicHTMLTable
Complexity#1:RowHeaders
 Continue to use <th>,
 Add the scope attribute using the values (as appropriate):
- row, col, rowgroup, colgroup.
 Conforms to WCAG technique H63: Using the scope attribute to
associate header cells and data cells in data tables.
Complexity#1:RowHeaders
<table>
<caption>Contact Information</caption>
<tr>
<td></td>
<th scope="col">Name</th>
<th scope="col">Phone#</th>
<th scope="col">Fax#</th>
<th scope="col">City</th>
</tr>
<tr>
<td>1.</td>
<th scope="row">Joel Garner</th>
<td>412-212-5421</td>
<td>412-212-5400</td>
<td>Pittsburgh</td>
</tr>
[…]
</table>
Complexity#2:SpanningCells
 Continue to use <th>,
 Every <th> gets an id,
 Every <td> gets a headers attribute
 The headers value is the id of the <th> you want it to use,
 Conforms to WCAG 2.0 technique H43: Using id and headers
attributes to associate data cells with header cells in data tables.
Complexity#2:SpanningCells
<table>
<tr>
<th rowspan="2" id="h">Homework</th>
<th colspan="3" id="e">Exams</th>
<th colspan="3" id="p">Projects</th>
</tr>
<tr>
<th id="e1" headers="e">1</th>
<th id="e2" headers="e">2</th>
<th id="ef" headers="e">Final</th>
<th id="p1" headers="p">1</th>
<th id="p2" headers="p">2</th>
<th id="pf" headers="p">Final</th>
</tr>
<tr>
<td headers="h">15%</td>
<td headers="e e1">15%</td>
<td headers="e e2">15%</td>
<td headers="e ef">20%</td>
<td headers="p p1">10%</td>
<td headers="p p2">10%</td>
<td headers="p pf">15%</td>
</tr>
</table>
Responsive Web
Design (RWD)
ResponsiveTables
 Specifically talking about viewport width,
 Let it scroll off-screen:
- Add tabindex="0" for keyboard users,
- Add role="region" so screen readers announce it,
- Add aria-labelledby so screen readers give it a name,
- Set the aria-labelledby value to the id of the <caption>.
ResponsiveTable
<div role="region" aria-labeledby="Cap1" tabindex="0">
<table>
<caption id="Cap1">Books I May or May Not Have Read</caption>
<tr>
<th>Author</th>
<th>Title</th>
<th>Year</th>
<th>ISBN-13</th>
<th>ISBN-10</th>
</tr>
<tr>
<td>Miguel De Cervantes</td>
<td>The Ingenious Gentleman Don Quixote of La Mancha</td>
<td>1605</td>
<td>9783125798502</td>
<td>3125798507</td>
</tr>
[…]
</table>
</div>
EvenMoreResponsive
• ‘Responsive’ is not just about viewport width;
• Even if it were, a scrolling table may not cut it.
RespondtoPrint
RespondtoWHCM
RespondtoViewportWidth
RejiggeringtheLayout
@media screen and (max-width: 37em), print and (max-width: 5in) {
table, tr, td {
display: block;
}
[…]
td {
display: grid;
grid-template-columns: 4em auto;
grid-gap: 1em 0.5em;
}
}
RejiggeringtheLayout
CSS Display
Properties
CSSDisplayProperties
 The following override native semantics in the browser:
- display: block
- display: inline
- display: grid
- display: flex
- display: contents
CSSDisplayProperties
 Nothing in the HTML / CSS specifications mandates this,
 Does not work in reverse:
- display: table
- display: table-cell
AssistiveTechnology(AT)
 Browsers do not convey correct semantics to AT,
 Users who rely on these semantics can be stranded:
- Understanding content,
- Navigating a page.
TablesasaCanary
 Breaking semantics of any single required child element can break
entire table:
- A missing row, column or row header;
- The parent table even with good rows and cells.
ScreenReader(NVDA/Firefox)
ScreenReader(NVDA/Firefox)
AccessibilityTree
 A sub/super-set of the DOM,
 Includes UI objects of browser & objects of the document,
 Created in tree for every DOM element that:
- Fires an accessibility event,
- Has a property, relationship or feature which needs to be exposed.
 Is abstracted for dev tools.
AccessibilityTree:<table>
AccessibilityTree:<caption>
AccessibilityTree:<th>
AccessibilityTree:<td>
Chromev80
 Released February 19, 2020,
 Fixes flex bug on table,
 Caused me to re-examine overall,
 Other fixes / changes are in there,
 Browsers based on Blink (ChromiEdge) will benefit.
TheWebIsNotChrome
Screen Reader & Browser # of Respondents % of Respondents
JAWS with Chrome 259 21.4%
NVDA with Firefox 237 19.6%
NVDA with Chrome 218 18.0%
JAWS with Internet Explorer 139 11.5%
VoiceOver with Safari 110 9.1%
JAWS with Firefox 71 5.9%
VoiceOver with Chrome 36 3.0%
NVDA with Internet Explorer 14 1.2%
Other combinations 126 10.4%
WebAIM Screen Reader Survey #8 (2019)
Chrome80/Windows10
CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button>
display: flex ✔ ✔ ✔ ✔
display: grid ✔ ✔ ✔ ✔
display: block ✔ ✔ ✔ ✔
display: inline-block ✔ ✔ ✔ ✔
display: contents ✔ ❌ ✔ ✔
Firefox73/Windows10
CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button>
display: flex ❌1 ✔ ✔ ✔
display: grid ❌1 ✔ ✔ ✔
display: block ✔ ✔ ✔ ✔
display: inline-block ✔ ✔2 ✔ ✔
display: contents ❌ ✔2 ✔ ✔3
Safari/macOS10.15.2
CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button>
display: flex ❌ ✔ ✔ ✔
display: grid ❌ ✔ ✔ ✔
display: block ❌ ❌1 ✔ ✔
display: inline-block ❌ ❌1 ✔ ✔
display: contents ❌ ❌1 ❌ ❌
Chrome80/Android10
CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button>
display: flex ✔ ✔ ✔ ✔
display: grid ✔ ✔ ✔ ✔
display: block ✔ ✔ ✔ ✔
display: inline-block ✔ ✔ ✔ ✔
display: contents ✔ ❌ ✔ ✔
Safari/iOS
CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button>
display: flex ❌ ✔ ✔ ✔
display: grid ❌ ✔ ✔ ✔
display: block ❌1 ❌ ✔ ✔
display: inline-block ❌1 ❌ ✔ ✔
display: contents ❌1 ❌ ❌ ❌2
display:table
 display: table, table-caption, table-row, table-cell;
 Each of these will add layout-table semantics in Chrome v80,
 There is no CSS display property for col/row headers,
 Requires a well-structured DOM,
 Not a workaround, fix, or way to do <div>s-as-tables.
display:table
 As LayoutTable, LayoutRowTable, LayoutCellTable;
 JAWS, Narrator will read this as a table,
- But without col/row headers,
 NVDA, VO, TalkBack will not read this as a table.
Chromev82
 Will support align-items on <button>s,
- When display: inline-grid / grid / inline-flex / flex is applied,
 Lack of support has hampered <button> uptake in these layouts,
 Expect to see more <button>s with more display properties.
ARIA to the
Rescue?
ARIATableRoles
 <table role="table">
 <caption role="caption">
 <thead|tbody|tfoot role="rowgroup">
 <tr role="row">
 <td role="cell">
 <th scope="col" role="columnheader">
 <th scope="row" role="rowheader">
 Cannot address re-ordered
content,
 Cannot address hidden content.
ARIATableRoles
 Do not use ARIA grid roles,
 Test with a screen reader,
 If your tables are generated from script, update the script.
TablewithARIA
<table id="Books" role="table">
<caption id="Cap1" role="caption">Books I May or May Not Have Read</caption>
<tr role="row">
<th role="columnheader">Author</th>
<th role="columnheader">Title</th>
<th role="columnheader">Year</th>
<th role="columnheader">ISBN-13</th>
<th role="columnheader">ISBN-10</th>
</tr>
<tr role="row">
<td role="cell">Miguel De Cervantes</td>
<td role="cell">The Ingenious Gentleman Don Quixote of La Mancha</td>
<td role="cell">1605</td>
<td role="cell">9783125798502</td>
<td role="cell">3125798507</td>
</tr>
[…]
<tr role="row">
<td role="cell">George Orwell</td>
<td role="cell">Nineteen Eighty-Four</td>
<td role="cell">1948</td>
<td role="cell">9780451524935</td>
<td role="cell">0451524934</td>
</tr>
</table>
ScreenReader(NVDA/Firefox)
ARIA Grid
ARIAGrid
 Do not use for simple data tables,
 Intended to mimic Excel-style spreadsheet,
 A grid is a composite widget so it:
- Contains multiple interactive controls,
- Has only one tab-stop in the sequence,
- Requires author to provide code to manage focus within.
display:contents
Whatisdisplay:contents
 The element does not generate any boxes,
- Its children and pseudo-elements still generate boxes,
- Text runs as normal,
 For box generation & layout, element treated as if replaced in element tree
by its contents,
- As if opening and closing tags removed,
 Also yanks it from accessibility tree.
Whydisplay:contentsIsMoreDangerous
 You cannot add it back to the accessibility tree with ARIA,
- You can give it an accessible name and properties,
- But these are not passed to screen readers,
 Some browsers do not hand the information off,
 If used as a poor-dev’s CSS reset:
- Will hide elements from assistive technology,
- Will hide semantics from assistive technology.
AffectingDifferentElements
AccessibilityTree:<table>
AccessibilityTree:<ul>
AccessibilityTree:<button>
AccessibilityTree:<h2>
ScreenReader(NVDA/Firefox)
Bugs!
 Firefox bug 1455357 (19-Apr-2018): Setting grid item to display:
contents resets its accessible role
 Chromium Issue 835455 (20-Apr-2018): Element not exposed to
accessibility tree when it is set to display: contents
 Safari bug 39630240 (which I cannot see because my AppleID may
not have the needed permissions to see it)
 CSSWG #2632 (30-Apr-2018): [css-display][css-aam][selectors-4]
How elements with `display:contents` get focused?
How Is This a
Thing?
AssistiveTechIsNotatFault
 Not screen readers’ fault,
 Accessibility information comes from browser,
 Screen reader needs more than DOM to understand page,
 Cannot ignore all but the DOM:
- Years of HTML tables for layout informed screen readers,
- Screen readers developed heuristics for dealing with tables.
DetectingATIsNotViable
 Users generally don’t want us to be able to detect screen readers,
 Not all screen reader users are blind anyway,
 Mouse actions are a poor proxy for sighted screen reader users,
 Disabling a site’s CSS for screen reader users is impractical (and a
terrible, terrible idea).
CSSIsNotBlameless
 CSS already impacts HTML semantics — display: none,
 Using display: table does (generally) not impart HTML table
semantics,
 CSS flex or grid makes it easy for content order and source order to
disagree,
 CSS grid to lay out an HTML table still won’t be a table semantically.
ARIAIsNotIdeal
 You must understand ARIA and the table structure,
 This will require you to keep current on SR and browser support,
 You have to manage headers and other content you might hide,
 Consider how this scales with CSS does not load,
 This is not the purpose of ARIA,
 The technique here is a stop-gap.
TheBrowserIsNotRight
 The CSS spec does not state that semantics should be dropped,
 As display properties, there is no reason to remove them,
 The accessibility tree should not care about visuals.
Wrap-up
References
 It’s OK to Use Tables
 Hey, It’s Still OK to Use Tables
 A Responsive Accessible Table
 Tables, CSS Display Properties,
and ARIA
 Tables, JSON, CSS, ARIA,
RWD, TLAs…
 GitHub Contributions Chart
 Short note on what CSS display
properties do to table semantics
by Steve Faulkner
 Data Tables by Heydon Pickering
 How display: contents; Works by
Ire Aderinokun
 CSS3 — Appendix B: Effects of
display: contents on Unusual
Elements
Questions / Q & A

More Related Content

What's hot

CSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and moreCSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and moreRuss Weakley
 
CSS: a rapidly changing world
CSS: a rapidly changing worldCSS: a rapidly changing world
CSS: a rapidly changing worldRuss Weakley
 
Web technologies: Lesson 2
Web technologies: Lesson 2Web technologies: Lesson 2
Web technologies: Lesson 2nhepner
 
Practical file(XHTML)web designing
Practical file(XHTML)web designingPractical file(XHTML)web designing
Practical file(XHTML)web designingArtiSolanki5
 
Web front end development introduction to html css and javascript
Web front end development introduction to html css and javascriptWeb front end development introduction to html css and javascript
Web front end development introduction to html css and javascriptMarc Huang
 
Css for Development
Css for DevelopmentCss for Development
Css for Developmenttsengsite
 
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...Nicole Sullivan
 
Modular HTML & CSS
Modular HTML & CSSModular HTML & CSS
Modular HTML & CSSShay Howe
 
MTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi DevicesMTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi DevicesHasan Hosgel
 
Joomla! Day Chicago 2011 - Templating the right way - Jonathan Shroyer
Joomla! Day Chicago 2011 - Templating the right way - Jonathan ShroyerJoomla! Day Chicago 2011 - Templating the right way - Jonathan Shroyer
Joomla! Day Chicago 2011 - Templating the right way - Jonathan ShroyerSteven Pignataro
 
Concept of CSS unit3
Concept of CSS unit3Concept of CSS unit3
Concept of CSS unit3SURBHI SAROHA
 
3 coding101 fewd_lesson3_your_first_website 20210105
3 coding101 fewd_lesson3_your_first_website 202101053 coding101 fewd_lesson3_your_first_website 20210105
3 coding101 fewd_lesson3_your_first_website 20210105John Picasso
 
Slow kinda sucks
Slow kinda sucksSlow kinda sucks
Slow kinda sucksTim Wright
 

What's hot (19)

CSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and moreCSS - OOCSS, SMACSS and more
CSS - OOCSS, SMACSS and more
 
CSS: a rapidly changing world
CSS: a rapidly changing worldCSS: a rapidly changing world
CSS: a rapidly changing world
 
Web technologies: Lesson 2
Web technologies: Lesson 2Web technologies: Lesson 2
Web technologies: Lesson 2
 
Unit 3 (it workshop).pptx
Unit 3 (it workshop).pptxUnit 3 (it workshop).pptx
Unit 3 (it workshop).pptx
 
Tybscrc
TybscrcTybscrc
Tybscrc
 
Practical file(XHTML)web designing
Practical file(XHTML)web designingPractical file(XHTML)web designing
Practical file(XHTML)web designing
 
Web front end development introduction to html css and javascript
Web front end development introduction to html css and javascriptWeb front end development introduction to html css and javascript
Web front end development introduction to html css and javascript
 
Introduction to HTML and CSS
Introduction to HTML and CSSIntroduction to HTML and CSS
Introduction to HTML and CSS
 
Html cia
Html ciaHtml cia
Html cia
 
Css for Development
Css for DevelopmentCss for Development
Css for Development
 
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...
 
Modular HTML & CSS
Modular HTML & CSSModular HTML & CSS
Modular HTML & CSS
 
MTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi DevicesMTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi Devices
 
Joomla! Day Chicago 2011 - Templating the right way - Jonathan Shroyer
Joomla! Day Chicago 2011 - Templating the right way - Jonathan ShroyerJoomla! Day Chicago 2011 - Templating the right way - Jonathan Shroyer
Joomla! Day Chicago 2011 - Templating the right way - Jonathan Shroyer
 
Concept of CSS unit3
Concept of CSS unit3Concept of CSS unit3
Concept of CSS unit3
 
Css.html
Css.htmlCss.html
Css.html
 
3 coding101 fewd_lesson3_your_first_website 20210105
3 coding101 fewd_lesson3_your_first_website 202101053 coding101 fewd_lesson3_your_first_website 20210105
3 coding101 fewd_lesson3_your_first_website 20210105
 
Pfnp slides
Pfnp slidesPfnp slides
Pfnp slides
 
Slow kinda sucks
Slow kinda sucksSlow kinda sucks
Slow kinda sucks
 

Similar to CSUN 2020: CSS Display Properties Versus HTML Semantics

Introduction to Bootstrap
Introduction to BootstrapIntroduction to Bootstrap
Introduction to BootstrapRon Reiter
 
Flipping Tables: Displaying Data on Small Screens
Flipping Tables: Displaying Data on Small ScreensFlipping Tables: Displaying Data on Small Screens
Flipping Tables: Displaying Data on Small ScreensStephanie Hobson
 
Caracteristicas Basicas De Htlm
Caracteristicas Basicas De HtlmCaracteristicas Basicas De Htlm
Caracteristicas Basicas De HtlmMaria S Rivera
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular UJoonas Lehtinen
 
Nanoformats
NanoformatsNanoformats
Nanoformatsrozario
 
Web Developement Workshop (Oct 2009 -Day 1)
Web Developement Workshop (Oct 2009 -Day 1)Web Developement Workshop (Oct 2009 -Day 1)
Web Developement Workshop (Oct 2009 -Day 1)Linux User's Group
 
HTML [Basic] --by Abdulla-al Baset
HTML [Basic] --by Abdulla-al BasetHTML [Basic] --by Abdulla-al Baset
HTML [Basic] --by Abdulla-al BasetAbdulla-al Baset
 
Static web sites assignment 1 philip lemmon1
Static web sites assignment 1 philip lemmon1Static web sites assignment 1 philip lemmon1
Static web sites assignment 1 philip lemmon1Lemmon12
 
basic knowledge abot html
basic knowledge abot htmlbasic knowledge abot html
basic knowledge abot htmlAnkit Dubey
 
CSS Frameworks
CSS FrameworksCSS Frameworks
CSS FrameworksMike Crabb
 
World wide web with multimedia
World wide web with multimediaWorld wide web with multimedia
World wide web with multimediaAfaq Siddiqui
 
Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Tatsuhiko Miyagawa
 

Similar to CSUN 2020: CSS Display Properties Versus HTML Semantics (20)

Introduction to Bootstrap
Introduction to BootstrapIntroduction to Bootstrap
Introduction to Bootstrap
 
Flipping Tables: Displaying Data on Small Screens
Flipping Tables: Displaying Data on Small ScreensFlipping Tables: Displaying Data on Small Screens
Flipping Tables: Displaying Data on Small Screens
 
Caracteristicas Basicas De Htlm
Caracteristicas Basicas De HtlmCaracteristicas Basicas De Htlm
Caracteristicas Basicas De Htlm
 
Html
HtmlHtml
Html
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular U
 
Nanoformats
NanoformatsNanoformats
Nanoformats
 
Web Developement Workshop (Oct 2009 -Day 1)
Web Developement Workshop (Oct 2009 -Day 1)Web Developement Workshop (Oct 2009 -Day 1)
Web Developement Workshop (Oct 2009 -Day 1)
 
Web I - 03 - Tables
Web I - 03 - TablesWeb I - 03 - Tables
Web I - 03 - Tables
 
HTML Tutorials
HTML TutorialsHTML Tutorials
HTML Tutorials
 
HTML [Basic] --by Abdulla-al Baset
HTML [Basic] --by Abdulla-al BasetHTML [Basic] --by Abdulla-al Baset
HTML [Basic] --by Abdulla-al Baset
 
Table and Form HTML&CSS
Table and Form HTML&CSSTable and Form HTML&CSS
Table and Form HTML&CSS
 
Static web sites assignment 1 philip lemmon1
Static web sites assignment 1 philip lemmon1Static web sites assignment 1 philip lemmon1
Static web sites assignment 1 philip lemmon1
 
basic knowledge abot html
basic knowledge abot htmlbasic knowledge abot html
basic knowledge abot html
 
Artdm171 Week4 Tags
Artdm171 Week4 TagsArtdm171 Week4 Tags
Artdm171 Week4 Tags
 
CSS Frameworks
CSS FrameworksCSS Frameworks
CSS Frameworks
 
lect9
lect9lect9
lect9
 
lect9
lect9lect9
lect9
 
World wide web with multimedia
World wide web with multimediaWorld wide web with multimedia
World wide web with multimedia
 
Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8
 
HTML.pptx
HTML.pptxHTML.pptx
HTML.pptx
 

More from Adrian Roselli

Selfish Accessibility —DevOpsDays Buffalo
Selfish Accessibility —DevOpsDays BuffaloSelfish Accessibility —DevOpsDays Buffalo
Selfish Accessibility —DevOpsDays BuffaloAdrian Roselli
 
Selfish Accessibility — YGLF Vilnius
Selfish Accessibility — YGLF VilniusSelfish Accessibility — YGLF Vilnius
Selfish Accessibility — YGLF VilniusAdrian Roselli
 
Role of Design in Accessibility — VilniusJS Meet-up
Role of Design in Accessibility — VilniusJS Meet-upRole of Design in Accessibility — VilniusJS Meet-up
Role of Design in Accessibility — VilniusJS Meet-upAdrian Roselli
 
The Role of Design in Accessibility — a11yTO Meet-up
The Role of Design in Accessibility — a11yTO Meet-upThe Role of Design in Accessibility — a11yTO Meet-up
The Role of Design in Accessibility — a11yTO Meet-upAdrian Roselli
 
Prototyping Accessibility: Booster 2019
Prototyping Accessibility: Booster 2019Prototyping Accessibility: Booster 2019
Prototyping Accessibility: Booster 2019Adrian Roselli
 
Selfish Accessibility — Harbour Front HK
Selfish Accessibility — Harbour Front HKSelfish Accessibility — Harbour Front HK
Selfish Accessibility — Harbour Front HKAdrian Roselli
 
Selfish Accessibility — CodeDaze
Selfish Accessibility — CodeDazeSelfish Accessibility — CodeDaze
Selfish Accessibility — CodeDazeAdrian Roselli
 
Prototyping Accessibility - WordCamp Europe 2018
Prototyping Accessibility - WordCamp Europe 2018Prototyping Accessibility - WordCamp Europe 2018
Prototyping Accessibility - WordCamp Europe 2018Adrian Roselli
 
Guelph A11y Conf: Everything I Know About Accessibility I Learned from Stack ...
Guelph A11y Conf: Everything I Know About Accessibility I Learned from Stack ...Guelph A11y Conf: Everything I Know About Accessibility I Learned from Stack ...
Guelph A11y Conf: Everything I Know About Accessibility I Learned from Stack ...Adrian Roselli
 
Fringe Accessibility — Portland UX
Fringe Accessibility — Portland UXFringe Accessibility — Portland UX
Fringe Accessibility — Portland UXAdrian Roselli
 
Mind Your Lang — London Web Standards
Mind Your Lang — London Web StandardsMind Your Lang — London Web Standards
Mind Your Lang — London Web StandardsAdrian Roselli
 
Inclusive Usability Testing - WordCamp London
Inclusive Usability Testing - WordCamp LondonInclusive Usability Testing - WordCamp London
Inclusive Usability Testing - WordCamp LondonAdrian Roselli
 
CSUN 2018: Everything I Know About Accessibility I Learned from Stack Overflow
CSUN 2018: Everything I Know About Accessibility I Learned from Stack OverflowCSUN 2018: Everything I Know About Accessibility I Learned from Stack Overflow
CSUN 2018: Everything I Know About Accessibility I Learned from Stack OverflowAdrian Roselli
 
Inclusive Usability Testing — a11yTOCamp
Inclusive Usability Testing — a11yTOCampInclusive Usability Testing — a11yTOCamp
Inclusive Usability Testing — a11yTOCampAdrian Roselli
 
Selfish Accessibility - Girl Develop It Buffalo
Selfish Accessibility - Girl Develop It BuffaloSelfish Accessibility - Girl Develop It Buffalo
Selfish Accessibility - Girl Develop It BuffaloAdrian Roselli
 
Everything I Know About Accessibility I Learned from Stack Overflow
Everything I Know About Accessibility I Learned from Stack OverflowEverything I Know About Accessibility I Learned from Stack Overflow
Everything I Know About Accessibility I Learned from Stack OverflowAdrian Roselli
 
Selfish Accessibility — WordCamp Europe 2017
Selfish Accessibility — WordCamp Europe 2017Selfish Accessibility — WordCamp Europe 2017
Selfish Accessibility — WordCamp Europe 2017Adrian Roselli
 
Inclusive User Testing — Guelph Accessibility Conference
Inclusive User Testing — Guelph Accessibility ConferenceInclusive User Testing — Guelph Accessibility Conference
Inclusive User Testing — Guelph Accessibility ConferenceAdrian Roselli
 
Selfish Accessibility: MinneWebCon 2017
Selfish Accessibility: MinneWebCon 2017Selfish Accessibility: MinneWebCon 2017
Selfish Accessibility: MinneWebCon 2017Adrian Roselli
 
Fringe Accessibility: London Web Standards
Fringe Accessibility: London Web StandardsFringe Accessibility: London Web Standards
Fringe Accessibility: London Web StandardsAdrian Roselli
 

More from Adrian Roselli (20)

Selfish Accessibility —DevOpsDays Buffalo
Selfish Accessibility —DevOpsDays BuffaloSelfish Accessibility —DevOpsDays Buffalo
Selfish Accessibility —DevOpsDays Buffalo
 
Selfish Accessibility — YGLF Vilnius
Selfish Accessibility — YGLF VilniusSelfish Accessibility — YGLF Vilnius
Selfish Accessibility — YGLF Vilnius
 
Role of Design in Accessibility — VilniusJS Meet-up
Role of Design in Accessibility — VilniusJS Meet-upRole of Design in Accessibility — VilniusJS Meet-up
Role of Design in Accessibility — VilniusJS Meet-up
 
The Role of Design in Accessibility — a11yTO Meet-up
The Role of Design in Accessibility — a11yTO Meet-upThe Role of Design in Accessibility — a11yTO Meet-up
The Role of Design in Accessibility — a11yTO Meet-up
 
Prototyping Accessibility: Booster 2019
Prototyping Accessibility: Booster 2019Prototyping Accessibility: Booster 2019
Prototyping Accessibility: Booster 2019
 
Selfish Accessibility — Harbour Front HK
Selfish Accessibility — Harbour Front HKSelfish Accessibility — Harbour Front HK
Selfish Accessibility — Harbour Front HK
 
Selfish Accessibility — CodeDaze
Selfish Accessibility — CodeDazeSelfish Accessibility — CodeDaze
Selfish Accessibility — CodeDaze
 
Prototyping Accessibility - WordCamp Europe 2018
Prototyping Accessibility - WordCamp Europe 2018Prototyping Accessibility - WordCamp Europe 2018
Prototyping Accessibility - WordCamp Europe 2018
 
Guelph A11y Conf: Everything I Know About Accessibility I Learned from Stack ...
Guelph A11y Conf: Everything I Know About Accessibility I Learned from Stack ...Guelph A11y Conf: Everything I Know About Accessibility I Learned from Stack ...
Guelph A11y Conf: Everything I Know About Accessibility I Learned from Stack ...
 
Fringe Accessibility — Portland UX
Fringe Accessibility — Portland UXFringe Accessibility — Portland UX
Fringe Accessibility — Portland UX
 
Mind Your Lang — London Web Standards
Mind Your Lang — London Web StandardsMind Your Lang — London Web Standards
Mind Your Lang — London Web Standards
 
Inclusive Usability Testing - WordCamp London
Inclusive Usability Testing - WordCamp LondonInclusive Usability Testing - WordCamp London
Inclusive Usability Testing - WordCamp London
 
CSUN 2018: Everything I Know About Accessibility I Learned from Stack Overflow
CSUN 2018: Everything I Know About Accessibility I Learned from Stack OverflowCSUN 2018: Everything I Know About Accessibility I Learned from Stack Overflow
CSUN 2018: Everything I Know About Accessibility I Learned from Stack Overflow
 
Inclusive Usability Testing — a11yTOCamp
Inclusive Usability Testing — a11yTOCampInclusive Usability Testing — a11yTOCamp
Inclusive Usability Testing — a11yTOCamp
 
Selfish Accessibility - Girl Develop It Buffalo
Selfish Accessibility - Girl Develop It BuffaloSelfish Accessibility - Girl Develop It Buffalo
Selfish Accessibility - Girl Develop It Buffalo
 
Everything I Know About Accessibility I Learned from Stack Overflow
Everything I Know About Accessibility I Learned from Stack OverflowEverything I Know About Accessibility I Learned from Stack Overflow
Everything I Know About Accessibility I Learned from Stack Overflow
 
Selfish Accessibility — WordCamp Europe 2017
Selfish Accessibility — WordCamp Europe 2017Selfish Accessibility — WordCamp Europe 2017
Selfish Accessibility — WordCamp Europe 2017
 
Inclusive User Testing — Guelph Accessibility Conference
Inclusive User Testing — Guelph Accessibility ConferenceInclusive User Testing — Guelph Accessibility Conference
Inclusive User Testing — Guelph Accessibility Conference
 
Selfish Accessibility: MinneWebCon 2017
Selfish Accessibility: MinneWebCon 2017Selfish Accessibility: MinneWebCon 2017
Selfish Accessibility: MinneWebCon 2017
 
Fringe Accessibility: London Web Standards
Fringe Accessibility: London Web StandardsFringe Accessibility: London Web Standards
Fringe Accessibility: London Web Standards
 

Recently uploaded

Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Delhi Call girls
 
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.soniya singh
 
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Sheetaleventcompany
 
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$kojalkojal131
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girladitipandeya
 
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...APNIC
 
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine ServiceHot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Servicesexy call girls service in goa
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...tanu pandey
 
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...aditipandeya
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Call Girls in Nagpur High Profile
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...Diya Sharma
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebJames Anderson
 
How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)Damian Radcliffe
 
10.pdfMature Call girls in Dubai +971563133746 Dubai Call girls
10.pdfMature Call girls in Dubai +971563133746 Dubai Call girls10.pdfMature Call girls in Dubai +971563133746 Dubai Call girls
10.pdfMature Call girls in Dubai +971563133746 Dubai Call girlsstephieert
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝soniya singh
 

Recently uploaded (20)

Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
 
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
 
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
 
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
Call Girls Dubai Prolapsed O525547819 Call Girls In Dubai Princes$
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
 
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
 
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 26 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
 
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine ServiceHot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
 
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
 
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
 
How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)How is AI changing journalism? (v. April 2024)
How is AI changing journalism? (v. April 2024)
 
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
10.pdfMature Call girls in Dubai +971563133746 Dubai Call girls
10.pdfMature Call girls in Dubai +971563133746 Dubai Call girls10.pdfMature Call girls in Dubai +971563133746 Dubai Call girls
10.pdfMature Call girls in Dubai +971563133746 Dubai Call girls
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
 

CSUN 2020: CSS Display Properties Versus HTML Semantics

  • 2. Agenda  About Me  Use Case  HTML Tables  Responsive Web Design (RWD)  CSS Display Properties  ARIA to the Rescue?  ARIA Grid  display:contents  How is This a Thing?  Wrap-up
  • 3. Adrian Roselli • Building for the web since 1993, • Learn more at AdrianRoselli.com, • Avoid on Twitter @aardrian.
  • 5. UseCase  Build a layout that can adapt to screen sizes,  Uses a native HTML element that has inbuilt structure,  Also has inbuilt semantics,  Provides a specific set of nodes in the accessibility tree.
  • 7. HTMLTables  We will use HTML tables as our proxy,  They have a long history on the web,  Used for layout and tabular data,  Have a specific DOM structure,  Have their own navigation methods in screen readers.
  • 8. BasicHTMLTable  Make a valid HTML <table>,  Avoid spanning cells,  Make sure you use <th> for headers,  Add a useful <caption>.
  • 9. <table> <caption>Books I May or May Not Have Read</caption> <tr> <th>Author</th> <th>Title</th> <th>Year</th> </tr> <tr> <td>Miguel De Cervantes</td> <td>The Ingenious Gentleman Don Quixote of La Mancha</td> <td>1605</td> </tr> […] </table> BasicHTMLTable
  • 10. Complexity#1:RowHeaders  Continue to use <th>,  Add the scope attribute using the values (as appropriate): - row, col, rowgroup, colgroup.  Conforms to WCAG technique H63: Using the scope attribute to associate header cells and data cells in data tables.
  • 11. Complexity#1:RowHeaders <table> <caption>Contact Information</caption> <tr> <td></td> <th scope="col">Name</th> <th scope="col">Phone#</th> <th scope="col">Fax#</th> <th scope="col">City</th> </tr> <tr> <td>1.</td> <th scope="row">Joel Garner</th> <td>412-212-5421</td> <td>412-212-5400</td> <td>Pittsburgh</td> </tr> […] </table>
  • 12. Complexity#2:SpanningCells  Continue to use <th>,  Every <th> gets an id,  Every <td> gets a headers attribute  The headers value is the id of the <th> you want it to use,  Conforms to WCAG 2.0 technique H43: Using id and headers attributes to associate data cells with header cells in data tables.
  • 13. Complexity#2:SpanningCells <table> <tr> <th rowspan="2" id="h">Homework</th> <th colspan="3" id="e">Exams</th> <th colspan="3" id="p">Projects</th> </tr> <tr> <th id="e1" headers="e">1</th> <th id="e2" headers="e">2</th> <th id="ef" headers="e">Final</th> <th id="p1" headers="p">1</th> <th id="p2" headers="p">2</th> <th id="pf" headers="p">Final</th> </tr> <tr> <td headers="h">15%</td> <td headers="e e1">15%</td> <td headers="e e2">15%</td> <td headers="e ef">20%</td> <td headers="p p1">10%</td> <td headers="p p2">10%</td> <td headers="p pf">15%</td> </tr> </table>
  • 15. ResponsiveTables  Specifically talking about viewport width,  Let it scroll off-screen: - Add tabindex="0" for keyboard users, - Add role="region" so screen readers announce it, - Add aria-labelledby so screen readers give it a name, - Set the aria-labelledby value to the id of the <caption>.
  • 16. ResponsiveTable <div role="region" aria-labeledby="Cap1" tabindex="0"> <table> <caption id="Cap1">Books I May or May Not Have Read</caption> <tr> <th>Author</th> <th>Title</th> <th>Year</th> <th>ISBN-13</th> <th>ISBN-10</th> </tr> <tr> <td>Miguel De Cervantes</td> <td>The Ingenious Gentleman Don Quixote of La Mancha</td> <td>1605</td> <td>9783125798502</td> <td>3125798507</td> </tr> […] </table> </div>
  • 17. EvenMoreResponsive • ‘Responsive’ is not just about viewport width; • Even if it were, a scrolling table may not cut it.
  • 21. RejiggeringtheLayout @media screen and (max-width: 37em), print and (max-width: 5in) { table, tr, td { display: block; } […] td { display: grid; grid-template-columns: 4em auto; grid-gap: 1em 0.5em; } }
  • 24. CSSDisplayProperties  The following override native semantics in the browser: - display: block - display: inline - display: grid - display: flex - display: contents
  • 25. CSSDisplayProperties  Nothing in the HTML / CSS specifications mandates this,  Does not work in reverse: - display: table - display: table-cell
  • 26. AssistiveTechnology(AT)  Browsers do not convey correct semantics to AT,  Users who rely on these semantics can be stranded: - Understanding content, - Navigating a page.
  • 27. TablesasaCanary  Breaking semantics of any single required child element can break entire table: - A missing row, column or row header; - The parent table even with good rows and cells.
  • 28.
  • 31. AccessibilityTree  A sub/super-set of the DOM,  Includes UI objects of browser & objects of the document,  Created in tree for every DOM element that: - Fires an accessibility event, - Has a property, relationship or feature which needs to be exposed.  Is abstracted for dev tools.
  • 36.
  • 37. Chromev80  Released February 19, 2020,  Fixes flex bug on table,  Caused me to re-examine overall,  Other fixes / changes are in there,  Browsers based on Blink (ChromiEdge) will benefit.
  • 38.
  • 39. TheWebIsNotChrome Screen Reader & Browser # of Respondents % of Respondents JAWS with Chrome 259 21.4% NVDA with Firefox 237 19.6% NVDA with Chrome 218 18.0% JAWS with Internet Explorer 139 11.5% VoiceOver with Safari 110 9.1% JAWS with Firefox 71 5.9% VoiceOver with Chrome 36 3.0% NVDA with Internet Explorer 14 1.2% Other combinations 126 10.4% WebAIM Screen Reader Survey #8 (2019)
  • 40. Chrome80/Windows10 CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button> display: flex ✔ ✔ ✔ ✔ display: grid ✔ ✔ ✔ ✔ display: block ✔ ✔ ✔ ✔ display: inline-block ✔ ✔ ✔ ✔ display: contents ✔ ❌ ✔ ✔
  • 41. Firefox73/Windows10 CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button> display: flex ❌1 ✔ ✔ ✔ display: grid ❌1 ✔ ✔ ✔ display: block ✔ ✔ ✔ ✔ display: inline-block ✔ ✔2 ✔ ✔ display: contents ❌ ✔2 ✔ ✔3
  • 42. Safari/macOS10.15.2 CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button> display: flex ❌ ✔ ✔ ✔ display: grid ❌ ✔ ✔ ✔ display: block ❌ ❌1 ✔ ✔ display: inline-block ❌ ❌1 ✔ ✔ display: contents ❌ ❌1 ❌ ❌
  • 43. Chrome80/Android10 CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button> display: flex ✔ ✔ ✔ ✔ display: grid ✔ ✔ ✔ ✔ display: block ✔ ✔ ✔ ✔ display: inline-block ✔ ✔ ✔ ✔ display: contents ✔ ❌ ✔ ✔
  • 44. Safari/iOS CSS <table>, etc. <ul>, <ol>, <dl> <h#> <button> display: flex ❌ ✔ ✔ ✔ display: grid ❌ ✔ ✔ ✔ display: block ❌1 ❌ ✔ ✔ display: inline-block ❌1 ❌ ✔ ✔ display: contents ❌1 ❌ ❌ ❌2
  • 45. display:table  display: table, table-caption, table-row, table-cell;  Each of these will add layout-table semantics in Chrome v80,  There is no CSS display property for col/row headers,  Requires a well-structured DOM,  Not a workaround, fix, or way to do <div>s-as-tables.
  • 46.
  • 47. display:table  As LayoutTable, LayoutRowTable, LayoutCellTable;  JAWS, Narrator will read this as a table, - But without col/row headers,  NVDA, VO, TalkBack will not read this as a table.
  • 48. Chromev82  Will support align-items on <button>s, - When display: inline-grid / grid / inline-flex / flex is applied,  Lack of support has hampered <button> uptake in these layouts,  Expect to see more <button>s with more display properties.
  • 50. ARIATableRoles  <table role="table">  <caption role="caption">  <thead|tbody|tfoot role="rowgroup">  <tr role="row">  <td role="cell">  <th scope="col" role="columnheader">  <th scope="row" role="rowheader">  Cannot address re-ordered content,  Cannot address hidden content.
  • 51. ARIATableRoles  Do not use ARIA grid roles,  Test with a screen reader,  If your tables are generated from script, update the script.
  • 52. TablewithARIA <table id="Books" role="table"> <caption id="Cap1" role="caption">Books I May or May Not Have Read</caption> <tr role="row"> <th role="columnheader">Author</th> <th role="columnheader">Title</th> <th role="columnheader">Year</th> <th role="columnheader">ISBN-13</th> <th role="columnheader">ISBN-10</th> </tr> <tr role="row"> <td role="cell">Miguel De Cervantes</td> <td role="cell">The Ingenious Gentleman Don Quixote of La Mancha</td> <td role="cell">1605</td> <td role="cell">9783125798502</td> <td role="cell">3125798507</td> </tr> […] <tr role="row"> <td role="cell">George Orwell</td> <td role="cell">Nineteen Eighty-Four</td> <td role="cell">1948</td> <td role="cell">9780451524935</td> <td role="cell">0451524934</td> </tr> </table>
  • 55. ARIAGrid  Do not use for simple data tables,  Intended to mimic Excel-style spreadsheet,  A grid is a composite widget so it: - Contains multiple interactive controls, - Has only one tab-stop in the sequence, - Requires author to provide code to manage focus within.
  • 57. Whatisdisplay:contents  The element does not generate any boxes, - Its children and pseudo-elements still generate boxes, - Text runs as normal,  For box generation & layout, element treated as if replaced in element tree by its contents, - As if opening and closing tags removed,  Also yanks it from accessibility tree.
  • 58. Whydisplay:contentsIsMoreDangerous  You cannot add it back to the accessibility tree with ARIA, - You can give it an accessible name and properties, - But these are not passed to screen readers,  Some browsers do not hand the information off,  If used as a poor-dev’s CSS reset: - Will hide elements from assistive technology, - Will hide semantics from assistive technology.
  • 65. Bugs!  Firefox bug 1455357 (19-Apr-2018): Setting grid item to display: contents resets its accessible role  Chromium Issue 835455 (20-Apr-2018): Element not exposed to accessibility tree when it is set to display: contents  Safari bug 39630240 (which I cannot see because my AppleID may not have the needed permissions to see it)  CSSWG #2632 (30-Apr-2018): [css-display][css-aam][selectors-4] How elements with `display:contents` get focused?
  • 66. How Is This a Thing?
  • 67. AssistiveTechIsNotatFault  Not screen readers’ fault,  Accessibility information comes from browser,  Screen reader needs more than DOM to understand page,  Cannot ignore all but the DOM: - Years of HTML tables for layout informed screen readers, - Screen readers developed heuristics for dealing with tables.
  • 68. DetectingATIsNotViable  Users generally don’t want us to be able to detect screen readers,  Not all screen reader users are blind anyway,  Mouse actions are a poor proxy for sighted screen reader users,  Disabling a site’s CSS for screen reader users is impractical (and a terrible, terrible idea).
  • 69. CSSIsNotBlameless  CSS already impacts HTML semantics — display: none,  Using display: table does (generally) not impart HTML table semantics,  CSS flex or grid makes it easy for content order and source order to disagree,  CSS grid to lay out an HTML table still won’t be a table semantically.
  • 70. ARIAIsNotIdeal  You must understand ARIA and the table structure,  This will require you to keep current on SR and browser support,  You have to manage headers and other content you might hide,  Consider how this scales with CSS does not load,  This is not the purpose of ARIA,  The technique here is a stop-gap.
  • 71. TheBrowserIsNotRight  The CSS spec does not state that semantics should be dropped,  As display properties, there is no reason to remove them,  The accessibility tree should not care about visuals.
  • 73. References  It’s OK to Use Tables  Hey, It’s Still OK to Use Tables  A Responsive Accessible Table  Tables, CSS Display Properties, and ARIA  Tables, JSON, CSS, ARIA, RWD, TLAs…  GitHub Contributions Chart  Short note on what CSS display properties do to table semantics by Steve Faulkner  Data Tables by Heydon Pickering  How display: contents; Works by Ire Aderinokun  CSS3 — Appendix B: Effects of display: contents on Unusual Elements

Editor's Notes

  1. Building for the web since 1993, Learn more at AdrianRoselli.com, Avoid on Twitter @aardrian.
  2. Let’s talk about an example use case Think about an HTML structure that challenges developers across screen sizes and contexts
  3. HTML has a great way to present information in two axes. Tables will be my proxy throughout First a recap of tables
  4. Coding them is easy, though it can be monotonous.
  5. A series of rows, consistently coded. A header. A caption.
  6. Sure, they can be a bit more complex, but that only adds some attributes.
  7. Generally spanning is a bad idea, but it has its place.
  8. Responsive design may have been the cause of some of this resistance to tables Lists have fared much better. Now let’s look at how RWD complicates things
  9. Tables are the bane of the typical responsive developer. This is arguably the easiest and least-risky approach
  10. Still using tables as our example. Requirements might demand some visual restructuring
  11. Print is a media query, just like width, so support it.
  12. You likely will have to do nothing on a simple table. Unless you are using background colors or images.
  13. Perhaps you want to try a more novel way of adapting to a narrow width. You can rearrange the table cells using CSS. CSS display properties just as block, grid, flex can all be powerful.
  14. I convert everything in the table to block to make layout easier, Dumps all the table, row, and cell styling, I use grid on the cells to make it easier to add the ‘headings’ inline.
  15. I convert everything in the table to block to make layout easier, Dumps all the table, row, and cell styling, I use grid on the cells to make it easier to add the ‘headings’ inline.
  16. CSS as implemented in browsers today can remove semantics, Conversely, you can not add it back with CSS
  17. CSS as implemented in browsers today can remove semantics, Conversely, you can not add it back with CSS
  18. If any one part of a valid table goes away, the entire thing falls down. Mis-count of rows or columns, Headers associated with wrong data. Harder to see this in action with elements that do not have so many required children in a required structure. A broken table means your code may have this elsewhere.
  19. Github just wanted to prevent wide tables from breaking its layout. It made the table scrollable instead of a container. To do that required .markdown-body table {display: block;}. That made the table useless to SR and keyboard users.
  20. Using NVDA with Firefox Hit T to get to the table Using Ctrl + Alt + arrow keys to navigate the table Announces column headings as I change columns Tells me when at the edge
  21. Using NVDA with Firefox Hitting T will not bring me to the table Using Ctrl + Alt + arrow keys will not work Does not announce column nor row count Does not tell me when I am at the edge
  22. Table before CSS display properties on the left Table after CSS display properties on the right Note how the entire accessibility tree is gone
  23. Caption before CSS display properties on the left Caption after CSS display properties on the right Its caption role is maintained But it is not associated with a table
  24. Th before CSS display properties on the left Th after CSS display properties on the right Not associated with the table No computed properties
  25. Td before CSS display properties on the left Td after CSS display properties on the right Not associated with the table No computed properties
  26. Then things went all wobbly
  27. Chrome 80 was released. It fixed a bunch of issues related to tables.
  28. The highlighted cell is a flex item in a flex container. This image shows the accessibility inspector. The inspector shows it as a cell in a row. Yes, it is always gridcell
  29. This does not mean all is well. Chrome with JAWS makes up only ~22% of screen reader users. Chrome with NVDA is another 18%. Remember this is survey data. We don’t know how other assistive technology is handling it (I ran out of time to test).
  30. Chrome 80 does well with flex, grid, block, inline-block, and contents. Across tables, lists, headings, and buttons. Except lists with display: contents.
  31. <th>s with flex and grid are announced as cells, not col or row header, Inserts text leaf between each one, Issues a keyboard use warning.
  32. But recognizes <dl>
  33. Chrome 80 does well with flex, grid, block, inline-block, and contents. Across tables, lists, headings, and buttons. Except lists with display: contents. Essentially performs as desktop
  34. Treats all cells belonging in column 1. Still fires on double-tap with VO.
  35. If you create a structure like a table and add table-related display styles, Chrome calls it a layout table.
  36. CSS align-items defines the cross-axis The vertical axis in LTR languages Used for vertical alignment (centering, expanding, top, bottom, etc.)
  37. There is a long aversion to tables owing to their mis-use for layout. So some people try to use other HTML elements, They opt to “throw ARIA” at them.
  38. You can use ARIA to re-insert lost semantics Caption role coming in ARIA 1.2
  39. Grid slides coming up
  40. Using NVDA with Firefox Hit T to get to the table Using Ctrl + Alt + arrow keys to navigate the table Announces column headings as I change columns Tells me when at the edge
  41. ARIA grids are a terrible idea and are not for data tables. Not covering in this talk
  42. I am seeing this quickly become the new hotness. I want to call this one out specifically.
  43. I am seeing this quickly become the new hotness. I want to call this one out specifically.
  44. We know Chrome v80 has just addressed a bunch of issues, I covered it in the previous slides, The following slides show an older version of Chrome, They also demonstrate how you can confirm support without needing to fire up all your tools.
  45. Table before CSS display properties on the left Table after CSS display properties on the right Note how it is ignored in the accessibility tree The role does not bring it back
  46. ul before CSS display properties on the left ul after CSS display properties on the right Note how it is ignored in the accessibility tree The role does not bring it back
  47. button before CSS display properties on the left button after CSS display properties on the right Note how it is ignored in the accessibility tree The role does not bring it back
  48. h2 before CSS display properties on the left h2 after CSS display properties on the right Note how it is ignored in the accessibility tree The role does not bring it back
  49. 30 seconds of navigating by element type then by virtual cursor Some of this support has changed Again, see previous slides This demonstrates how you can test.
  50. These bugs are still open. Even the fixes in Chrome v80 do not close the Chromium issue.
  51. You may ask yourself: where is my beautiful table? You may ask yourself: where are the table semantics? And you may ask yourself: why is this so broken?
  52. Because developers used layout tables for years, SRs had to improvise to make them useable. Still using tables as my proxy, focus on SRs (which are not the only AT).
  53. How do you account for those with mobility impairments who do not use a mouse? Or mobile screen reader users who rely on touch gestures
  54. Think about how it used for vertical centering because vertical centering was not a thing in CSS for so long
  55. First Rule of ARIA! As ARIA fixes it in browser exposure, should help other AT.