SlideShare a Scribd company logo
1
Hello !
slid.do/armadajs
Stefan Feješ
" 20yo Frontend Engineer
🎤 Organizes Novi Sad JS
🐙 Open source contributor
fejes713
Stefan Feješ
" 20yo Frontend Engineer
🎤 Organizes Novi Sad JS
🐙 Open source contributor
fejes713
Stefan Feješ
" 20yo Frontend Engineer
🎤 Organizes Novi Sad JS
🐙 Open source contributor
fejes713
fejes713
Accessible JavaScript applications
What is accessibility?
fejes713
– Oxford English Dictionary
“The quality of being easily reached, entered, or used
by people who have a disability”
accessibile:
fejes713
… and what about the Web?
fejes713
“A blind man couldn’t order
pizza from Domino’s. The
company wants the Supreme
Court to say websites don’t
have to be accessible”
– BBC News
About 15% of the world's population have some form of disability
fejes713
Types of disabilities:
• visual 👓
• physical
• cognitive 🧠
• auditory 💬
• …
fejes713
Types of disabilities:
• visual 👓
• physical
• cognitive 🧠
• auditory 💬
• …
fejes713
Types of disabilities:
• visual 👓
• physical
• cognitive 🧠
• auditory 💬
• …
fejes713
Types of disabilities:
• visual 👓
• physical
• cognitive 🧠
• auditory 💬
• …
fejes713
Types of disabilities:
• visual 👓
• physical
• cognitive 🧠
• auditory 💬
• …
fejes713
so what are the problems?
fejes713
visually impaired users
Screen readers
fejes713
Screen readers
can read all text visible on a page
can read some tags that a sighted user will not be able to see
can list all headers and links
can’t read text based on css layout
can’t read text on images
can’t detect navigation
fejes713
Screen readers
can read all text visible on a page
can read some tags that a sighted user will not be able to see
can list all headers and links
can’t read text based on css layout
can’t read text on images
can’t detect navigation
fejes713
Screen readers
can read all text visible on a page
can read some tags that a sighted user will not be able to see
can list all headers and links
can’t read text based on css layout
can’t read text on images
can’t detect navigation
fejes713
Screen readers
can read all text visible on a page
can read some tags that a sighted user will not be able to see
can list all headers and links
can’t read text based on css layout
can’t read text on images
can’t detect navigation
fejes713
Screen readers
can read all text visible on a page
can read some tags that a sighted user will not be able to see
can list all headers and links
can’t read text based on css layout
can’t read text on images
can’t detect navigation
fejes713
The alt attribute
The alt attribute
• always set the alt attribute
• alt=“” for decorative images
• put the period in the end at of the alt attribute
The alt attribute
• always set the alt attribute
• alt=“” for decorative images
• put the period in the end at of the alt attribute
The alt attribute
• always set the alt attribute
• alt=“” for decorative images
• put the period in the end at of the alt attribute
fejes713
fejes713
fejes713
"captions": [
{
"text": "a hand holding a cellphone",
"confidence": 0.9583763512737793
}
]
Navigation
fejes713
<Navigation /> <Container />
fejes713
Announcing changes
import React from "react";
class Announcements extends React.Component {
render() {
return (
<div aria-live="polite" aria-atomic="true"
className="visuallyhidden">
{this.props.message}
</div>
);
}
};
export default Announcements;
fejes713
Announcing changes
import React from "react";
class Announcements extends React.Component {
render() {
return (
<div aria-live="polite" aria-atomic="true"
className="visuallyhidden">
{this.props.message}
</div>
);
}
};
export default Announcements;
fejes713
Announcing changes
import React from "react";
class Announcements extends React.Component {
render() {
return (
<div aria-live="polite" aria-atomic="true"
className="visuallyhidden">
{this.props.message}
</div>
);
}
};
export default Announcements;
// Vue.js - change tab title on route switch
router.beforeEach((to, from, next) => {
document.title = `${to.name} - Your site name`;
next();
});
fejes713
Change page titles on each route
content
skip link example
fejes713
Physically impaired users
• Reachable custom elements
• Tab, Space, Escape, Arrow keys
• Visible focus styles
fejes713
Keyboard navigation
tabindex
can make custom elements focusable and ugly
doesn’t make custom elements accessible without additional effor
💡 Rules to follow:
fejes713
always set tabIndex on custom interactive elements
tabIndex="0" // in regular tab order
tabIndex="-1" // focusable by JavaScript only
tabIndex="1" // not recommended!
let mouseDown = false;
element.addEventListener('mousedown', () => {
mouseDown = true;
});
element.addEventListener('mouseup', () => {
mouseDown = false;
});
element.addEventListener('focus', (event) => {
if (mouseDown) {
event.target.blur(); // removes blue outline
}
});
fejes713
ARIA (accessible rich internet applications)
can make custom elements fully accessible
can expose a11y information for custom elements
💡 Some of aria-* attributes:
fejes713
role="button" // defines type of custom element
aria-label="open" // meaningful label to go with it
<div class="button">
Sign up!
</div>
fejes713
<div
class="button"
tabindex="0"
role=“button"
aria-label="Open sign up modal”
onClick={modalHandler}
>
Sign up!
</div>
→
❌ don’t ✔ do
custom el. = tabIndex + role + label + aria-* + event handler
<div class="button">
Sign up!
</div>
fejes713
<button
class=“button"
aria-label="Open sign up modal”
onClick={modalHandler}
>
Sign up!
</button>
→
❌ don’t ✔ 🔥
custom el. = tabIndex + role + label + aria-* + event handler
Keyboard traps and modals
Inaccessible modals 🤒
fejes713
fejes713
Accessible modals
should be closed once the overlay or ESC key is clicked
should toggle aria-hidden attribute on modal
should maintain focus position before and after toggling modal
should focus the first focusable element within the modal
should trap the user’s focus within the modal
fejes713
Accessible modals
should be closed once the overlay or ESC key is clicked
should toggle aria-hidden attribute on modal
should maintain focus position before and after toggling modal
should focus the first focusable element within the modal
should trap the user’s focus within the modal
fejes713
Accessible modals
should be closed once the overlay or ESC key is clicked
should toggle aria-hidden attribute on modal
should maintain focus position before and after toggling modal
should focus the first focusable element within the modal
should trap the user’s focus within the modal
fejes713
Accessible modals
should be closed once the overlay or ESC key is clicked
should toggle aria-hidden attribute on modal
should maintain focus position before and after toggling modal
should focus the first focusable element within the modal
should trap the user’s focus within the modal
fejes713
Accessible modals
should be closed once the overlay or ESC key is clicked
should toggle aria-hidden attribute on modal
should maintain focus position before and after toggling modal
should focus the first focusable element within the modal
should trap the user’s focus within the modal
Cognitively impaired users
💡 Improvements
• Typography
• Justified text
• Short sentence and paragraphs
• Ability to turn off animations
fejes713
const reduceMotionQuery = matchMedia("(prefers-reduced-motion)");
if (reduceMotionQuery.matches) {
// turn animations off
} else {
// turn animations on
}
fejes713
Natively toggle animations
Auditory impaired
💡 Improvements
• Interactive features with visual alerts
• Videos with good captioning
fejes713
Auto-generated captions
audio file WebVTT
fejes713
Temporary disabilities
fejes713
Microsoft’s inclusive toolkit
What is considered a
good UX in 2019?
fejes713
fejes713
Good UX in 2019:
Loads instantly
60 fps ⚡
Usable with a keyboard
Looks amazing 👀
Accessible contrast
Award winning content 🏆
Semantic HTML
Works on the following screen sizes: All of them
Works well in low light environment 🌙
Works well in a bright light environment ☀
Follows all fundamental UI patterns
No scroll jank
Well balanced if user has different zoom level
Start with small tweaks that can make a
huge impact on your website’s accessibility
fejes713
Accessible JavaScript applications

