How to get rid of underline for Link component of React Router?

JavascriptReactjsReact Router

Javascript Problem Overview


I have the following:

enter image description here

How do I get rid of the blue underline? The code is below:

<Link to="first"><MenuItem style={{paddingLeft: 13, textDecoration: 'none'}}> Team 1 </MenuItem></Link>

The MenuItem component is from http://www.material-ui.com/#/components/menu

Javascript Solutions


Solution 1 - Javascript

I see you're using inline styles. textDecoration: 'none' is used in child, where in fact it should be used inside <Link> as such:

<Link to="first" style={{ textDecoration: 'none' }}>
  <MenuItem style={{ paddingLeft: 13 }}>Team 1</MenuItem>
</Link>

<Link> will essentially return a standard <a> tag, which is why we apply textDecoration rule there.

I hope that helps

Solution 2 - Javascript

I think the best way to use react-router-dom Link in a MenuItem (and other MaterialUI component such as buttons) is to pass the Link in the "component" prop

<Menu>
   <MenuItem component={Link} to={'/first'}>Team 1</MenuItem>
   <MenuItem component={Link} to={'/second'}>Team 2</MenuItem>
</Menu>

you need to pass the route path in the 'to' prop of the "MenuItem" (which will be passed down to the Link component). In this way you don't need to add any style as it will use the MenuItem style

Solution 3 - Javascript

If you are using styled-components, you could do something like this:

import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import styled from 'styled-components';


const StyledLink = styled(Link)`
    text-decoration: none;

    &:focus, &:hover, &:visited, &:link, &:active {
        text-decoration: none;
    }
`;

export default (props) => <StyledLink {...props} />;

Solution 4 - Javascript

There's also another way to properly remove the styling of the link. You have to give it style of textDecoration='inherit' and color='inherit' you can either add those as styling to the link tag like:

<Link style={{ color: 'inherit', textDecoration: 'inherit'}}>

or to make it more general just create a css class like:

.text-link {
    color: inherit;
    text-decoration: inherit;
}

And then just <Link className='text-link'>

Solution 5 - Javascript

You can add style={{ textDecoration: 'none' }} in your Link component to remove the underline. You can also add more css in the style block e.g. style={{ textDecoration: 'none', color: 'white' }}.

<h1>
  <Link style={{ textDecoration: 'none', color: 'white' }} to="/getting-started">
    Get Started
  </Link>
</h1> 

     

Solution 6 - Javascript

a:-webkit-any-link {
  text-decoration: none;
  color: inherit;
}

Solution 7 - Javascript

There is the nuclear approach which is in your App.css (or counterpart)

a{
  text-decoration: none;
}

which prevents underline for all <a> tags which is the root cause of this problem

Solution 8 - Javascript

If someone is looking for material-ui's Link component. Just add the property underline and set it to none

<Link underline="none">...</Link>

Solution 9 - Javascript

//CSS

.navigation_bar > ul > li {
      list-style: none;
      display: inline;
      margin: 2%;
    }
    
    .link {
      text-decoration: none;
    }

//JSX

 <div className="navigation_bar">
            <ul key="nav">
              <li>
                <Link className="link" to="/">
                  Home
                </Link>
              </li>
            </ul>
          </div>

Solution 10 - Javascript

Its pretty simple. Just add this style={{ textDecoration: 'none' }} inside of your <Link> tag

<Link to="first" style={{ textDecoration: 'none' }}>
   <MenuItem style={{ paddingLeft: 13 }}>
         Team 1
   </MenuItem>

Solution 11 - Javascript

Working for me, just add className="nav-link" and activeStyle{{textDecoration:'underline'}}

<NavLink className="nav-link" to="/" exact activeStyle= 
  {{textDecoration:'underline'}}>My Record</NavLink>

Solution 12 - Javascript

Look here -> https://material-ui.com/guides/composition/#button.

This is the official material-ui guide. Maybe it'll be useful to you as it was for me.

However, in some cases, underline persists and you may want to use text-decoration: "none" for that. For a more cleaner approach, you can import and use makeStyles from material-ui/core.

import { makeStyles } from '@material-ui/core';

const useStyles = makeStyles(() => ({
	menu-btn: {
        textDecoration: 'none',
    },
}));
    
const classes = useStyles();

And then set className attribute to {classes.menu-btn} in your JSX code.

Solution 13 - Javascript

The underline comes by default from the react-router-dom package. You can do the following to fix the issue.

<Link to="/route-path" style={{ textDecoration: 'none' }}> 
    // Rest of the code
</Link>

Solution 14 - Javascript

Material UI v5+

You should be able to globally customize MUI component styles, such as:

import { createTheme } from '@mui/material'

const theme = createTheme({
  components: {
    MuiLink: {
      styleOverrides: {
        root: {
          textDecoration: 'none',
        },
      },
    },
  },
})

const App = ({ currentAccount, neighborhoodsWithPropertyCount }) => (
  <ThemeProvider theme={theme}>
    <Router>
      <Routes>
        <Route path="/" element={<Home />} />
      </Routes>
    </Router>
  </ThemeProvider>
)

export default App

However, more often than not, you should actually be using the Link component from react-router-dom, in which case links would have no text decoration by default.

Solution 15 - Javascript

To expand on @Grgur's answer, if you look in your inspector, you'll find that using Link components gives them the preset color value color: -webkit-link. You'll need to override this along with the textDecoration if you don't want it to look like a default hyperlink.

enter image description here

Solution 16 - Javascript

style={{ backgroundImage: "none" }}

Only this worked for me

