Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fix Lighthouse "Links do not have a discernible name"

Lighthouse suggesting to fix my a href text

I have a html like that

<a href="https://twitter.com/@some-name-here" target="_blank" rel="noopener" class="social-icon twitter grayscale"></a> 

What is really happens here is I just displaying the image inside a href by using css class:

.social-icon.twitter {   background: url('../images/logo-twitter.png') no-repeat center center; } 

I can't do <a....>Twitter</a> as in that case the displayed text will destroy the view.

I can't think of anything else like just putting a span with a text inside my a and make it hidden e.g <a....><span class="hide">Twitter</span></a> but wonder if there is any proper solution?

Any recommendations on that?

like image 965
sreginogemoh Avatar asked Aug 04 '18 08:08

sreginogemoh


People also ask

What is discernible name?

#Add Discernible Name to Links With Icons or Other Non-Textual Content. For non-textual content, such as the i tag (for adding icons), span , or any other tag without text content, adding the aria-label attribute to the link should be enough to make the it accessible.

How do I fix links not descriptive text?

You can fix this error simply by changing the words in the link or button to something more descriptive. You can run another Lighthouse audit to confirm your fix.


2 Answers

If want to implement this in react app then, We need to add aria-label property to <a> tag.

Before:

<a href={`https://${ this.props.info }`} target="_blank" rel="noopener noreferrer">    <i className="fa fa-circle fa-stack-2x"></i>    <i className={ `fa fa-${ this.props.icon } fa-stack-1x fa-inverse` }></i> </a> 

After:

<a href={`https://${ this.props.info }`} aria-label={`${ this.props.name }`} target="_blank" rel="noopener noreferrer">    <i className="fa fa-circle fa-stack-2x"></i>    <i className={ `fa fa-${ this.props.icon } fa-stack-1x fa-inverse` }></i> </a> 
like image 38
KARTHIKEYAN.A Avatar answered Sep 28 '22 16:09

KARTHIKEYAN.A


For accessibility reasons (required for screen readers) links must contain a text or have description in aria-label attribute. In many use cases like yours you don't want to add any text in a link, but instead use as image or any graphic element wrapper.

Fix it by adding aria-label="Twitter" to your a element, like

<a href="https://twitter.com/@some-name-here" aria-label="Twitter" target="_blank" rel="noopener" class="social-icon twitter grayscale"></a> 
like image 59
Binyamin Avatar answered Sep 28 '22 15:09

Binyamin