More Related Content

What's hot

J Query - Your First Steps
J Query - Your First StepsJ Query - Your First Steps
J Query - Your First Steps
Bronson Quick
 
An in-depth look at jQuery UI
An in-depth look at jQuery UIAn in-depth look at jQuery UI
An in-depth look at jQuery UI
Paul Bakaus
 
Ionic tabs template explained
Ionic tabs template explainedIonic tabs template explained
Ionic tabs template explained
Ramesh BN
 
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJRealize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Leonardo Balter
 
iPhone Web Applications: HTML5, CSS3 & dev tips for iPhone development
iPhone Web Applications: HTML5, CSS3 & dev tips for iPhone developmentiPhone Web Applications: HTML5, CSS3 & dev tips for iPhone development
iPhone Web Applications: HTML5, CSS3 & dev tips for iPhone development
Estelle Weyl
 
Game Ontology
Game OntologyGame Ontology
Game Ontology
Curelet Marius
 
Introduction to jQuery Mobile - Web Deliver for All
Introduction to jQuery Mobile - Web Deliver for AllIntroduction to jQuery Mobile - Web Deliver for All
Introduction to jQuery Mobile - Web Deliver for All
Marc Grabanski
 
Survey of Front End Topics in Rails
Survey of Front End Topics in RailsSurvey of Front End Topics in Rails
Survey of Front End Topics in RailsBenjamin Vandgrift
 
