{"id":34855,"date":"2025-05-30T15:28:43","date_gmt":"2025-05-30T13:28:43","guid":{"rendered":"https:\/\/www.angulararchitects.io\/blog\/angular-cdk-accessibility\/"},"modified":"2025-05-30T15:28:43","modified_gmt":"2025-05-30T13:28:43","slug":"angular-cdk-accessibility","status":"publish","type":"post","link":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/","title":{"rendered":"Enhancing A11y with Angular CDK"},"content":{"rendered":"<div class=\"wp-post-series-box series-accessibility-in-angular-en wp-post-series-box--expandable\">\n\t\t\t<input id=\"collapsible-series-accessibility-in-angular-en6ab4f58d5c2ba\" class=\"wp-post-series-box__toggle_checkbox\" type=\"checkbox\">\n\t\n\t<label\n\t\tclass=\"wp-post-series-box__label\"\n\t\t\t\t\tfor=\"collapsible-series-accessibility-in-angular-en6ab4f58d5c2ba\"\n\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\t\t<p class=\"wp-post-series-box__name wp-post-series-name\">\n\t\t\tThis is post 6 of 7 in the series <em>&ldquo;Accessibility in Angular&rdquo;<\/em>\t\t<\/p>\n\t\t\t<\/label>\n\n\t\t\t<div class=\"wp-post-series-box__posts\">\n\t\t\t<ol>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/web-accessibility-in-angular\/\">Web Accessibility (A11y) in Angular \u2013 Introduction<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/accessibility-testing-tools\/\">Accessibility Testing Tools<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/accessible-angular-routes\/\">Accessible Angular Routes<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/aria-roles-attributes\/\">ARIA roles and attributes in Angular<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/accessible-angular-forms\/\">Building Accessible Forms with Angular<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><span class=\"wp-post-series-box__current\">Enhancing A11y with Angular CDK<\/span><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-aria\/\">Angular ARIA initial version released<\/a><\/li>\n\t\t\t\t\t\t\t<\/ol>\n\t\t<\/div>\n\t<\/div>\n<p>The <a href=\"https:\/\/material.angular.dev\/cdk\/a11y\/overview\"><a href=\"mailto:strong&gt;@angular\/cdk\/a11y&lt;\/strong\">strong>@angular\/cdk\/a11y<\/strong<\/a><\/a> package is part of the <em>Angular Component Dev Kit (CDK)<\/em> and provides a collection of services, directives, SASS mixins, and other utilities to improve the Accessibility (A11y) of your <em>Angular apps<\/em>.<\/p>\n<p>These tools are invaluable when building reusable, presentation-focused components with screen-reader announcements, robust keyboard and focus support, high-contrast theming, and more. They\u2019re especially useful if you\u2019re creating an <em>Angular Component Library<\/em> or a <em>Design System<\/em>.<\/p>\n<p>Below are some of my favorites, along with brief code examples.<\/p>\n<h2>LiveAnnouncer for Screen Readers<\/h2>\n<p>The first service we want to highlight is the <strong><a href=\"https:\/\/material.angular.dev\/cdk\/a11y\/overview#liveannouncer\">LiveAnnouncer<\/a><\/strong>. It allows you to announce messages to screen readers, which is particularly useful for providing feedback after user interactions. It's so simple: I often replace my <code>console.log<\/code> calls with announcements.<\/p>\n<p>Here's an example of that:<\/p>\n<pre><code class=\"language-typescript\">private readonly liveAnnouncer = inject(LiveAnnouncer);<\/code><\/pre>\n<pre><code class=\"language-typescript\">if (this.flights().length &gt; 0) {\n  \/\/ console.log(&#039;Found &#039; + this.flights().length + &#039; flights&#039;);\n  this.liveAnnouncer.announce(&#039;Found &#039; + this.flights().length + &#039; flights&#039;);\n} else {\n  \/\/ console.log(&#039;No flights found&#039;);\n  this.liveAnnouncer.announce(&#039;No flights found&#039;);\n}<\/code><\/pre>\n<p>Make sure to test your announcements with the use of a <strong><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/accessibility-testing-tools\/\">screen reader<\/a><\/strong>.<\/p>\n<h2>Focus Tools<\/h2>\n<p>The <em>Angular CDK<\/em> also includes several tools supporting your focus management.<\/p>\n<h3>Focus Trap<\/h3>\n<p>The <em><strong><a href=\"https:\/\/material.angular.dev\/cdk\/a11y\/overview#focustrap\">FocusTrap<\/a><\/strong> Directive<\/em> allows you to trap focus within a specific element, ensuring that keyboard navigation remains within that element until the user explicitly exits it.<\/p>\n<p>This is particularly useful for modal dialogs or pop-ups:<\/p>\n<pre><code class=\"language-html\">&lt;dialog class=&quot;awesome-dialog&quot; cdkTrapFocus&gt;\n  &lt;!\u2013- Yay, focus won&#039;t leave this element! --&gt;\n&lt;\/dialog&gt;<\/code><\/pre>\n<p>If you want focus to jump in automatically, enable the <strong><code>cdkTrapFocusAutoCapture<\/code><\/strong> flag:<\/p>\n<pre><code class=\"language-html\">&lt;dialog class=&quot;awesome-dialog&quot; cdkTrapFocus [cdkTrapFocusAutoCapture]=&quot;true&quot;&gt;\n  &lt;!\u2013- Yay, focus won&#039;t leave this element! --&gt;\n&lt;\/dialog&gt;<\/code><\/pre>\n<p>With this flag set to <code>true<\/code>, the focus will automatically be captured when the dialog opens. However, it may not always be the best choice to have an element automatically capture focus, so we can avoid this with a trick:<\/p>\n<pre><code class=\"language-html\">&lt;dialog class=&quot;awesome-dialog&quot; cdkTrapFocus [cdkTrapFocusAutoCapture]=&quot;true&quot;&gt;\n  &lt;h3 class=&quot;awesome-dialog__title&quot; tabindex=&quot;-1&quot; cdkFocusInitial&gt;...&lt;\/h3&gt;\n  &lt;!\u2013- Yay, focus won&#039;t leave this element! --&gt;\n&lt;\/dialog&gt;<\/code><\/pre>\n<p>By adding <strong><code>cdkFocusInitial<\/code><\/strong> the title will be secretly focused initially. Since it has tabindex <code>-1<\/code>, it won't be focusable by keyboard navigation afterward.<\/p>\n<h3>Focus Regions<\/h3>\n<p>The <em><strong><a href=\"https:\/\/material.angular.dev\/cdk\/a11y\/overview#regions\">Regions<\/a><\/strong><\/em> are a powerful tool that allows you to define a specific area of your application where focus should be managed. This is particularly useful for complex components like dropdowns or menus, where you want to ensure that focus remains within the component while it is open.<\/p>\n<ul>\n<li><strong><code>cdkFocusRegionStart<\/code><\/strong><\/li>\n<li><strong><code>cdkFocusRegionEnd<\/code><\/strong> and optionally<\/li>\n<li><strong><code>cdkFocusInitial<\/code><\/strong><\/li>\n<\/ul>\n<p>Here's an example of how to use the <em><strong>Regions<\/strong><\/em>:<\/p>\n<pre><code class=\"language-html\">&lt;nav&gt;\n  &lt;a routerLink routerLinkActive=&quot;awesome&quot; ariaCurrentWhenActive=&quot;page&quot; cdkFocusRegionStart&gt;Focus region start&lt;\/a&gt;&lt;\/li&gt;\n  &lt;a routerLink routerLinkActive=&quot;awesome&quot; ariaCurrentWhenActive=&quot;page&quot;&gt;Another focusable link&lt;\/a&gt;&lt;\/li&gt;\n  &lt;a routerLink routerLinkActive=&quot;awesome&quot; ariaCurrentWhenActive=&quot;page&quot; cdkFocusInitial&gt;Initially focused&lt;\/a&gt;&lt;\/li&gt;\n  &lt;a routerLink routerLinkActive=&quot;awesome&quot; ariaCurrentWhenActive=&quot;page&quot; cdkFocusRegionEnd&gt;Focus region end&lt;\/a&gt;&lt;\/li&gt;\n&lt;\/nav&gt;<\/code><\/pre>\n<p>Note: To learn about the <code>ariaCurrentWhenActive<\/code> please read my post on <a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/accessible-angular-routes\/\"><em>Accessible Angular Routes<\/em><\/a><\/p>\n<h3>Focus Monitor<\/h3>\n<p>The <strong>FocusMonitor<\/strong> is a service that allows you to monitor focus changes within your application. It can be used to track when an element gains or loses focus, which is particularly useful for debugging focus-related issues.<\/p>\n<p>This service can be injected into your components or services, and you can subscribe to focus changes:<\/p>\n<pre><code class=\"language-typescript\">import { Component, DestroyRef, effect, ElementRef, inject, viewChild } from &#039;@angular\/core&#039;;\nimport { FocusMonitor, FocusOrigin } from &#039;@angular\/cdk\/a11y&#039;;\n\n@Component({\n  selector: &#039;app-navbar&#039;,\n  template: <code>&lt;nav #observed class=&quot;awesome-nav-cnt&quot;&gt;&lt;!-- children --&gt;&lt;\/nav&gt;<\/code>,\n})\nexport class AwesomeFocusMonitorComponent {\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly focusMonitor = inject(FocusMonitor);\n  private readonly observedElementRef = viewChild.required&lt;ElementRef&lt;HTMLElement&gt;&gt;(&#039;observed&#039;);\n\n  constructor() {\n    effect(() =&gt; {\n      const observedElementRef = this.observedElementRef(); \/\/ effect will run when the view is initialized\n      this.focusMonitor.monitor(observedElementRef, true).subscribe((origin: FocusOrigin) =&gt; console.log(origin));\n      this.destroyRef.onDestroy(() =&gt; this.focusMonitor.stopMonitoring(observedElementRef));\n    });\n  }\n}<\/code><\/pre>\n<p>This is particularly useful for debugging focus-related issues, as it allows you to see when an element gains or loses focus.<\/p>\n<p><code>FocusOrigin<\/code> can be one of the following:<\/p>\n<ul>\n<li><code>&#039;mouse&#039;<\/code> the element was focused with the mouse<\/li>\n<li><code>&#039;keyboard&#039;<\/code> it was focused with the keyboard<\/li>\n<li><code>&#039;touch&#039;<\/code> it was focused by touching on a touchscreen<\/li>\n<li><code>&#039;program&#039;<\/code> it was focused programmatically, whereas<\/li>\n<li><code>null<\/code> indicates the element was blurred<\/li>\n<\/ul>\n<p>So, this is also useful to check if a touch device is being used \ud83d\ude0f<\/p>\n<h2>Styling utilities<\/h2>\n<p>The <em>Angular A11y package<\/em> also includes two useful Sass mixins.<\/p>\n<h3>Hidden Elements<\/h3>\n<p>Screen readers and other assistive technology skip elements that have <code>display: none<\/code>, <code>visibility: hidden<\/code>, <code>opacity: 0<\/code>, <code>height: 0<\/code>, or <code>width: 0<\/code>. In some cases, you may need to visually hide an element while <strong>keeping it available to assistive technology<\/strong> (e.g. Screen Readers).<\/p>\n<pre><code class=\"language-scss\">@use &#039;@angular\/cdk&#039;;\n\n@include cdk.a11y-visually-hidden();<\/code><\/pre>\n<pre><code class=\"language-html\">&lt;div class=&quot;awesome-toggle&quot;&gt;\n  &lt;input type=&quot;checkbox&quot; class=&quot;cdk-visually-hidden&quot; \/&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<h3>High Contrast Mode<\/h3>\n<p>Some operating systems and\/or devices include a <strong>High Contrast Mode<\/strong>. The <em>Angular A11y package<\/em> provides a Sass mixin that lets you define styles that only apply in high contrast mode. To create a high contrast style, just wrap it into the high-contrast mixin.<\/p>\n<pre><code class=\"language-scss\">@use &#039;@angular\/cdk&#039;;\n\nbutton {\n  @include cdk.high-contrast {\n    outline: 3px solid gold;\n  }\n}<\/code><\/pre>\n<p>The mixin works by targeting the forced-colors media query.<\/p>\n<h2>Accessibility Workshop<\/h2>\n<p>For those looking to deepen their <em>Angular<\/em> expertise, we offer a range of workshops \u2013 both in English and German:<\/p>\n<ul>\n<li>\u267f <a href=\"https:\/\/www.angulararchitects.io\/en\/training\/angular-accessibility-workshop\/\"><strong>Accessibility Workshop<\/strong><\/a><\/li>\n<li>\ud83d\udcc8 <a href=\"https:\/\/www.angulararchitects.io\/en\/training\/angular-best-practices\/\"><strong>Best Practices Workshop<\/strong><\/a> (including accessibility-related topics)<\/li>\n<li>\ud83d\ude80 <a href=\"https:\/\/www.angulararchitects.io\/en\/training\/angular-performance-optimization-workshop\/\"><strong>Performance Workshop<\/strong><\/a><\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>With these tools, you can significantly enhance the accessibility of your <em>Angular Apps<\/em>. They help ensure that your components are not only functional but also user-friendly for everyone, including those with disabilities.<\/p>\n<p>One last thing: In this Code lab by Google, you can find some exercises on the most important <em>Angular CDK A11y<\/em> tools <a href=\"https:\/\/codelabs.developers.google.com\/angular-a11y#8\"><a href=\"https:\/\/codelabs.developers.google.com\/angular-a11y#8\">https:\/\/codelabs.developers.google.com\/angular-a11y#8<\/a><\/a><\/p>\n<h3>That's all folks!<\/h3>\n<p>This is the last edition of our A11y series. I hope you found it helpful and learned something new about making your <em>Angular Apps<\/em> more accessible and user-friendly for all of us, and that you are ready for the <strong>European Accessibility Act (EAA)<\/strong>. If uncertain, please go back to the start of the <strong><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/web-accessibility-in-angular\/\">A11y blog series<\/a><\/strong>.<\/p>\n<p>This blog post was written by <a href=\"https:\/\/alex.thalhammer.name\">Alexander Thalhammer<\/a>. Follow me on <a href=\"https:\/\/at.linkedin.com\/in\/thalhammer\">Linkedin<\/a>, <a href=\"https:\/\/twitter.com\/LX_T\">X<\/a> or <a href=\"https:\/\/github.com\/L-X-T\">giThub<\/a>.<\/p>\n<h2>References<\/h2>\n<ul>\n<li><a href=\"https:\/\/material.angular.dev\/cdk\/a11y\/overview\">Angular CDK Accessibility \u2013 official docs<\/a><\/li>\n<li><a href=\"https:\/\/codelabs.developers.google.com\/angular-a11y#8\">Google codelab on A11y<\/a> by Emma Twersky<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This is post 6 of 7 in the series &ldquo;Accessibility in Angular&rdquo; Web Accessibility (A11y) in Angular \u2013 Introduction Accessibility Testing Tools Accessible Angular Routes ARIA roles and attributes in Angular Building Accessible Forms with Angular Enhancing A11y with Angular CDK Angular ARIA initial version released The strong>@angular\/cdk\/a11y<\/p>\n","protected":false},"author":21,"featured_media":30412,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-34855","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","post_series-accessibility-in-angular-en"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Enhancing A11y with Angular CDK - ANGULARarchitects<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enhancing A11y with Angular CDK - ANGULARarchitects\" \/>\n<meta property=\"og:description\" content=\"This is post 6 of 7 in the series &ldquo;Accessibility in Angular&rdquo; Web Accessibility (A11y) in Angular \u2013 Introduction Accessibility Testing Tools Accessible Angular Routes ARIA roles and attributes in Angular Building Accessible Forms with Angular Enhancing A11y with Angular CDK Angular ARIA initial version released The strong&gt;@angular\/cdk\/a11y\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/\" \/>\n<meta property=\"og:site_name\" content=\"ANGULARarchitects\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-30T13:28:43+00:00\" \/>\n<meta name=\"author\" content=\"Alexander Thalhammer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@LX_T\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alexander Thalhammer\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/\"},\"author\":{\"name\":\"Alexander Thalhammer\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/eefb0cd4d115dfd406a02b6dbc760d45\"},\"headline\":\"Enhancing A11y with Angular CDK\",\"datePublished\":\"2025-05-30T13:28:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/\"},\"wordCount\":12,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/05\/a11y-with-angular-CDK.jpg\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/\",\"name\":\"Enhancing A11y with Angular CDK - ANGULARarchitects\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/05\/a11y-with-angular-CDK.jpg\",\"datePublished\":\"2025-05-30T13:28:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#primaryimage\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/05\/a11y-with-angular-CDK.jpg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/05\/a11y-with-angular-CDK.jpg\",\"width\":720,\"height\":480,\"caption\":\"Accessibility with Angular CDK Hero\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.angulararchitects.io\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enhancing A11y with Angular CDK\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"name\":\"ANGULARarchitects\",\"description\":\"AngularArchitects.io\",\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\",\"name\":\"ANGULARarchitects\",\"alternateName\":\"SOFTWAREarchitects\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"width\":644,\"height\":216,\"caption\":\"ANGULARarchitects\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/github.com\/angular-architects\",\"https:\/\/www.linkedin.com\/company\/angular-architects\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/eefb0cd4d115dfd406a02b6dbc760d45\",\"name\":\"Alexander Thalhammer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/23f1b6f9b1ee7d04247b8320851762347d56c76b1537d100d07390d6d919b78d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/23f1b6f9b1ee7d04247b8320851762347d56c76b1537d100d07390d6d919b78d?s=96&d=mm&r=g\",\"caption\":\"Alexander Thalhammer\"},\"sameAs\":[\"https:\/\/x.com\/LX_T\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Enhancing A11y with Angular CDK - ANGULARarchitects","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:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/","og_locale":"en_US","og_type":"article","og_title":"Enhancing A11y with Angular CDK - ANGULARarchitects","og_description":"This is post 6 of 7 in the series &ldquo;Accessibility in Angular&rdquo; Web Accessibility (A11y) in Angular \u2013 Introduction Accessibility Testing Tools Accessible Angular Routes ARIA roles and attributes in Angular Building Accessible Forms with Angular Enhancing A11y with Angular CDK Angular ARIA initial version released The strong>@angular\/cdk\/a11y","og_url":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/","og_site_name":"ANGULARarchitects","article_published_time":"2025-05-30T13:28:43+00:00","author":"Alexander Thalhammer","twitter_card":"summary_large_image","twitter_creator":"@LX_T","twitter_misc":{"Written by":"Alexander Thalhammer"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#article","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/"},"author":{"name":"Alexander Thalhammer","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/eefb0cd4d115dfd406a02b6dbc760d45"},"headline":"Enhancing A11y with Angular CDK","datePublished":"2025-05-30T13:28:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/"},"wordCount":12,"commentCount":0,"publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/05\/a11y-with-angular-CDK.jpg","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/","url":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/","name":"Enhancing A11y with Angular CDK - ANGULARarchitects","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#primaryimage"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/05\/a11y-with-angular-CDK.jpg","datePublished":"2025-05-30T13:28:43+00:00","breadcrumb":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#primaryimage","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/05\/a11y-with-angular-CDK.jpg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/05\/a11y-with-angular-CDK.jpg","width":720,"height":480,"caption":"Accessibility with Angular CDK Hero"},{"@type":"BreadcrumbList","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/angular-cdk-accessibility\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.angulararchitects.io\/en\/"},{"@type":"ListItem","position":2,"name":"Enhancing A11y with Angular CDK"}]},{"@type":"WebSite","@id":"https:\/\/www.angulararchitects.io\/en\/#website","url":"https:\/\/www.angulararchitects.io\/en\/","name":"ANGULARarchitects","description":"AngularArchitects.io","publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.angulararchitects.io\/en\/#organization","name":"ANGULARarchitects","alternateName":"SOFTWAREarchitects","url":"https:\/\/www.angulararchitects.io\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","width":644,"height":216,"caption":"ANGULARarchitects"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/github.com\/angular-architects","https:\/\/www.linkedin.com\/company\/angular-architects\/"]},{"@type":"Person","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/eefb0cd4d115dfd406a02b6dbc760d45","name":"Alexander Thalhammer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/23f1b6f9b1ee7d04247b8320851762347d56c76b1537d100d07390d6d919b78d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/23f1b6f9b1ee7d04247b8320851762347d56c76b1537d100d07390d6d919b78d?s=96&d=mm&r=g","caption":"Alexander Thalhammer"},"sameAs":["https:\/\/x.com\/LX_T"]}]}},"_links":{"self":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/34855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/comments?post=34855"}],"version-history":[{"count":0,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/34855\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media\/30412"}],"wp:attachment":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media?parent=34855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/categories?post=34855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/tags?post=34855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}