{"id":1478,"date":"2025-01-02T14:08:31","date_gmt":"2025-01-02T14:08:31","guid":{"rendered":"https:\/\/html5accessibility.com\/stuff\/?p=1478"},"modified":"2025-01-03T10:24:59","modified_gmt":"2025-01-03T10:24:59","slug":"super-short-note-on-links-in-ios-with-voiceover","status":"publish","type":"post","link":"https:\/\/html5accessibility.com\/stuff\/2025\/01\/02\/super-short-note-on-links-in-ios-with-voiceover\/","title":{"rendered":"super short note on links in iOS with VoiceOver"},"content":{"rendered":"<blockquote>\n<figure id=\"attachment_1479\" aria-describedby=\"caption-attachment-1479\" style=\"width: 693px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1479 size-full\" src=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2025\/01\/Screenshot-2025-01-02-123246.jpg\" alt=\"Patrick and David out on the prowl in the grim light of old Preston\" width=\"693\" height=\"827\" srcset=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2025\/01\/Screenshot-2025-01-02-123246.jpg 693w, https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2025\/01\/Screenshot-2025-01-02-123246-251x300.jpg 251w\" sizes=\"auto, (max-width: 693px) 100vw, 693px\" \/><figcaption id=\"caption-attachment-1479\" class=\"wp-caption-text\">Preston Grim<\/figcaption><\/figure><\/blockquote>\n<p>I have been doing some testing and have noticed when navigating links on iOS using VoiceOver (VO), if the link contains an element that is not exposed as a generic element it causes VO to treat and announce text in the link as separate links.<\/p>\n<h2>Example<\/h2>\n<p>The link in the example is announced as 3 links it is also counted in the rotor as 3 links.<br \/>\n&#8220;Elements with a&#8221;, &#8220;generic&#8221;, and &#8220;role are ignored&#8221;<\/p>\n<pre>&lt;a href=\"#\"&gt;Elements with a <mark>&lt;code&gt;generic&lt;\/code&gt;<\/mark> \r\nrole are ignored&lt;\/a&gt;<\/pre>\n<p>When marked up with an element with an implicit or explicit generic role VO reports the correct number of links via the rotor<\/p>\n<p>This can be avoided by using an element with a <a href=\"https:\/\/w3c.github.io\/aria\/#generic\">generic<\/a> element such as a <code>&lt;span&gt;<\/code>but this appears a little flaky so addition of <code>role=\"none\"<\/code> is suggested.<\/p>\n<pre>&lt;a href=\"#\"&gt;Elements with a <mark>&lt;span&gt;generic&lt;\/span&gt;<\/mark> \r\nrole are ignored&lt;\/a&gt;\r\n\r\n&lt;a href=\"#\"&gt;Elements with a &lt;span <mark>role=\"none\"<\/mark>&gt;generic&lt;\/span&gt;\r\nrole are ignored&lt;\/a&gt;<\/pre>\n<p>or adding <code>role=\"none\"<\/code> to the <em>non-generic<\/em> element, which exposes it in the accessibility tree as <a href=\"https:\/\/w3c.github.io\/aria\/#generic\">generic<\/a><\/p>\n<pre>&lt;a href=\"#\"&gt;Elements with a &lt;code <mark>role=\"none\u201d<\/mark>&gt;generic&lt;\/code&gt; \r\nrole are ignored&lt;\/a&gt;<\/pre>\n<h2>Try it for yourself<\/h2>\n<p class=\"codepen\" style=\"height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;\" data-height=\"300\" data-default-tab=\"result\" data-slug-hash=\"ZYzXgmo\" data-pen-title=\"Untitled\" data-user=\"stevef\">See the Pen <a href=\"https:\/\/codepen.io\/stevef\/pen\/ZYzXgmo\"><br \/>\nUntitled<\/a> by steve faulkner (<a href=\"https:\/\/codepen.io\/stevef\">@stevef<\/a>)<br \/>\non <a href=\"https:\/\/codepen.io\">CodePen<\/a>.<\/p>\n<p><script async src=\"https:\/\/public.codepenassets.com\/embed\/index.js\"><\/script><\/p>\n<h2>bugged<\/h2>\n<p><a href=\"https:\/\/bugs.webkit.org\/show_bug.cgi?id=285299\">A bug<\/a> has been filed on webkit issue tracker<\/p>\n<h2>Now Listen<\/h2>\n<p><iframe loading=\"lazy\" title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/loiI8M3U7gA?si=u20kzFI0hRvmo5aB\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<details>\n<summary>Lyrics<\/summary>\n<pre>Bellower bellowed who would believe we got pot\r\nIt's a sign of the times like a cliche, written nonstop\r\nFull metal jackets get sprung, tanks that boil in a bag\r\nThe gunner, stop there's a drop off\r\nHartley hare and Vladimir's got his top off\r\nHe's got his top off, quick reach for your bits\r\nShit, he's so fit\r\nBig banger, number 10 can't gimme that Bruce Banner\r\nI got crisis stamina, full marathon, four poo breaks\r\nI can feel the shit from your crisis rays\r\nSpray up my back, because in England nobody can hear you scream\r\nYou're just fucked lads\r\nThis is UK GRIM\r\nKeep that desk area tidy\r\nPut it in the bin\r\nThis is UK GRIM\r\nThis is UK GRIM\r\nKeep that desk area tidy\r\nPut it in the bin\r\nThis is UK GRIM\r\nYour perceived contradictory and hypocritical fate\r\nThere's no top five album when you're off the grid, fuck all that\r\nI'm not here to please, you mate\r\nLiz Truss, conformity\r\nThe smooth streets in the business quarter\r\nWhere the white Range Rovers hum\r\nThey sound lovely, white shirts and lunch bellies\r\nThreesomes and wealth measles penetrate the cornflakes\r\nI want it all like a crack forest gateau\r\nI do drugs in my head so I can still go to bed\r\nAs I pound the slabs of this dreamscape into X\r\nThis is UK GRIM\r\nKeep that desk area tidy\r\nPut it in the bin\r\nThis is UK GRIM\r\nThis is UK GRIM\r\nKeep that desk area tidy\r\nPut it in the bin\r\nThis is UK GRIM\r\nbut when it's gone, leave the trails in the mindset\r\nBut when they come like a dawn raid smashed mindset\r\nthreat when's it's gone, leave the trails in the mindset\r\nBut when they come like a dawn raid smashed mindset\r\nbut when it's gone, leave the trails in the mindset\r\nBut when they come like a dawn raid smashed mindset\r\nThis is UK GRIM, put it in the bin\r\nThis is UK GRIM, put it in the bin\r\nThis is UK GRIM, put it in the bin\r\nThis is UK GRIM, put it in the fuckin' bin\r\n<\/pre>\n<\/details>\n","protected":false},"excerpt":{"rendered":"<p>I have been doing some testing and have noticed when navigating links on iOS using VoiceOver (VO), if the link contains an element that is not exposed as a generic element it causes VO to treat and announce text in the link as separate links. Example The link in the example is announced as 3 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1478","post","type-post","status-publish","format-standard","hentry","category-htmlaccessibility"],"_links":{"self":[{"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/posts\/1478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/comments?post=1478"}],"version-history":[{"count":14,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/posts\/1478\/revisions"}],"predecessor-version":[{"id":1493,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/posts\/1478\/revisions\/1493"}],"wp:attachment":[{"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/media?parent=1478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/categories?post=1478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/tags?post=1478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}