<p>I'm a web developer, and I want to make the web sites I develop more accessible to those using screen readers.  What limitations do screen readers have that I should be most aware of, and what can I do to avoid hitting these limitations.</p>

<p>This question was sparked by reading another question about <a href="https://stackoverflow.com/questions/8472/best-non-image-based-captcha">non-image based captchas</a>.  In there, a commenter said that honey pot form fields (form fields hidden with CSS that only a bot would fill in), are a bad idea, because screen readers would still pick them up. </p>

<p>Are screen readers really so primitive that they would read text that isn't even displayed on the screen?  Ideally, couldn't you make a screen reader that waited until the page was finished loading, applied all css, and even ran Javascript onload functions before it figured out what was actually displayed, and then read that off to the user?  You could probably even identify parts of the page that are menus or table of contents, and give some sort of easy way for those parts to be read exclusively or skipped over. I would think that the programming community could come up with a better solution to this problem.  </p>

[{'answer_id': 26874, 'author': 'Ross', 'author_id': 2025, 'author_profile': 'https://Stackoverflow.com/users/2025', 'pm_score': 2, 'selected': False, 'text': '<blockquote>\n  <p>Are screen readers really so primitive that they would read text that isn\'t even displayed on the screen?</p>\n</blockquote>\n\n<p>What you have to remember is that any HTML parser doesn\'t read the screen - it reads the source markup. Whta you see on the screen is the browser\'s attempt to apply CSS to the source code. It\'s irrelevant.</p>\n\n<blockquote>\n  <p>You could probably even identify parts of the page that are menus or table of contents, and give some sort of easy way for those parts to be read exclusively or skipped over.</p>\n</blockquote>\n\n<p>You could, if there were a standard for such a thing.</p>\n\n<p>I\'m not very hot on the <em>limitations</em> of screen readers, however I\'ve read a lot about them not being ideal. The best thing I can reccommend is to put your source in order - how you\'d read it. </p>\n\n<p>There are a <a href="http://www.w3schools.com/css/css_ref_aural.asp" rel="nofollow noreferrer">set of CSS properties</a> you should also look at for screen readers.</p>\n'}, {'answer_id': 26889, 'author': 'Keith', 'author_id': 905, 'author_profile': 'https://Stackoverflow.com/users/905', 'pm_score': 0, 'selected': False, 'text': '<p>Have a look at <a href="http://www.w3.org/WAI/" rel="nofollow noreferrer">ARIA</a>, it\'s a standard for developing accessible rich-web-client applications.</p>\n'}, {'answer_id': 26917, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 1, 'selected': False, 'text': '<p>How many forms just have a * or bold to indicate to a sight user that a field is required for correct submission? What\'s the screen reader doing? Saying "star"?</p>\n\n<p>Below is an example of code that is helpful by articulating verbally but not visually. </p>\n\n<p>(note - in the example below the word "required." is spoken but not seen on screen)</p>\n\n<p>In the template:</p>\n\n<pre><code>&lt;label for="Requestor" accesskey="9"&gt;&lt;span class="required"&gt;&amp;nbsp;Requestor&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&lt;span class="hidden"&gt;required.&lt;/span&gt;&lt;/label&gt;\n</code></pre>\n\n<p>In the CSS:</p>\n\n<pre><code>#hidden {\n    position:absolute;\n    left:0px;\n    top:-500px;\n    width:1px;\n    height:1px;\n    overflow:hidden;\n}\n</code></pre>\n\n<p>or</p>\n\n<pre><code>.hidden {\n    position:absolute;\n    left:0px;\n    top:-500px;\n    width:1px;\n    height:1px;\n    overflow:hidden;\n}\n</code></pre>\n\n<p>There can be a whole parallel view behind the "seen" in every X/HTML page.</p>\n'}, {'answer_id': 27085, 'author': 'Brian Leahy', 'author_id': 580, 'author_profile': 'https://Stackoverflow.com/users/580', 'pm_score': 2, 'selected': False, 'text': '<p>Recommended listening: <a href="http://www.hanselminutes.com/default.aspx?showID=143" rel="nofollow noreferrer">Hanselminutes</a></p>\n\n<p>It\'s an interview with a blind programmer.</p>\n'}, {'answer_id': 27140, 'author': 'Kibbee', 'author_id': 1862, 'author_profile': 'https://Stackoverflow.com/users/1862', 'pm_score': 0, 'selected': False, 'text': '<p>@robertmyers</p>\n\n<p>CSS contains the aural media type specifically to control the "rendering" of things when screen readers are doing their work.  So, for you example, you would only set it as visible for the aural media type.  </p>\n\n<hr>\n\n<p>@Ross</p>\n\n<p>I\'m quite aware that the screen reader doesn\'t actually read the screen, but you would think that to work well, it would have to build a model of what a person with sight would see, otherwise, it seems like it would do a really poor job of getting across to the user what\'s actually on the page.  Also , putting things in the order you would read them doesn\'t really work, as a sighted person would scan the page quickly and read the section they want to read.  Do you put the contents first so that the user has to listen to them every time, or do you put them at the end so that they can get to the content first?  Also, putting content in order would mean some tricky CSS to get things positioned where you wanted them to be for sighted users.</p>\n\n<hr>\n\n<p>It seems to me that most web pages contain very similar construction, and that it should be possible to, in many cases, pick out where the repeated headers and side columns are. When viewing many subsequent pages on the same site with the same formatting, it should be easy to figure out which sections are navigation, and which are content.  Doing this, the screen reader could completely skip the navigation sections, and move right onto the content, as most sighted users would do.</p>\n\n<p>I realize there are limitations, and that doing these types of things wouldn\'t be easy.  However, I feel like as far as screen readers go, we only did the bare minimum and left it at that. </p>\n'}, {'answer_id': 17282043, 'author': 'FelipeAls', 'author_id': 137626, 'author_profile': 'https://Stackoverflow.com/users/137626', 'pm_score': 0, 'selected': False, 'text': '<p>Here\'s a list of alternatives to CAPTCHA compiled by Karl Groves: <strong><a href="http://www.karlgroves.com/2012/04/03/captcha-less-security/" rel="nofollow">CAPTCHA-less Security</a></strong></p>\n'}, {'answer_id': 22158556, 'author': 'unobfuscator', 'author_id': 1438281, 'author_profile': 'https://Stackoverflow.com/users/1438281', 'pm_score': 0, 'selected': False, 'text': '<p>@Kibbee,</p>\n\n<p>What you are describing as "primitive", is in fact a feature of screen readers that can be, and is, used to make sites more accessible. For example, if you have a tabbed interface, implemented with an unordered list and list items, then the sighted user would normally see the selected tab highlighted with a background color that is different (or some other visual treatment). Blind users cannot see this. So adding some additional text into the page and hiding it off screen is the technique used to communicate to the blind user what tab is active.</p>\n\n<p>In the accessibility lingo, this information is known as role, name, value and state.</p>\n\n<p>There are many other scenarios where this technique can be used to add information that is useful for a blind user.</p>\n\n<p>More recently, WAI-ARIA has been added to allow this state, role, name and value information, so you can now implement a limited number of widgets (like tabs) using HTML attributes. However, the more general "off screen" technique is still useful.</p>\n'}]
['https://Stackoverflow.com/questions/26860', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1862/']