How to actually use promises - Jakob Mattsson, FishBrain
How to actually use promises - Jakob Mattsson, FishBrainHow to actually use promises - Jakob Mattsson, FishBrain
How to actually use promises - Jakob Mattsson, FishBrain
Codemotion Tel Aviv
 
Perrée &amp; Partners, Collectief Pensioen
Perrée &amp; Partners, Collectief PensioenPerrée &amp; Partners, Collectief Pensioen
Perrée &amp; Partners, Collectief Pensioen
henk0610
 
Overview of Backbone
Overview of BackboneOverview of Backbone
Overview of Backbone
John Ashmead
 
Taking your Web App for a walk
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walk
Jens-Christian Fischer
 
Be nice to your designers
Be nice to your designersBe nice to your designers
Be nice to your designersPai-Cheng Tao
 
Whirlwind Tour of SVG (plus RaphaelJS)
Whirlwind Tour of SVG (plus RaphaelJS)Whirlwind Tour of SVG (plus RaphaelJS)
Whirlwind Tour of SVG (plus RaphaelJS)
Marc Grabanski
 

What's hot (15)

J Query - Your First Steps
J Query - Your First StepsJ Query - Your First Steps
J Query - Your First Steps
 
An in-depth look at jQuery UI
An in-depth look at jQuery UIAn in-depth look at jQuery UI
An in-depth look at jQuery UI
 
Ionic tabs template explained
Ionic tabs template explainedIonic tabs template explained
Ionic tabs template explained
 
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJRealize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
 
iPhone Web Applications: HTML5, CSS3 & dev tips for iPhone development
iPhone Web Applications: HTML5, CSS3 & dev tips for iPhone developmentiPhone Web Applications: HTML5, CSS3 & dev tips for iPhone development
iPhone Web Applications: HTML5, CSS3 & dev tips for iPhone development
 
Game Ontology
Game OntologyGame Ontology
Game Ontology
 
Introduction to jQuery Mobile - Web Deliver for All
Introduction to jQuery Mobile - Web Deliver for AllIntroduction to jQuery Mobile - Web Deliver for All
Introduction to jQuery Mobile - Web Deliver for All
 
The Thinking behind BEM
The Thinking behind BEMThe Thinking behind BEM
The Thinking behind BEM
 
Survey of Front End Topics in Rails
Survey of Front End Topics in RailsSurvey of Front End Topics in Rails
Survey of Front End Topics in Rails
 
