Bad code
<div tabindex="-1">
<div role="button">
<svg width="28" height="24"> … </svg>
</div>
</div>Issues and how to fix them
- Setting button semantics explicitly using the
roleattribute isn’t necessary, there’s an element for that (button). - You don’t need the
tabindexattribute if you use abutton. HTML buttons are focusable by default. - A click event on a
divtriggers only on click. A click event on abuttontriggers on click and if the user presses the Enter or Space key. - There’s no text alternative for the icon.
Good code
Unfortunately, there’s no native way of hiding content only visually.
The .sr-only class makes sure that content is visually hidden but still accessible to screen reader users.
.sr-only {
position: absolute;
white-space: nowrap;
width: 1px;
height: 1px;
overflow: hidden;
border: 0;
padding: 0;
clip: rect(0 0 0 0);
clip-path: inset(50%);
margin: -1px;
}<button>
<span class="sr-only">Send</span>
<svg width="28" height="24" aria-hidden="true"> … </svg>
</button>