What is the class sr-only
used for? Is it important or can I remove it? Works fine without.
Here's my example:
<div class="btn-group">
<button type="button" class="btn btn-info btn-md">Departments</button>
<button type="button" class="btn btn-info dropdown-toggle btn-md" data-toggle="dropdown">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a href="#">Sales</a></li>
<li><a href="#">Technical</a></li>
<li class="divider"></li>
<li><a href="#">Show all</a></li>
</ul>
</div>
Ensures that the object is displayed (or should be) only to readers and similar devices. It give more sense in context with other element with attribute aria-hidden="true".
Glyphicon will be displayed on all other devices, word Error: on text readers.
.sr-only
is a class name specifically used for screen readers. You can use any class name, but.sr-only
is pretty commonly used. If you don't care about developing with compliance in mind, then it can be removed. It will not affect UI in any way if removed because the CSS for this class is not visible to desktop and mobile device browsers.There seems to be some information missing here about the use of
.sr-only
to explain its purpose and being for screen readers. First and foremost, it is very important to always keep impaired users in mind. Impairment is the purpose of 508 compliance: https://www.section508.gov/, and it is great that bootstrap takes this into consideration. However, the use of.sr-only
is not all that needs to be taken into consideration for 508 compliance. You have the use of color, size of fonts, accessibility via navigation, descriptors, use of aria and so much more.But as for
.sr-only
- what does the CSS actually do? There are several slightly different variants of the CSS used for.sr-only
. One of the few I use is below:The above CSS hides content in desktop and mobile browsers wrapped with this class, but is seen by a screen reader like JAWS: http://www.freedomscientific.com/Products/Blindness/JAWS. Example markup is as follows:
Additionally, if a DOM element has a width and height of 0, the element is not seen by the DOM. This is why the above CSS uses
width: 1px; height: 1px;
. By usingdisplay: none
and setting your CSS toheight: 0
andwidth: 0
, the element is not seen by the DOM and is thus problematic. The above CSS usingwidth: 1px; height: 1px;
is not all you do to make the content invisible to desktop and mobile browsers (withoutoverflow: hidden
, your content would still show on the screen), and visible to screen readers. Hiding the content from desktop and mobile browsers is done by adding an offset fromwidth: 1px
andheight: 1px
previously mentioned by using:Lastly, to have a very good idea of what a screen reader sees and relays to its impaired user, turn off page styling for your browser. For Firefox, you can do this by going to:
I hope the information I provided here is of further use to someone in addition to the other responses.
The
.sr-only
class hides an element to all devices exceptscreen readers:
Skip to main content Combine .sr-only with .sr-only-focusable to show the element again when it is focused
I found this in the navbar example, and simplified it.
You see which one is selected (
sr-only
part is hidden):You hear which one is selected if you use screen reader:
As a result of this technique blind people supposed to navigate easier on your website.
As JoshC said, the class is used to hide information used for screen readers. But not only to hide labels, you might consider to hide from sighted user an internal link "skip to main content" which is desirable for blind users if you have a complex navigation or adds in the page header before the content. They would need to press arrow down key for too many times to reach it by screen reader.
According to the World Health Organization, 285 million people have vision impairments. So making a website accessible is important.
According to bootstrap's documentation, the class is used to hide information intended only for screen readers from the layout of the rendered page.
Here is an example styling used:
It's important, don't remove it.
You should always consider screen readers for accessibility purposes. Usage of the class will hide the element anyways, therefore you shouldn't see a visual difference.
If you're interested in reading about accessibility:
Web Accessibility Initiative (WAI)
MDN Accessibility documentation