How to actually use promises - Jakob Mattsson, FishBrain
How to actually use promises - Jakob Mattsson, FishBrainHow to actually use promises - Jakob Mattsson, FishBrain
How to actually use promises - Jakob Mattsson, FishBrain
 
Perrée &amp; Partners, Collectief Pensioen
Perrée &amp; Partners, Collectief PensioenPerrée &amp; Partners, Collectief Pensioen
Perrée &amp; Partners, Collectief Pensioen
 
Overview of Backbone
Overview of BackboneOverview of Backbone
Overview of Backbone
 
Taking your Web App for a walk
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walk
 
Be nice to your designers
Be nice to your designersBe nice to your designers
Be nice to your designers
 
Whirlwind Tour of SVG (plus RaphaelJS)
Whirlwind Tour of SVG (plus RaphaelJS)Whirlwind Tour of SVG (plus RaphaelJS)
Whirlwind Tour of SVG (plus RaphaelJS)
 

Similar to Accessible JavaScript applications

Adaptive Layouts - standards>next London 28.05.2011
Adaptive Layouts - standards>next London 28.05.2011Adaptive Layouts - standards>next London 28.05.2011
Adaptive Layouts - standards>next London 28.05.2011
Patrick Lauke
 
EVOLVE'16 | Maximize | Gina Petruccelli & Libby Schaper | Web Accessibility &...
EVOLVE'16 | Maximize | Gina Petruccelli & Libby Schaper | Web Accessibility &...EVOLVE'16 | Maximize | Gina Petruccelli & Libby Schaper | Web Accessibility &...
EVOLVE'16 | Maximize | Gina Petruccelli & Libby Schaper | Web Accessibility &...
Evolve The Adobe Digital Marketing Community
 
EVOLVE'16 | Maximize | Libby Schaper & Gina Petrucceli | Web Accessibility & AEM
EVOLVE'16 | Maximize | Libby Schaper & Gina Petrucceli | Web Accessibility & AEMEVOLVE'16 | Maximize | Libby Schaper & Gina Petrucceli | Web Accessibility & AEM
EVOLVE'16 | Maximize | Libby Schaper & Gina Petrucceli | Web Accessibility & AEM
Evolve The Adobe Digital Marketing Community
 
Accessible web applications
Accessible web applicationsAccessible web applications
Accessible web applications
Wojtek Zając
 
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....Patrick Lauke
 
Accessibility in Responsive web design
Accessibility in Responsive web designAccessibility in Responsive web design
Accessibility in Responsive web design
Nexer Digital
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
Ashlimarie
 
Web Accessibility for the 21st Century
Web Accessibility for the 21st CenturyWeb Accessibility for the 21st Century
Web Accessibility for the 21st Century
dreamwidth
 
Android Accessibility - Droidcon London
Android Accessibility - Droidcon LondonAndroid Accessibility - Droidcon London
Android Accessibility - Droidcon London
Kelly Shuster
 
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and GulpOptimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Matthew Davis
 
Worry free web development
Worry free web developmentWorry free web development
Worry free web development
Estelle Weyl
 
Once Source to Rule Them All
Once Source to Rule Them AllOnce Source to Rule Them All
Once Source to Rule Them All
David Yeiser
 
Web development basics (Part-2)
Web development basics (Part-2)Web development basics (Part-2)
Web development basics (Part-2)
Rajat Pratap Singh
 
Web Accessibility Gone Wild (Now Even MORE Wilder!)
Web Accessibility Gone Wild (Now Even MORE Wilder!)Web Accessibility Gone Wild (Now Even MORE Wilder!)
Web Accessibility Gone Wild (Now Even MORE Wilder!)
Jared Smith
 
The specs behind the sex, mobile-friendly layout beyond the desktop
The specs behind the sex, mobile-friendly layout beyond the desktopThe specs behind the sex, mobile-friendly layout beyond the desktop
The specs behind the sex, mobile-friendly layout beyond the desktopbetabeers
 
