{"id":78695,"date":"2024-07-09T12:06:50","date_gmt":"2024-07-09T19:06:50","guid":{"rendered":"https:\/\/github.blog\/?p=78695"},"modified":"2024-07-23T06:17:07","modified_gmt":"2024-07-23T13:17:07","slug":"exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop","status":"publish","type":"post","link":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/","title":{"rendered":"Exploring the challenges in creating an accessible sortable list (drag-and-drop)"},"content":{"rendered":"<p>Drag-and-drop is a highly interactive and visual interface. We often use drag-and-drop to perform tasks like uploading files, reordering browser bookmarks, or even moving a card in solitaire. It can be hard to imagine completing most of these tasks without a mouse and even harder without using a screen or visual aid. This is why the Accessibility team at GitHub considers drag-and-drop a \u201chigh-risk pattern,\u201d often leading to accessibility barriers and a lack of effective solutions in the industry.<\/p>\n<p>Recently, our team worked to develop a solution for a more accessible sortable list, which we refer to as \u2018one-dimensional drag-and-drop.\u2019 In our first step toward making drag-and-drop more accessible, we scoped our efforts to explore moving items along a single axis.<\/p>\n<div class=\"image-frame image-frame-full border rounded-2 overflow-hidden d-flex flex-row flex-justify-center\" style=\"background: #EAEEF2\"><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?resize=1024%2C545\" alt=\"An example of a sortable to do list. This list has  7 items all of which are in a single column. One of the the items is hovering over the list to indicate it is being dragged to another position.\" width=\"1024\" height=\"545\" class=\"aligncenter size-full wp-image-78699 width-fit\" srcset=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=2000 2000w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=300 300w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=768 768w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=1024 1024w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=1536 1536w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=1600 1600w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=800 800w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=400 400w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=1032 1032w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image3.png?w=516 516w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/div>\n<p>Based on our findings, here are some of the challenges we faced and how we solved them:<\/p>\n<h2 id=\"challenge-screen-readers-use-arrow-keys-to-navigate-through-content\"><a class=\"heading-link\" href=\"#challenge-screen-readers-use-arrow-keys-to-navigate-through-content\">Challenge: Screen readers use arrow keys to navigate through content<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>One of the very first challenges we faced involved setting up an interaction model for moving an item through keyboard navigation. We chose to use arrow keys as we wanted keyboard operation to feel natural for a visual keyboard user. However, this choice posed a problem for users who relied on screen readers to navigate throughout a webpage.<\/p>\n<p><strong>To note<\/strong>: Arrow keys are commonly used by screen readers to help users navigate through content, like reading text or navigating between cells in a table. Consequently, when we tested drag-and-drop with screen reader users, the users were unable to use the arrow keys to move the item as intended. The arrow keys ignored drag-and-drop actions and performed typical screen reader navigation instead.<\/p>\n<p>In order to override these key bindings we used <code>role='application'<\/code>.<\/p>\n<p><strong>Take note<\/strong>: I cannot talk about using <code>role='application'<\/code> without also providing a warning. <code>role='application'<\/code> should almost never be used. It is important to use <code>role='application'<\/code> sparingly and to scope it to the smallest possible element. The <code>role='application'<\/code> attribute alters how a screen reader operates, making it treat the element and its contents as a single application.<\/a><\/td>\n<p>Considering the mentioned caution, we applied the role to the drag-and-drop trigger to restrict the scope of the DOM impacted by <code>role='application'<\/code>. Additionally, we exclusively added <code>role='application'<\/code> to the DOM when a user activates drag-and-drop. We remove <code>role='application'<\/code> when the user completes or cancels out of drag-and-drop. By employing <code>role='application'<\/code>, we are able to override or reassign the screen reader&#8217;s arrow commands to correspond with our drag-and-drop commands.<\/p>\n<p>Remember, even if implemented thoughtfully, it&#8217;s crucial to rely on feedback from daily screen reader users to ensure you have implemented <code>role='application'<\/code> correctly. Their feedback and experience should be the determining factor in assessing whether or not using <code>role='application'<\/code> is truly accessible and necessary.<\/p>\n<h2 id=\"challenge-nvda-simulates-mouse-events-when-a-user-presses-enter-or-space\"><a class=\"heading-link\" href=\"#challenge-nvda-simulates-mouse-events-when-a-user-presses-enter-or-space\">Challenge: NVDA simulates mouse events when a user presses Enter or Space<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>Another challenge we faced was determining whether a mouse or keyboard event was triggered when an <a href=\"https:\/\/www.nvaccess.org\/about-nvda\/\">NVDA screen reader<\/a> user activated drag-and-drop.<\/p>\n<p>When a user uses a mouse to drag-and-drop items, the expectation is that releasing the mouse button (triggering an <code>onMouseUp<\/code> event) will finalize the drag-and-drop operation. Whereas, when operating drag-and-drop via the keyboard, Enter or Escape is used to finalize the drag-and-drop operation.<\/p>\n<p><strong>To note<\/strong>: When a user activates a button with the Enter or Space key while using NVDA, the screen reader simulates an <code>onMouseDown<\/code> and <code>onMouseUp<\/code> event rather than an <code>onKeyDown<\/code> event.<\/p>\n<p>Because most NVDA users rely on keyboard operations to operate drag-and-drop instead of a mouse, we had to find a way to make sure our code ignored the <code>onMouseUp<\/code> event triggered by an NVDA Enter or Space key press.<\/p>\n<p>We accomplished this by using two HTML elements to separate keyboard and mouse functionality:<br \/>\n    1. A <a href=\"https:\/\/primer.style\/components\/icon-button\">Primer Icon button<\/a> to handle keyboard interactions.<br \/>\n    2. An invisible overlay to capture mouse interactions.<\/p>\n<div class=\"image-frame image-frame-full border rounded-2 overflow-hidden d-flex flex-row flex-justify-center\" style=\"background: #EAEEF2\"><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image2.png?resize=1024%2C750\" alt=\"A screenshot of the drag-and-drop trigger. Added to the screenshot are two informational text boxes the first explains the purpose of the invisible overlay, stating:  &quot;An empty &lt;div&gt; overlays the iconButton to handle mouse events. This is neither focusable nor visible to keyboard users. Associated event handlers: onMouseDown&quot;. The second text box explains the purpose of the visible iconButton, stating: &quot;The iconButton can only be activated by keyboard users. This is not clickable for mouse users. Associated event handlers: onMouseDown, onKeyDown.\" width=\"1024\" height=\"750\" class=\"aligncenter size-full wp-image-78698 width-fit\" srcset=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image2.png?w=1576 1576w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image2.png?w=300 300w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image2.png?w=768 768w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image2.png?w=1024 1024w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image2.png?w=1536 1536w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/div>\n<h2 id=\"challenge-announcing-movements-in-rapid-succession\"><a class=\"heading-link\" href=\"#challenge-announcing-movements-in-rapid-succession\">Challenge: Announcing movements in rapid succession<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>Once we had our keyboard operations working, our next big obstacle was <a href=\"https:\/\/dequeuniversity.com\/tips\/webpagechanges\">announcing movements to users<\/a>, in particular announcing rapid movements of a selected item.<\/p>\n<p>To prepare for external user testing we tested our announcements ourselves with screen readers. Because we are not native screen reader users, we moved items slowly throughout the page and the announcements sounded great. However, users typically move items rapidly to complete tasks quickly, so our screen reader testing did not reflect how users would actually interact with our feature.<\/p>\n<p><strong>To note<\/strong>: It was not until user testing that we discovered that when a user moved an item in rapid succession the <code>aria-live<\/code> announcements would lag or sometimes announce movements that were no longer relevant. This would disorient users, leading to confusion about the item&#8217;s current position.<\/p>\n<p>To solve this problem, we added a small debounce to our move announcements. We tested various debounce speeds with users and landed on 100ms to ensure that we did not slow down a user&#8217;s ability to interact with drag-and-drop. Additionally, we used <code>aria-live='assertive'<\/code> to ensure that stale positional announcements are interrupted by the new positional announcement.<\/p>\n<pre><code class=\"language-javascript\">export const debounceAnnouncement = debounce((announcement: string) =&gt; {\n  announce(announcement, {assertive: true})\n}, 100)\n<\/code><\/pre>\n<p><strong>Take note<\/strong>: <code>aria-live='assertive'<\/code> is reserved for time-sensitive or critical notifications. <code>aria-live='assertive'<\/code> interrupts any ongoing announcements the screen reader is making and can be disruptive for users. Use <code>aria-live='assertive'<\/code> sparingly and test with screen reader users to ensure your feature implores it correctly.<\/p>\n<h2 id=\"challenge-first-time-user-experience-of-a-new-pattern\"><a class=\"heading-link\" href=\"#challenge-first-time-user-experience-of-a-new-pattern\">Challenge: First-time user experience of a new pattern<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p><strong>To note<\/strong>: During user testing we discovered that some of our users found it difficult to operate drag-and-drop with a keyboard. Oftentimes, drag-and-drop is not keyboard accessible or screen reader accessible. As a result, users with disabilities might not have had the opportunity to use drag-and-drop before, making the operations unfamiliar to them.<\/p>\n<p>This problem was particularly challenging to solve because we wanted to make sure our instruction set was easy to find but not a constant distraction for users who frequently use the drag-and-drop functionality.<\/p>\n<p>To address this, we added a dialog with a set of instructions that would open when a user activated drag-and-drop via the keyboard. This dialog has a \u201cdon\u2019t show this again\u201d checkbox preference for users who feel like they have a good grasp on the interaction and no longer want a reminder.<\/p>\n<div class=\"image-frame image-frame-full border rounded-2 overflow-hidden d-flex flex-row flex-justify-center\" style=\"background: #EAEEF2\"><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image1.png?resize=1024%2C579\" alt=\"A screenshot of the instruction dialog. The dialog contains a table with three rows. Each row contains two columns the first column is the movement and the second column is the keyboard command. At the bottom is the \"don't show this again\" checkbox.\" width=\"1024\" height=\"579\" class=\"aligncenter size-full wp-image-78697 width-fit\" srcset=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image1.png?w=1460 1460w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image1.png?w=300 300w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image1.png?w=768 768w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image1.png?w=1024 1024w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/div>\n<h2 id=\"challenge-moving-items-with-voice-control-in-a-scrollable-container\"><a class=\"heading-link\" href=\"#challenge-moving-items-with-voice-control-in-a-scrollable-container\">Challenge: Moving items with voice control in a scrollable container<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>One of the final big challenges we faced was operating drag-and-drop using voice control assistive technology. We found that using <a href=\"https:\/\/support.apple.com\/en-us\/111778\">voice control<\/a> to drag-and-drop items in a non-scrollable list was straightforward, but when the list became scrollable it was nearly impossible to move an item from the top of the list to the bottom.<\/p>\n<p><strong>To note<\/strong>: Voice control displays an overlay of numbers next to interactive items on the screen when requested. These numbers are references to items a user can interact with. For example, if a user says, \u201cClick item 5\u201d and item 5 is a button on a web page the assistive technology will then click the button. These number references dynamically update as the user scrolls through the webpage. Because references are updated as a user scrolls, scrolling the page while dragging an item via a numerical reference will cause the item to be dropped.<\/p>\n<p>We found it critical to support two modes of operation in order to ensure that voice control users are able to sort items in a list. The first mode of operation, traditional drag-and-drop, has been discussed previously. The second mode is a move dialog.<\/p>\n<p>The move dialog is a form that allows users to move items in a list without having to use traditional drag-and-drop:<\/p>\n<div class=\"image-frame image-frame-full border rounded-2 overflow-hidden d-flex flex-row flex-justify-center\" style=\"background: #EAEEF2\"><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image4.png?resize=998%2C792\" alt=\"A screenshot of the Move Dialog. At the top of the dialog is a span specifying  the item being moved. Followed by a form to move items then a preview of the movement.\" width=\"998\" height=\"792\" class=\"aligncenter size-full wp-image-78700 width-fit\" srcset=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image4.png?w=998 998w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image4.png?w=300 300w, https:\/\/github.blog\/wp-content\/uploads\/2024\/07\/image4.png?w=768 768w\" sizes=\"auto, (max-width: 998px) 100vw, 998px\" \/><\/div>\n<p>The form includes two input fields: action and position.<br \/>\nThe action field specifies the movement or direction of the operation, for example, \u201cmove item before\u201d or \u201cmove item after.\u201d And the position specifies the location of where the item should be moved.<\/p>\n<p>Below the input fields we show a preview of where an item will be moved based on the input values. This preview is announced using <code>aria-live<\/code> and provides a way for users to preview their movements before finalizing them.<\/p>\n<p>During our testing we found that the move dialog was the preferred mode of operation for several of our users who do not use voice control assistive technology. Our users felt more confident when using the move dialog to move items and we were delighted to find that our accessibility feature provided unexpected benefits to a wide range of users.<\/p>\n<p>In Summary, creating an accessible drag-and-drop pattern is challenging and it is important to leverage feedback and consider a diverse range of user needs. If you are working to create an accessible drag-and-drop, we hope our journey helps you understand the nuances and pitfalls of this complex pattern.<\/p>\n<p>A big thanks to my colleagues, <a href=\"https:\/\/github.com\/alexislucio\">Alexis Lucio<\/a>, <a href=\"https:\/\/github.com\/ohiosveryown\">Matt Pence<\/a>, <a href=\"https:\/\/github.com\/hussam-i-am\">Hussam Ghazzi<\/a>, and <a href=\"https:\/\/github.com\/ayy-bc\">Aarya BC<\/a>, for their hard work in making drag-and-drop more accessible. Your dedication and expertise have been invaluable. I am excited about the progress we made and what we will achieve in the future!<\/p>\n<p>Lastly, if you are interested in testing the future of drag-and-drop with us, consider <a href=\"https:\/\/forms.gle\/23Jgw5tRwPLZHNTs5\">joining our Customer Research Panel<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Drag-and-drop is a highly interactive and visual interface. We often use drag-and-drop to perform tasks like uploading files, reordering browser bookmarks, or even moving a card in solitaire.<\/p>\n","protected":false},"author":2143,"featured_media":77977,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_gh_post_show_toc":"no","_gh_post_is_no_robots":"no","_gh_post_is_featured":"no","_gh_post_is_excluded":"no","_gh_post_is_unlisted":"no","_gh_post_related_link_1":"","_gh_post_related_link_2":"","_gh_post_related_link_3":"","_gh_post_sq_img":"https:\/\/github.blog\/wp-content\/uploads\/2024\/05\/Collaboration-LightMode-3.png","_gh_post_sq_img_id":"77820","_gh_post_cta_title":"","_gh_post_cta_text":"","_gh_post_cta_link":"","_gh_post_cta_button":"Click Here to Learn More","_gh_post_recirc_hide":"no","_gh_post_recirc_col_1":"gh-auto-select","_gh_post_recirc_col_2":"77524","_gh_post_recirc_col_3":"65303","_gh_post_recirc_col_4":"65316","_featured_video":"","_gh_post_additional_query_params":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"_links_to":"","_links_to_target":""},"categories":[72,3312],"tags":[2732],"coauthors":[3079],"class_list":["post-78695","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","category-user-experience","tag-accessibility"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Exploring the challenges in creating an accessible sortable list (drag-and-drop) - The GitHub Blog<\/title>\n<meta name=\"description\" content=\"The Accessibility team at GitHub considers drag-and-drop a \u201chigh-risk pattern,\u201d often leading to accessibility barriers and a lack of effective solutions in the industry.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exploring the challenges in creating an accessible sortable list (drag-and-drop)\" \/>\n<meta property=\"og:description\" content=\"The Accessibility team at GitHub considers drag-and-drop a \u201chigh-risk pattern,\u201d often leading to accessibility barriers and a lack of effective solutions in the industry.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/\" \/>\n<meta property=\"og:site_name\" content=\"The GitHub Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-09T19:06:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-23T13:17:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/github.blog\/wp-content\/uploads\/2024\/05\/Collaboration-LightMode-3-1.png?fit=1200%2C630\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Kendall Gassner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kendall Gassner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/\"},\"author\":{\"name\":\"Kendall Gassner\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/b0cd293218fbe3e57b1f2a4ae3a203ce\"},\"headline\":\"Exploring the challenges in creating an accessible sortable list (drag-and-drop)\",\"datePublished\":\"2024-07-09T19:06:50+00:00\",\"dateModified\":\"2024-07-23T13:17:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/\"},\"wordCount\":1004,\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/Collaboration-LightMode-3-1.png?fit=1200%2C630\",\"keywords\":[\"accessibility\"],\"articleSection\":[\"Engineering\",\"User experience\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/\",\"url\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/\",\"name\":\"Exploring the challenges in creating an accessible sortable list (drag-and-drop) - The GitHub Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/Collaboration-LightMode-3-1.png?fit=1200%2C630\",\"datePublished\":\"2024-07-09T19:06:50+00:00\",\"dateModified\":\"2024-07-23T13:17:07+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/b0cd293218fbe3e57b1f2a4ae3a203ce\"},\"description\":\"The Accessibility team at GitHub considers drag-and-drop a \u201chigh-risk pattern,\u201d often leading to accessibility barriers and a lack of effective solutions in the industry.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/#primaryimage\",\"url\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/Collaboration-LightMode-3-1.png?fit=1200%2C630\",\"contentUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/Collaboration-LightMode-3-1.png?fit=1200%2C630\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/github.blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Engineering\",\"item\":\"https:\\\/\\\/github.blog\\\/engineering\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"User experience\",\"item\":\"https:\\\/\\\/github.blog\\\/engineering\\\/user-experience\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Exploring the challenges in creating an accessible sortable list (drag-and-drop)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/github.blog\\\/#website\",\"url\":\"https:\\\/\\\/github.blog\\\/\",\"name\":\"The GitHub Blog\",\"description\":\"Updates, ideas, and inspiration from GitHub to help developers build and design software.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/github.blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/b0cd293218fbe3e57b1f2a4ae3a203ce\",\"name\":\"Kendall Gassner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/933c45f8135f1d884ba87f89aa3d712453566c945ac4ba09d7a0e9cd629c27a5?s=96&d=mm&r=g50f8d282448b69a84d5ceaeac4c5789b\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/933c45f8135f1d884ba87f89aa3d712453566c945ac4ba09d7a0e9cd629c27a5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/933c45f8135f1d884ba87f89aa3d712453566c945ac4ba09d7a0e9cd629c27a5?s=96&d=mm&r=g\",\"caption\":\"Kendall Gassner\"},\"url\":\"https:\\\/\\\/github.blog\\\/author\\\/kendallgassner\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Exploring the challenges in creating an accessible sortable list (drag-and-drop) - The GitHub Blog","description":"The Accessibility team at GitHub considers drag-and-drop a \u201chigh-risk pattern,\u201d often leading to accessibility barriers and a lack of effective solutions in the industry.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/","og_locale":"en_US","og_type":"article","og_title":"Exploring the challenges in creating an accessible sortable list (drag-and-drop)","og_description":"The Accessibility team at GitHub considers drag-and-drop a \u201chigh-risk pattern,\u201d often leading to accessibility barriers and a lack of effective solutions in the industry.","og_url":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/","og_site_name":"The GitHub Blog","article_published_time":"2024-07-09T19:06:50+00:00","article_modified_time":"2024-07-23T13:17:07+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/github.blog\/wp-content\/uploads\/2024\/05\/Collaboration-LightMode-3-1.png?fit=1200%2C630","type":"image\/png"}],"author":"Kendall Gassner","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kendall Gassner","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/#article","isPartOf":{"@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/"},"author":{"name":"Kendall Gassner","@id":"https:\/\/github.blog\/#\/schema\/person\/b0cd293218fbe3e57b1f2a4ae3a203ce"},"headline":"Exploring the challenges in creating an accessible sortable list (drag-and-drop)","datePublished":"2024-07-09T19:06:50+00:00","dateModified":"2024-07-23T13:17:07+00:00","mainEntityOfPage":{"@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/"},"wordCount":1004,"image":{"@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2024\/05\/Collaboration-LightMode-3-1.png?fit=1200%2C630","keywords":["accessibility"],"articleSection":["Engineering","User experience"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/","url":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/","name":"Exploring the challenges in creating an accessible sortable list (drag-and-drop) - The GitHub Blog","isPartOf":{"@id":"https:\/\/github.blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/#primaryimage"},"image":{"@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2024\/05\/Collaboration-LightMode-3-1.png?fit=1200%2C630","datePublished":"2024-07-09T19:06:50+00:00","dateModified":"2024-07-23T13:17:07+00:00","author":{"@id":"https:\/\/github.blog\/#\/schema\/person\/b0cd293218fbe3e57b1f2a4ae3a203ce"},"description":"The Accessibility team at GitHub considers drag-and-drop a \u201chigh-risk pattern,\u201d often leading to accessibility barriers and a lack of effective solutions in the industry.","breadcrumb":{"@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/#primaryimage","url":"https:\/\/github.blog\/wp-content\/uploads\/2024\/05\/Collaboration-LightMode-3-1.png?fit=1200%2C630","contentUrl":"https:\/\/github.blog\/wp-content\/uploads\/2024\/05\/Collaboration-LightMode-3-1.png?fit=1200%2C630","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/github.blog\/engineering\/user-experience\/exploring-the-challenges-in-creating-an-accessible-sortable-list-drag-and-drop\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/github.blog\/"},{"@type":"ListItem","position":2,"name":"Engineering","item":"https:\/\/github.blog\/engineering\/"},{"@type":"ListItem","position":3,"name":"User experience","item":"https:\/\/github.blog\/engineering\/user-experience\/"},{"@type":"ListItem","position":4,"name":"Exploring the challenges in creating an accessible sortable list (drag-and-drop)"}]},{"@type":"WebSite","@id":"https:\/\/github.blog\/#website","url":"https:\/\/github.blog\/","name":"The GitHub Blog","description":"Updates, ideas, and inspiration from GitHub to help developers build and design software.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/github.blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/github.blog\/#\/schema\/person\/b0cd293218fbe3e57b1f2a4ae3a203ce","name":"Kendall Gassner","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/933c45f8135f1d884ba87f89aa3d712453566c945ac4ba09d7a0e9cd629c27a5?s=96&d=mm&r=g50f8d282448b69a84d5ceaeac4c5789b","url":"https:\/\/secure.gravatar.com\/avatar\/933c45f8135f1d884ba87f89aa3d712453566c945ac4ba09d7a0e9cd629c27a5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/933c45f8135f1d884ba87f89aa3d712453566c945ac4ba09d7a0e9cd629c27a5?s=96&d=mm&r=g","caption":"Kendall Gassner"},"url":"https:\/\/github.blog\/author\/kendallgassner\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/github.blog\/wp-content\/uploads\/2024\/05\/Collaboration-LightMode-3-1.png?fit=1200%2C630","jetpack_shortlink":"https:\/\/wp.me\/pamS32-kth","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/78695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/users\/2143"}],"replies":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/comments?post=78695"}],"version-history":[{"count":10,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/78695\/revisions"}],"predecessor-version":[{"id":78755,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/78695\/revisions\/78755"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media\/77977"}],"wp:attachment":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media?parent=78695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/categories?post=78695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/tags?post=78695"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/coauthors?post=78695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}