Jak pozbyć się podkreślenia w komponencie Link w React Router?


121

Mam:

wprowadź opis obrazu tutaj

Jak pozbyć się niebieskiego podkreślenia? Kod poniżej:

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

Składnik MenuItem pochodzi z http://www.material-ui.com/#/components/menu

Wszelkie spostrzeżenia lub wskazówki byłyby bardzo mile widziane. Z góry dziękuję.


7
umieścić textDecoration: 'none'na <Link />komponencie, a nie jego elementach potomnych.
azium,

Odpowiedzi:


160

Widzę, że używasz stylów wbudowanych. textDecoration: 'none'jest stosowany u dziecka, gdzie tak naprawdę powinien być używany wewnątrz <Link>:

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

<Link>zasadniczo zwróci standardowy <a>tag, dlatego stosujemy textDecorationtam regułę.

Mam nadzieję że to pomogło


2
istnieje sposób na ustawienie globalne z brakiem dekoracji tekstu? w pliku app.css?
stackdave

3
To działa :). Pamiętaj, że jeśli skopiujesz i wkleisz styl do swojego pliku .css (ponieważ oczywiście nie lubisz stylów wbudowanych), to jest totext-decoration: none;
David Torres,

64

Jeśli używasz styled-components, możesz zrobić coś takiego:

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} />;

63

Myślę, że najlepszym sposobem użycia łącza react-router-dom w MenuItem (i innych komponentach MaterialUI, takich jak przyciski) jest przekazanie linku we właściwości „komponent”

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

musisz przekazać ścieżkę trasy we właściwości „do” elementu „MenuItem” (który zostanie przekazany do komponentu Link). W ten sposób nie musisz dodawać żadnego stylu, ponieważ użyje stylu MenuItem


8
Twoja zdecydowanie powinna być odpowiedź w 2019 r.
Pablo Anaya

5
To lepsze rozwiązanie niż powyższe odpowiedzi.
Martin Nuc

1
To zdecydowanie najlepsze rozwiązanie spośród opublikowanych
royalaid

To jest 100 razy lepsze niż dokumentacja, uwielbiają dużo bezużytecznego kodu
coiso

Wszystkie inne odpowiedzi mnie przerażają
coiso

30

Istnieje również inny sposób prawidłowego usunięcia stylu linku. Musisz nadać temu styl textDecoration='inherit'i color='inherit'możesz dodać je jako style do tagu linku, na przykład:

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

lub żeby było bardziej ogólnie, po prostu utwórz klasę css taką jak:

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

A potem po prostu <Link className='text-link'>


czy wypróbowałeś moje rozwiązanie stackoverflow.com/a/55693040/3000540
Daniele Urania

9

Możesz dodać style={{ textDecoration: 'none' }}swój Linkkomponent, aby usunąć podkreślenie. Możesz też dodać więcej cssw stylebloku np style={{ textDecoration: 'none', color: 'white' }}.

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

5

// 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>

5

Istnieje podejście nuklearne, które jest w twoim App.css (lub odpowiedniku)

a{
  text-decoration: none;
}

co zapobiega podkreślaniu wszystkich <a>tagów, co jest główną przyczyną tego problemu


To nie jest rozwiązanie dla react i styled-jsx…
AntonAL

faktycznie jej rozwiązanie pracował dla mnie jak im przy Sass obok mojego reagować i stosując wszystkie powyższe rozwiązania nie wyzwalania <link> Style składnika ..
Ahmed Younes

4

Pracując dla mnie, po prostu dodaj className="nav-link"iactiveStyle{{textDecoration:'underline'}}

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

2

Spójrz tutaj -> https://material-ui.com/guides/composition/#button .

To jest oficjalny przewodnik Material-UI. Może ci się przyda, tak jak dla mnie.

Jednak w niektórych przypadkach podkreślenie nie ustąpi i możesz chcieć użyć do tego dekoracji tekstu: „none”. Aby uzyskać bardziej przejrzyste podejście, możesz importować i używać makeStyles z material-ui / core.

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

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

const classes = useStyles();

Następnie ustaw atrybut className na {classes.menu-btn} w swoim kodzie JSX.


Pomyślałem, że dam ci znać, że rok później to była odpowiedź, której potrzebowałem, dzięki!
kbreezy04

1

Aby rozwinąć odpowiedź @ Grgura , jeśli spojrzysz do swojego inspektora, zobaczysz, że użycie Linkkomponentów daje im wstępnie ustawioną wartość koloru color: -webkit-link. Musisz to zmienić wraz z, textDecorationjeśli nie chcesz, aby wyglądało jak domyślne hiperłącze.

wprowadź opis obrazu tutaj




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

W niektórych przypadkach, gdy używany jest inny komponent wewnątrz komponentu Gatsby <Link>, dodanie znaku divz display: 'inline-block'wokół komponentu wewnętrznego zapobiega podkreślaniu (w przykładzie „strony”).


0

Jeśli ktoś szuka material-uikomponentu Link. Po prostu dodaj właściwość underlinei ustaw ją na none

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


0

Mam rozwiązać problem, może taki jak twój. Próbowałem sprawdzić element w przeglądarce Firefox. Pokażę Ci kilka wyników:

  1. To tylko element, który sprawdziłem. Komponent „Link” zostanie przekonwertowany na tag „a”, a właściwości „to” zostaną przekonwertowane na właściwość „href”:

  1. A kiedy zaznaczę: hov i opcja: hover i oto wynik:

Jak widzisz a: hover mają tekst-dekorację: podkreślenie. Dodam tylko do mojego pliku css:

a:hover {
 text-decoration: none;
}

i problem został rozwiązany. Ale ustawiłem też dekorację tekstu: żadna w innych klasach (jak ty: D), to może mieć jakieś efekty (tak sądzę).


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.