Responsive design: techniques and tricks to prepare your websites for the mul...
Responsive design: techniques and tricks to prepare your websites for the mul...Responsive design: techniques and tricks to prepare your websites for the mul...
Responsive design: techniques and tricks to prepare your websites for the mul...
Andreas Bovens
 
It's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrIt's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking Modernizr
Michael Enslow
 
Html5 intro
Html5 introHtml5 intro
Html5 intro
Wilfred Nas
 
Responsive & Responsible: Implementing Responsive Design at Scale
Responsive & Responsible: Implementing Responsive Design at ScaleResponsive & Responsible: Implementing Responsive Design at Scale
Responsive & Responsible: Implementing Responsive Design at Scale
scottjehl
 
Building a better, accessible web
Building a better, accessible webBuilding a better, accessible web
Building a better, accessible web
Matt Stow
 

Similar to Accessible JavaScript applications (20)

Adaptive Layouts - standards>next London 28.05.2011
Adaptive Layouts - standards>next London 28.05.2011Adaptive Layouts - standards>next London 28.05.2011
Adaptive Layouts - standards>next London 28.05.2011
 
EVOLVE'16 | Maximize | Gina Petruccelli & Libby Schaper | Web Accessibility &...
EVOLVE'16 | Maximize | Gina Petruccelli & Libby Schaper | Web Accessibility &...EVOLVE'16 | Maximize | Gina Petruccelli & Libby Schaper | Web Accessibility &...
EVOLVE'16 | Maximize | Gina Petruccelli & Libby Schaper | Web Accessibility &...
 
EVOLVE'16 | Maximize | Libby Schaper & Gina Petrucceli | Web Accessibility & AEM
EVOLVE'16 | Maximize | Libby Schaper & Gina Petrucceli | Web Accessibility & AEMEVOLVE'16 | Maximize | Libby Schaper & Gina Petrucceli | Web Accessibility & AEM
EVOLVE'16 | Maximize | Libby Schaper & Gina Petrucceli | Web Accessibility & AEM
 
Accessible web applications
Accessible web applicationsAccessible web applications
Accessible web applications
 
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12....
 
Accessibility in Responsive web design
Accessibility in Responsive web designAccessibility in Responsive web design
Accessibility in Responsive web design
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
 
Web Accessibility for the 21st Century
Web Accessibility for the 21st CenturyWeb Accessibility for the 21st Century
Web Accessibility for the 21st Century
 
Android Accessibility - Droidcon London
Android Accessibility - Droidcon LondonAndroid Accessibility - Droidcon London
Android Accessibility - Droidcon London
 
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and GulpOptimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
 
Worry free web development
Worry free web developmentWorry free web development
Worry free web development
 
Once Source to Rule Them All
Once Source to Rule Them AllOnce Source to Rule Them All
Once Source to Rule Them All
 
Web development basics (Part-2)
Web development basics (Part-2)Web development basics (Part-2)
Web development basics (Part-2)
 
Web Accessibility Gone Wild (Now Even MORE Wilder!)
Web Accessibility Gone Wild (Now Even MORE Wilder!)Web Accessibility Gone Wild (Now Even MORE Wilder!)
Web Accessibility Gone Wild (Now Even MORE Wilder!)
 
The specs behind the sex, mobile-friendly layout beyond the desktop
The specs behind the sex, mobile-friendly layout beyond the desktopThe specs behind the sex, mobile-friendly layout beyond the desktop
The specs behind the sex, mobile-friendly layout beyond the desktop
 
Responsive design: techniques and tricks to prepare your websites for the mul...
Responsive design: techniques and tricks to prepare your websites for the mul...Responsive design: techniques and tricks to prepare your websites for the mul...
Responsive design: techniques and tricks to prepare your websites for the mul...
 
It's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrIt's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking Modernizr
 
Html5 intro
Html5 introHtml5 intro
Html5 intro
 