Solution 17 - Javascript

I have resolve a problem maybe like your. I tried to inspect element in firefox. I will show you some results:

  1. It is only the element I have inspect. The "Link" component will be convert to "a" tag, and "to" props will be convert to the "href" property:

  1. And when I tick in :hov and option :hover and here is result:

As you see a:hover have text-decoration: underline. I only add to my css file:

a:hover {
 text-decoration: none;
}

and problem is resolved. But I also set text-decoration: none in some another classes (like you :D), that may be make some effects (I guess).

Solution 18 - Javascript

<Link
   to='/maxpain'
   replace
   style={{
           textDecoration: 'none'
          }}
   >
     <LinkText>Click here!</LinkText>
</Link>

Simple as that!

Solution 19 - Javascript

jsx:

<Link className="link">
  test
</Link>

css:

.link{
    text-decoration: none;
}

Solution 20 - Javascript

<Link to="/page">
    <Box sx={{ display: 'inline-block' }}>
	    <PLink variant="primary">Page</PLink>
    </Box>
</Link>

In some cases when using another component inside the Gatsby <Link> component, adding a div with display: 'inline-block' around the inner component, prevents underlining (of 'Page' in the example).

Solution 21 - Javascript

Well you can simply use this piece of code in your scss file; This will remove that unwanted color change,

a:-webkit-any-link {
  &:hover {
    color: white;
  }
}

Solution 22 - Javascript

I had a problem where the Link element was changing my h4 to 'underline', setting text-decoration: 'none' did not work, my only solution was to use a button instead.

<Link to="/settings">
    <button>Settings</button>
</Link>

Solution 23 - Javascript

standard a-link and react-link are the same.

so if you are styling a-link, it will automatically style react-link.

a{ what ever styling you want }

Solution 24 - Javascript

Just

<Link
   to={`$path`}
   style={{ borderBottom: "none" }}> 
    .... 
</Link>

Solution 25 - Javascript

I find this question and no one of the answers really resolve the problem at all in a general case (e.g. if the elements isn't a MenuItem). I suggest:

import {useHistory} from "react-router-dom";
const MyComp = () => {
  const history = useHistory();
  return <div>
    <AnyComponent onclick={()=>history.push('/path/u/want')}
  </div>
}

Solution 26 - Javascript

I just added two lines and worked for me :)

{
 text-decoration: none; 
 color: black;
}

Solution 27 - Javascript

<Link 
   _hover={{
      textDecoration: "none"
   }}
   >
   Logo
</Link>

Solution 28 - Javascript

 a {
  text-decoration: none !important;
  color: black !important; 
  font-size: 20px;
}

used !important in App.css

Solution 29 - Javascript

the <Link /> tag basically is <a> tag on render time, so you can just write

a { text-decoration: none; }

and it worked for me :) Good luck

Solution 30 - Javascript

What worked for me is this:

<Link to="/" style={{boxShadow: "none"}}>

Solution 31 - Javascript

Just add this to your css file or styles to remove any link causing underline!

a:-webkit-any-link{text-decoration: none;}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJo KoView Question on Stackoverflow
Solution 1 - JavascriptGrgurView Answer on Stackoverflow
Solution 2 - JavascriptDaniele UraniaView Answer on Stackoverflow
Solution 3 - JavascriptJoeTideeView Answer on Stackoverflow
Solution 4 - JavascriptPanosView Answer on Stackoverflow
Solution 5 - JavascriptShubham VermaView Answer on Stackoverflow
Solution 6 - JavascriptEnravelView Answer on Stackoverflow
Solution 7 - JavascriptDave PileView Answer on Stackoverflow
Solution 8 - JavascriptmdanishsView Answer on Stackoverflow
Solution 9 - JavascriptKushal AtreyaView Answer on Stackoverflow
Solution 10 - JavascriptCS AlamView Answer on Stackoverflow
Solution 11 - JavascriptvuvoView Answer on Stackoverflow
Solution 12 - JavascriptAbishek IlangoView Answer on Stackoverflow
Solution 13 - JavascriptRaj Kumar KausikView Answer on Stackoverflow
Solution 14 - JavascriptFlavio WuenscheView Answer on Stackoverflow
Solution 15 - JavascriptAlleyOOPView Answer on Stackoverflow
Solution 16 - JavascripttudorprodanView Answer on Stackoverflow
Solution 17 - JavascriptNeil NguyenView Answer on Stackoverflow
Solution 18 - JavascriptMohamed JakkariyaView Answer on Stackoverflow
Solution 19 - JavascriptSerhii ZadorozhnyiView Answer on Stackoverflow
Solution 20 - JavascriptservroxView Answer on Stackoverflow
Solution 21 - JavascriptJoel JaimonView Answer on Stackoverflow
Solution 22 - JavascripttomscodingView Answer on Stackoverflow
Solution 23 - JavascriptfruitloafView Answer on Stackoverflow
Solution 24 - JavascriptTh3 4nsw3r 1s 42View Answer on Stackoverflow
Solution 25 - JavascriptMassimo RebuglioView Answer on Stackoverflow
Solution 26 - JavascriptShakeel HaiderView Answer on Stackoverflow
Solution 27 - JavascriptDmitriyDView Answer on Stackoverflow
Solution 28 - JavascripttastytimView Answer on Stackoverflow
Solution 29 - JavascriptQuoc LyView Answer on Stackoverflow
Solution 30 - JavascriptAlex MirelesView Answer on Stackoverflow
Solution 31 - JavascriptZedanSaheerView Answer on Stackoverflow