- From: Cameron McCormack <cam@mcc.id.au>
- Date: Sat, 19 May 2012 11:35:24 +1000
- To: Dirk Schulze <dschulze@adobe.com>
- CC: Peter Krautzberger <pkrautzb@umich.edu>, Vincent Hardy <vhardy@adobe.com>, "public-fx@w3.org" <public-fx@w3.org>
I think some of the existing <pre>-formatted formulae in the spec aren't really accessible yet anyway, especially those that render say matrices with repeated "[" and "]" characters. The example that I replaced, <pre>miterLimit / stroke-width = 1 / sin ( theta / 2 )</pre> is (at a guess) probably OK. I think we can use ARIA attributes to mark up the math with equivalent descriptions[1]. Here's a first go at representing the above formula: <div role="math" aria-describedby="a"> <math display="block"> <semantics> <mrow> <mfrac> <mi>miterLength</mi> <mi>stroke-width</mi> </mfrac> <mo>=</mo> <mfrac> <mn>1</mn> <mrow> <mi>sin</mi> <mo>⁡</mo> <mfrac> <mi>θ</mi> <mn>2</mn> </mfrac> </mrow> </mfrac> </mrow> <annotation-xml encoding="application/xhtml+xml"> <pre id="a">miterLimit / stroke-width = 1 / sin(theta / 2)</pre> </annotation-xml> </semantics> </math> </div> This is not going to work with MathJax -- either with the SVG or HTML+CSS renderings -- since as people have pointed out the <math> element gets replaced with content like this (in the SVG case): <div style="text-align: center;" aria-readonly="true" role="textbox" class="MathJax_SVG_Display"> <span class="MathJax_SVG" style="display: inline-block;"> <svg> ... </svg> </span> </div> <script type="math/mml"> (CDATA representing the serialised <math> tree we started with) </script> so the element with id="a" is gone. (I'm not sure why a read only text box is the best way to present the <svg> representation of the math to ATs.) Regardless, I'm after a practical solution here -- so perhaps we can just fall back on the old "position some text for the screen reader off the page where the sighted reader can't see it". <style> div[role="math"] > :first-child + * { position: absolute; left: -400px; width: 400px; overflow: hidden; } </style> <div role="math" aria-describedby="a"> <math display="block"> <mrow> <mfrac> <mi>miterLength</mi> <mi>stroke-width</mi> </mfrac> <mo>=</mo> <mfrac> <mn>1</mn> <mrow> <mi>sin</mi> <mo>⁡</mo> <mfrac> <mi>θ</mi> <mn>2</mn> </mfrac> </mrow> </mfrac> </mrow> </math> <pre id="a">miterLimit / stroke-width = 1 / sin(theta / 2)</pre> </div> This worked in Safari with VoiceOver -- although surprisingly to me, it didn't read the parentheses; I'm not sure if there is a way to investigate the exact characters that are in there with VO or other ATs. Can anyone suggest any better way to represent the math content in HTML besides a <pre> with content that looks like code? Especially for more complex formulae like the ones in http://www.w3.org/TR/SVG11/implnote.html#ArcConversionEndpointToCenter. Are screen reader users who read math on the web comfortable with TeX? (I notice that Wikipedia uses <img>s of rendered math with TeX in the alt="".) Aside: it'd be neat if I could use CSS to provide aria-describedby relationships for all the math in the page at once, for example something like: div[role="math"] { aria-describedby: selector(:scope > :first-child + *); }; [1] http://www.w3.org/TR/wai-aria/roles#math
Received on Saturday, 19 May 2012 01:36:07 UTC