Responsive & Responsible: Implementing Responsive Design at Scale
Responsive & Responsible: Implementing Responsive Design at ScaleResponsive & Responsible: Implementing Responsive Design at Scale
Responsive & Responsible: Implementing Responsive Design at Scale
 
Building a better, accessible web
Building a better, accessible webBuilding a better, accessible web
Building a better, accessible web
 

Recently uploaded

Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 

Recently uploaded (20)

Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 

Accessible JavaScript applications

  • 1. 1
  • 4. Stefan Feješ " 20yo Frontend Engineer 🎤 Organizes Novi Sad JS 🐙 Open source contributor fejes713
  • 5. Stefan Feješ " 20yo Frontend Engineer 🎤 Organizes Novi Sad JS 🐙 Open source contributor fejes713
  • 6. Stefan Feješ " 20yo Frontend Engineer 🎤 Organizes Novi Sad JS 🐙 Open source contributor fejes713
  • 10. – Oxford English Dictionary “The quality of being easily reached, entered, or used by people who have a disability” accessibile: fejes713
  • 11. … and what about the Web? fejes713
  • 12. “A blind man couldn’t order pizza from Domino’s. The company wants the Supreme Court to say websites don’t have to be accessible” – BBC News
  • 13. About 15% of the world's population have some form of disability fejes713
  • 14. Types of disabilities: • visual 👓 • physical • cognitive 🧠 • auditory 💬 • … fejes713
  • 15. Types of disabilities: • visual 👓 • physical • cognitive 🧠 • auditory 💬 • … fejes713
  • 16. Types of disabilities: • visual 👓 • physical • cognitive 🧠 • auditory 💬 • … fejes713
  • 17. Types of disabilities: • visual 👓 • physical • cognitive 🧠 • auditory 💬 • … fejes713
  • 18. Types of disabilities: • visual 👓 • physical • cognitive 🧠 • auditory 💬 • … fejes713
  • 19.
  • 20. so what are the problems? fejes713
  • 22.
  • 23.
  • 25. Screen readers can read all text visible on a page can read some tags that a sighted user will not be able to see can list all headers and links can’t read text based on css layout can’t read text on images can’t detect navigation fejes713
  • 26. Screen readers can read all text visible on a page can read some tags that a sighted user will not be able to see can list all headers and links can’t read text based on css layout can’t read text on images can’t detect navigation fejes713
  • 27. Screen readers can read all text visible on a page can read some tags that a sighted user will not be able to see can list all headers and links can’t read text based on css layout can’t read text on images can’t detect navigation fejes713
  • 28. Screen readers can read all text visible on a page can read some tags that a sighted user will not be able to see can list all headers and links can’t read text based on css layout can’t read text on images can’t detect navigation fejes713
  • 29. Screen readers can read all text visible on a page can read some tags that a sighted user will not be able to see can list all headers and links can’t read text based on css layout can’t read text on images can’t detect navigation fejes713
  • 31. The alt attribute • always set the alt attribute • alt=“” for decorative images • put the period in the end at of the alt attribute
  • 32. The alt attribute • always set the alt attribute • alt=“” for decorative images • put the period in the end at of the alt attribute
  • 33. The alt attribute • always set the alt attribute • alt=“” for decorative images • put the period in the end at of the alt attribute
  • 36. fejes713 "captions": [ { "text": "a hand holding a cellphone", "confidence": 0.9583763512737793 } ]
  • 39. fejes713 Announcing changes import React from "react"; class Announcements extends React.Component { render() { return ( <div aria-live="polite" aria-atomic="true" className="visuallyhidden"> {this.props.message} </div> ); } }; export default Announcements;
  • 40. fejes713 Announcing changes import React from "react"; class Announcements extends React.Component { render() { return ( <div aria-live="polite" aria-atomic="true" className="visuallyhidden"> {this.props.message} </div> ); } }; export default Announcements;
  • 41. fejes713 Announcing changes import React from "react"; class Announcements extends React.Component { render() { return ( <div aria-live="polite" aria-atomic="true" className="visuallyhidden"> {this.props.message} </div> ); } }; export default Announcements;
  • 42. // Vue.js - change tab title on route switch router.beforeEach((to, from, next) => { document.title = `${to.name} - Your site name`; next(); }); fejes713 Change page titles on each route
  • 44.
  • 46. • Reachable custom elements • Tab, Space, Escape, Arrow keys • Visible focus styles fejes713 Keyboard navigation
  • 47. tabindex can make custom elements focusable and ugly doesn’t make custom elements accessible without additional effor 💡 Rules to follow: fejes713 always set tabIndex on custom interactive elements tabIndex="0" // in regular tab order tabIndex="-1" // focusable by JavaScript only tabIndex="1" // not recommended!
  • 48. let mouseDown = false; element.addEventListener('mousedown', () => { mouseDown = true; }); element.addEventListener('mouseup', () => { mouseDown = false; }); element.addEventListener('focus', (event) => { if (mouseDown) { event.target.blur(); // removes blue outline } }); fejes713
  • 49. ARIA (accessible rich internet applications) can make custom elements fully accessible can expose a11y information for custom elements 💡 Some of aria-* attributes: fejes713 role="button" // defines type of custom element aria-label="open" // meaningful label to go with it
  • 50. <div class="button"> Sign up! </div> fejes713 <div class="button" tabindex="0" role=“button" aria-label="Open sign up modal” onClick={modalHandler} > Sign up! </div> → ❌ don’t ✔ do custom el. = tabIndex + role + label + aria-* + event handler
  • 51. <div class="button"> Sign up! </div> fejes713 <button class=“button" aria-label="Open sign up modal” onClick={modalHandler} > Sign up! </button> → ❌ don’t ✔ 🔥 custom el. = tabIndex + role + label + aria-* + event handler
  • 54. fejes713 Accessible modals should be closed once the overlay or ESC key is clicked should toggle aria-hidden attribute on modal should maintain focus position before and after toggling modal should focus the first focusable element within the modal should trap the user’s focus within the modal
  • 55. fejes713 Accessible modals should be closed once the overlay or ESC key is clicked should toggle aria-hidden attribute on modal should maintain focus position before and after toggling modal should focus the first focusable element within the modal should trap the user’s focus within the modal
  • 56. fejes713 Accessible modals should be closed once the overlay or ESC key is clicked should toggle aria-hidden attribute on modal should maintain focus position before and after toggling modal should focus the first focusable element within the modal should trap the user’s focus within the modal
  • 57. fejes713 Accessible modals should be closed once the overlay or ESC key is clicked should toggle aria-hidden attribute on modal should maintain focus position before and after toggling modal should focus the first focusable element within the modal should trap the user’s focus within the modal
  • 58. fejes713 Accessible modals should be closed once the overlay or ESC key is clicked should toggle aria-hidden attribute on modal should maintain focus position before and after toggling modal should focus the first focusable element within the modal should trap the user’s focus within the modal
  • 60. 💡 Improvements • Typography • Justified text • Short sentence and paragraphs • Ability to turn off animations fejes713
  • 61. const reduceMotionQuery = matchMedia("(prefers-reduced-motion)"); if (reduceMotionQuery.matches) { // turn animations off } else { // turn animations on } fejes713 Natively toggle animations
  • 63. 💡 Improvements • Interactive features with visual alerts • Videos with good captioning fejes713
  • 65.
  • 68.
  • 69. What is considered a good UX in 2019? fejes713
  • 70. fejes713 Good UX in 2019: Loads instantly 60 fps ⚡ Usable with a keyboard Looks amazing 👀 Accessible contrast Award winning content 🏆 Semantic HTML Works on the following screen sizes: All of them Works well in low light environment 🌙 Works well in a bright light environment ☀ Follows all fundamental UI patterns No scroll jank Well balanced if user has different zoom level
  • 71. Start with small tweaks that can make a huge impact on your website’s accessibility fejes713