{"id":379,"date":"2020-06-02T12:00:00","date_gmt":"2020-06-02T12:00:00","guid":{"rendered":"https:\/\/staging.infragistics.com\/blogs\/?p=379"},"modified":"2025-02-25T15:23:26","modified_gmt":"2025-02-25T15:23:26","slug":"grid-keyboard-navigation-accessibility","status":"publish","type":"post","link":"https:\/\/www.infragistics.com\/blogs\/grid-keyboard-navigation-accessibility","title":{"rendered":"Improving Usability, Accessibility, &amp; ARIA Compliance with Grid Keyboard Navigation"},"content":{"rendered":"\n<p>(Last updated: April 13, 2023)<\/p>\n\n\n\n<p>As user expectations evolve, modern web applications have grown more and more complex. They define user interface patterns like virtualized scrolling of content, complex data tables with editable cells, and different overlay components, just to name a few.<\/p>\n\n\n\n<p>That is not a problem for users leveraging a mouse or touchpad, as they can easily navigate through the page elements and interact with them. But for those using a keyboard, this can dramatically impact their user experience. The number of controls and items on most web pages has increased&nbsp;significantly,&nbsp;meaning that a modern web page may contain hundreds of <a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices\/#layoutGrid\" rel=\"noopener\">tab stops<\/a>.<\/p>\n\n\n\n<p>The question then is, how to improve UX and web accessibility at the same time for your Angular app?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-website-accessibility\">What Is Website Accessibility?<\/h2>\n\n\n\n<p>The Internet is for everyone and website accessibility is key. Basically, web accessibility (or\u202feAccessibility) is a practice that if well-established will make any website usable for all types of visitors and on any type of devices, regardless of things like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>User tech know-how or previous experience with the World Wide Web.<\/li>\n\n\n\n<li>People who use assistive technologies.<\/li>\n\n\n\n<li>Speed and bandwidth.<\/li>\n\n\n\n<li>Use\/No use of mouse.<\/li>\n<\/ul>\n\n\n\n<p>This is an extremely important goal to achieve by any web app\/website because when they are designed and developed in the best possible way, more users have the same\u202faccess to its content and functionalities.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"why-is-website-accessibility-important\">Why Is Website Accessibility Important?<\/h2>\n\n\n\n<p>At Infragistics, we want to ensure an optimal user experience, regardless of whether you are using a mouse, a touchpad or just a keyboard. That is why we have created a new user interface pattern for keyboard navigation within a page, called <strong>Active element navigation<\/strong> within our Ignite UI for Angular Grid. This pattern reduces the number of tab stops within the interface designed for the igxGrid to only five, and exposes plenty of new keyboard shortcuts for efficiency.<\/p>\n\n\n\n<p>Each tab stop element has a single-entry point, and from there users can easily navigate to different items in the corresponding Angular Grid element container by simply using the arrow keys. Thus, simplifying navigation and improving website usability.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/static.infragistics.com\/marketing\/Blogs\/Migration\/00\/00\/00\/04\/34\/6545.header-navigation.gif\" alt=\"Header navigation example\" title=\"Header navigation example\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>One of the biggest differentiators for our <a href=\"\/products\/ignite-ui\">Ignite UI toolbox<\/a> is that, unlike other grids on the market, we put end-users and their experience at the forefront of everything. That\u2019s why we ensure component and feature parity across all major technologies. Meaning that whatever you do in <a href=\"\/products\/ignite-ui-angular\/angular\/components\/grid\/grid\">Angular Grid<\/a>, can be done and easily transitioned to <a href=\"\/products\/ignite-ui-blazor\">Ignite UI for Blazor<\/a> or <a href=\"\/products\/ignite-ui-web-components\">Web Components<\/a> as well. There won\u2019t be any difference. So, if you care about your users, Ignite UI is the solution.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-aria-support\">What is ARIA Support?<\/h2>\n\n\n\n<p><span class=\"TextRun Highlight SCXW123817472 BCX0\" lang=\"EN-US\"><span class=\"NormalTextRun SCXW123817472 BCX0\">In short, ARIA stands for <\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">Accessible Rich Internet Application<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\"> and is a set of <\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">attributes <\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">that is added<\/span> <span class=\"NormalTextRun SCXW123817472 BCX0\">to your<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\"> HTML elements<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">,<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\"> mak<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">ing<\/span> <span class=\"NormalTextRun SCXW123817472 BCX0\">web apps and <\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">web content <\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">available<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\"> to<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\"> every<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\"> user<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">. ARIA support, then, is the capabilities of technologies, browsers, screen readers, and toolkits to <\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">support at least some of <\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">the <\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">ARIA<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\"> properties<\/span><span class=\"NormalTextRun SCXW123817472 BCX0\">.<\/span><\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"page-tab-sequence-and-aria-support\">Page&nbsp;Tab&nbsp;Sequence and Aria<\/h2>\n\n\n\n<p>As described in&nbsp;the&nbsp;<a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices\/#kbd_generalnav\" rel=\"noopener\">Fundamental Keyboard Navigation Conventions<\/a>&nbsp;section of&nbsp;W3C\u2019s&nbsp;WAI-ARIA Authoring Practices 1.1,&nbsp;the tab sequence&nbsp;should&nbsp;include only one focusable element of a&nbsp;Composite UI&nbsp;Component. We have&nbsp;five<i> such&nbsp;<\/i><a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices\/#kbd_generalnav\" rel=\"noopener\"><i>C<\/i><i>omposite UI&nbsp;<\/i><i>C<\/i><i>omponents<\/i><\/a>, hence five tab stops:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Toolbar\/Group by Area, if existing.<\/li>\n\n\n\n<li>Header row container &#8211;&nbsp;The first cell of the header row will become active.<\/li>\n\n\n\n<li>Tbody &#8211; The first&nbsp;igxCell&nbsp;(0,0) of the body container will become active.<\/li>\n\n\n\n<li>Footer &#8211; The first cell in the Column Summary will become active (if summaries are enabled).<\/li>\n\n\n\n<li>Pager UI &#8211;&nbsp;Items per page drop-down will become active.<\/li>\n<\/ul>\n\n\n\n<p>Pressing the\u202fTab\u202fkey will move focus out of the current container to the next element&nbsp;<strong>in the tab sequence.<\/strong>&nbsp;This&nbsp;is illustrated with&nbsp;the image below&nbsp;with&nbsp;the tab sequence &#8220;Grid Toolbar&#8221; -&gt; &#8220;Grid Headers&#8221; -&gt; &#8220;Grid Body Container&#8221; -&gt; &#8220;Summaries&#8221; -&gt; &#8220;Footer &#8211; Grid Paginator&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/static.infragistics.com\/marketing\/Blogs\/Migration\/00\/00\/00\/04\/34\/tab-stop-elements.gif\" alt=\"Page Tab Stops\" title=\"Page Tab Stops\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Each&nbsp;of the&nbsp;five&nbsp;tab-stop containers&nbsp;can be considered&nbsp;as&nbsp;a&nbsp;separate&nbsp;grouping&nbsp;entity,&nbsp;reducing the number of tab stops on the&nbsp;page. The Grid has a rich DOM structure&nbsp;along with plenty of virtualized containers, which&nbsp;allows for&nbsp;greater&nbsp;performance.&nbsp;Therefore,&nbsp;we&nbsp;have&nbsp;more than&nbsp;one focusable Grid element part of the&nbsp;page tab sequence. This&nbsp;allows us to have separate and rich navigation on all tab stop containers.<\/p>\n\n\n\n<p>Note: Keep in mind that the default-browser-focusable actions are persisted. We&nbsp;are not preventing focus of&nbsp;the HTML&nbsp;element part of ng-templates or other elements added separately in the Grid.&nbsp;The browser will handle its focus&nbsp;actions&nbsp;by default. There is no need to apply additional&nbsp;<strong>focusable<\/strong><strong>&nbsp;<\/strong>directives.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"active-element-navigation\">Active Element Navigation<\/h2>\n\n\n\n<p>Referring&nbsp;back to W3c\u2019s&nbsp;<a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices\/#kbd_generalnav\" rel=\"noopener\">Fundamental Keyboard Navigation Conventions<\/a>, all interactive UI components must be&nbsp;accessible&nbsp;via&nbsp;a&nbsp;keyboard. This is best achieved by either including them in the tab sequence or by making them&nbsp;reachable&nbsp;from a component that is in the tab sequence. In the&nbsp;<a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices\/#grid\" rel=\"noopener\">Grid&#8217;s<\/a>&nbsp;case navigation,&nbsp;it is possible to&nbsp;move&nbsp;through each one of these focusable containers with the navigation keys (Arrow keys, home\/end, ctrl + &#8216;action key&#8217;). This is where the&nbsp;<strong>Active element navigation<\/strong>&nbsp;concept kicks in<\/p>\n\n\n\n<p>Here, the active&nbsp;element is the first visible element from the focused container.&nbsp;<i>BUT<\/i>&nbsp;this element does&nbsp;not become focused. The focus remains&nbsp;on&nbsp;the actual container.&nbsp;The active element gives you the ability to navigate&nbsp;through most of the Grid elements,&nbsp;and activate features based on the focused Composite component.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"how-do-focused-elements-differ-from-selected-and-active-elements\">How Do Focused Elements Differ from Selected and Active Elements?<\/h2>\n\n\n\n<p>We consider the&nbsp;<a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices\/#gridNav_focus\" rel=\"noopener\">focused element<\/a>&nbsp;as a pointer &#8211; it tracks the path of navigation (page tab sequence). As we already&nbsp;know, we have five such composite elements. The Active element is used to navigate through these focusable containers.&nbsp;As&nbsp;you can see in the image below,&nbsp;the thick orange border&nbsp;with&nbsp;the&nbsp;gray&nbsp;cell&nbsp;background indicates the current active element for visual users.<\/p>\n\n\n\n<p>Selected elements are elements that have <em>aria-selected=&#8221;true&#8221;<\/em>. In the&nbsp;igxGrid&nbsp;case,&nbsp;<em>aria-selected<\/em> is applicable to all three types of selection elements&nbsp;&#8211;&nbsp;cell, row, and column selection&nbsp;(<a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices\/#kbd_focus_vs_selection\" rel=\"noopener\">WAI-ARIA<\/a>).<\/p>\n\n\n\n<p><strong>Key takeaways from the sections above:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Focused element &#8211; tracking the path of page tab sequence &#8211; Grid&#8217;s toolbar, header, body, footer,&nbsp;and pager.<\/li>\n\n\n\n<li>Active element &#8211; navigates within the five focusable containers with the arrow keys (and special keys like home\/end).<\/li>\n\n\n\n<li>Selected element &#8211; having <em>aria-selected=&#8221;true&#8221;<\/em> along with Grid selection styles applied (cell,&nbsp;row,&nbsp;or column selection).<\/li>\n<\/ul>\n\n\n\n<p>We follow the&nbsp;guidelines within the&nbsp;<a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices-1.1\/#grid\" rel=\"noopener\">WAI-ARIA Authoring Practices Guide<\/a>&nbsp;for specific recommendations on key and behavior mapping. So,&nbsp;the&nbsp;roles that ARIA Grid provides&nbsp;are&nbsp;recognizable&nbsp;in the&nbsp;Ignite UI for Angular Grid&nbsp;as well: grid, row, grid cell, row header, and column header.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tab-navigation\">Tab Navigation<\/h2>\n\n\n\n<p>The grid follows the primary&nbsp;<a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices\/#kbd_generalnav\" rel=\"noopener\">keyboard navigation convention<\/a>&nbsp;that the\u202f<strong>tab<\/strong>\u202fand <strong>shift + tab<\/strong>\u202fkeys move the focus from one UI component to another. The arrow keys change the active state inside of components that include multiple elements.<\/p>\n\n\n\n<p>Compared to&nbsp;previous&nbsp;tab interaction behavior,&nbsp;we&#8217;ve&nbsp;changed the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You cannot use the&nbsp;<strong>tab<\/strong> key to navigate between the cells in the&nbsp;<strong>IgxGrid<\/strong>. The navigation is&nbsp;now&nbsp;performed only with arrow keys.<\/li>\n\n\n\n<li>With&nbsp;the&nbsp;<strong>tab <\/strong>key, you can only navigate to the next editable cell (only when the cell is in edit mode). When the last editable cell (of the row) is reached, the navigation will continue to the next row&#8217;s editable cell. If the last editable cell is reached, the tab navigation will continue&nbsp;to&nbsp;the next focusable tab stop element.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"performance-improvements-and-code-enhancements\">The Performance Improvements &amp;&nbsp;Code Enhancements We Did<\/h2>\n\n\n\n<p>As a result of&nbsp;the&nbsp;new keyboard navigation concept,&nbsp;we&nbsp;have&nbsp;been able to&nbsp;optimize our code and implement&nbsp;performance improvements in the Ignite UI for Angular Grid. They include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Removed cell&nbsp;focus and blur handlers.<\/li>\n\n\n\n<li>Wheel and view detach handlers&nbsp;have been&nbsp;removed as well.<\/li>\n\n\n\n<li>Reduced navigation services. We&nbsp;previously&nbsp;had four navigation services for the Grid,&nbsp;HierarchicalGrid,&nbsp;TreeGrid,&nbsp;and MRL functionality.&nbsp;Now we have only three. With the old implementation, on scrolling with virtualized content,&nbsp;we were changing the cell context (the actual shell remained the same). But there was&nbsp;a&nbsp;problem&nbsp;with&nbsp;the browser&nbsp;not&nbsp;allowing&nbsp;us to focus&nbsp;on an&nbsp;already focused element. We had to blur the cell focus, change the cell context and focus it again. Now&nbsp;that&nbsp;is no&nbsp;longer an issue.<\/li>\n\n\n\n<li>Touch device enhancements. Now, if we have a focused cell on scrolling, we blur the cell before detaching the wheel handler.<\/li>\n\n\n\n<li>Application level performance boost with `events stacking`. Use `ngZoneEventColescing: true.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Const bootstrap = () =>\u00a0platformBrowserDynamic().bootstrapModule(AppModule, {\u00a0ngZoneEnetCoalescing: true });\u00a0<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"keyboard-navigation-features-integration\">Keyboard Navigation Features Integration<\/h2>\n\n\n\n<p>Let&#8217;s&nbsp;focus on the keyboard navigation features integration. Our Angular Grid has plenty of features and&nbsp;we&#8217;ve&nbsp;considered all of them&nbsp;carefully to ensure that&nbsp;they&nbsp;work properly with the new changes.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Header navigation<\/strong>\n<ul class=\"wp-block-list\">\n<li>We now have a smooth column header and column group navigation. Check out <a title=\"Hader interactions\" href=\"\/products\/ignite-ui-angular\/angular\/components\/grid\/keyboard_navigation.html#header-navigation\" target=\"_blank\" rel=\"noopener noreferrer\">this header interactions list<\/a>, which&nbsp;explains how to activate a certain feature with a key combination. <a title=\"Header navigation demo\" href=\"\/products\/ignite-ui-angular\/angular\/components\/grid\/keyboard_navigation.html#demo\" target=\"_blank\" rel=\"noopener noreferrer\">Live demo<\/a>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Excel-style filter and default filtering row<\/strong>\n<ul class=\"wp-block-list\">\n<li><i>Ctrl + Shift + L<\/i>&nbsp;will open the Excel-style filter\/default (row) filter.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Advanced filtering<\/strong>\n<ul class=\"wp-block-list\">\n<li><i>Alt + L<\/i>&nbsp;opens the advanced filter dialog.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Sorting<\/strong>\n<ul class=\"wp-block-list\">\n<li><i>Ctrl + Arrow up<\/i>&nbsp;sorts the active column header in ASC order. If the column is already sorted in ASC, it will remove the sorting (tri state none).<\/li>\n\n\n\n<li><i>Ctrl + Arrow down<\/i>&nbsp;sorts the active column header in DSC order. If the column is already sorted in DSC, it will remove the sorting (tri state none).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Group by&nbsp;<\/strong>\n<ul class=\"wp-block-list\">\n<li><i>S<\/i><i>hift + Alt + Arrow right&nbsp;<\/i>to group by the active column.<\/li>\n\n\n\n<li><i>Shift + Alt + Arrow left<\/i>&nbsp;ungroup the active column (remove it from the group by criteria).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Multi-column headers&nbsp;<\/strong>\n<ul class=\"wp-block-list\">\n<li><i>Alt + left\/up arrow key&nbsp;<\/i>\u2013 collapse.<\/li>\n\n\n\n<li><i>Alt + right\/down arrow key&nbsp;<\/i>\u2013 expand.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Column Selection<\/strong>\n<ul class=\"wp-block-list\">\n<li><i>Space key press<\/i>&nbsp;&#8211; select a column.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/static.infragistics.com\/marketing\/Blogs\/Migration\/00\/00\/00\/04\/34\/different-key-combinations.gif\" alt=\"Different key combinations\" title=\"Different key combinations\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><b>Note<\/b>: If you are using a screen-reader, keep in mind that on an initial header click, we focus the whole header container and the screen reader will read all header captions.&nbsp;Following&nbsp;a&nbsp;click&nbsp;on the header,&nbsp;the header caption + selection state will be read. Example &#8211;&nbsp;<i>Company name, column header selected.<\/i><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cell editing<\/strong> &#8211; now the&nbsp;<a href=\"https:\/\/www.w3.org\/TR\/wai-aria-practices\/#gridNav_inside\" rel=\"noopener\">tab navigation<\/a>&nbsp;works only for editable cells (In edit mode). On cell editing with Tab navigation, if we reach the end of the grid, the last cell will be submitted.&nbsp;Then the navigation will continue to the next available tab stop element.<\/li>\n\n\n\n<li><strong>Filtering (filtering chips)<\/strong> &#8211; Tab navigation for chips is removed, so navigation is possible only by using arrow keys. Also:\n<ul class=\"wp-block-list\">\n<li>Chips are part of the column header now.<\/li>\n\n\n\n<li>Chips are not focusable elements anymore.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Paging<\/strong> &#8211; richer website accessibility. Added tooltips, aria-labels,&nbsp;and roles.<\/li>\n\n\n\n<li><strong>Default Key combination updates<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Ctrl + any other key works only on real cells, not on a grouped row area. This is different compared with the old behavior.&nbsp;GroupBy&nbsp;and Master-Detail&nbsp;don\u2019t&nbsp;work with Ctrl+ arrow keys.<\/li>\n\n\n\n<li>Ctrl + Right\/Left Arrow works only on the common cells, summary row, and headers.<\/li>\n\n\n\n<li>Home and End (and Ctrl Home\/End) works as expected; there are no changes here.<\/li>\n\n\n\n<li>We now provide richer visual styling for the tab stops\/header element\/body cells\/summaries\/paging\/group by\/master-detail\/MRL\/cell editing.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"to-conclude\">To Conclude&#8230;<\/h2>\n\n\n\n<p><span class=\"NormalTextRun SCXW219999435 BCX0\">We understand the need for continuous innovation\u202fand\u202fthat\u202fgreat\u202ffeatures are a result of true collaboration<\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">. <\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">Thanks to the combined efforts of our developers<\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">,<\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">\u202f<\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">we\u2019ve<\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">\u202fmanaged to significantly reduce\u202fkeyboard navigation complexity<\/span><span class=\"NormalTextRun SCXW219999435 BCX0\"> when using Ignite UI for Angular Grid (but also in every other grid in major technologies, keeping feature <\/span><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW219999435 BCX0\">an<\/span> <span class=\"NormalTextRun SCXW219999435 BCX0\">component<\/span><span class=\"NormalTextRun SCXW219999435 BCX0\"> parity in mind)<\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">.\u202fThe\u202foverall keyboard interaction\u202fis now improved, intuitive to use, offering better <\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">website <\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">usability while ensuring <\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">website <\/span><span class=\"NormalTextRun SCXW219999435 BCX0\">accessibility.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Our enhanced grid keyboard navigation helps you overcome the number of controls and items that have increased dramatically on most web pages. Learn more.<\/p>\n","protected":false},"author":18,"featured_media":2387,"comment_status":"publish","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-379","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular"],"_links":{"self":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/comments?post=379"}],"version-history":[{"count":2,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/379\/revisions"}],"predecessor-version":[{"id":2256,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/379\/revisions\/2256"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media\/2387"}],"wp:attachment":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media?parent=379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/categories?post=379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/tags?post=379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}