Wie entferne ich die Unterstreichung für die Link-Komponente von React Router?

120

Ich habe folgendes:

Geben Sie hier die Bildbeschreibung ein

Wie entferne ich die blaue Unterstreichung? Der Code ist unten:

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

Die MenuItem-Komponente stammt von http://www.material-ui.com/#/components/menu

Jede Einsicht oder Anleitung wäre sehr dankbar. Vielen Dank im Voraus.

Jo Ko
quelle
7
Setzen Sie textDecoration: 'none'auf die <Link />Komponente nicht ihre Kinder.
Azium

Antworten:

158

Ich sehe, dass Sie Inline-Stile verwenden. textDecoration: 'none'wird bei Kindern verwendet, wo es tatsächlich <Link>als solches verwendet werden sollte:

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

<Link>gibt im Wesentlichen ein Standard- <a>Tag zurück, weshalb wir dort die textDecorationRegel anwenden .

Ich hoffe das hilft

Grgur
quelle
2
Gibt es eine Möglichkeit, global mit Textdekoration keine zu setzen? in der app.css?
Stackdave
3
Es klappt :). Beachten Sie, dass wenn Sie kopieren, fügen Sie den Stil in Ihre .css (weil Sie natürlich keine Inline-Stile mögen) dann isttext-decoration: none;
David Torres
62

Wenn Sie verwenden styled-components, können Sie Folgendes tun:

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} />;
JoeTidee
quelle
61

Ich denke, der beste Weg, um React-Router-Dom Link in einem MenuItem (und anderen MaterialUI-Komponenten wie Schaltflächen) zu verwenden, besteht darin, den Link in der "Komponente" -Prop zu übergeben

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

Sie müssen den Routenpfad in der 'to'-Requisite des "MenuItem" übergeben (die an die Link-Komponente weitergegeben wird). Auf diese Weise müssen Sie keinen Stil hinzufügen, da der MenuItem-Stil verwendet wird

Daniele Urania
quelle
7
Ihre sollte definitiv die Antwort im Jahr 2019 sein.
Pablo Anaya
4
Dies ist eine bessere Lösung als die obigen Antworten.
Martin Nuc
Dies ist definitiv die beste Lösung von denen, die veröffentlicht wurden
royalaid
Dies ist 100x besser als die Dokumente, sie lieben viele nutzlose Codes
coiso
Alle anderen Antworten machen mir Angst
coiso
28

Es gibt auch eine andere Möglichkeit, das Styling des Links ordnungsgemäß zu entfernen. Sie müssen ihm einen Stil geben textDecoration='inherit'und color='inherit'Sie können diese entweder als Stil zum Link-Tag hinzufügen, wie:

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

oder um es allgemeiner zu machen, erstellen Sie einfach eine CSS-Klasse wie:

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

Und dann einfach <Link className='text-link'>

Panos
quelle
Haben Sie versucht, meine Lösung stackoverflow.com/a/55693040/3000540
Daniele Urania
9

Sie können style={{ textDecoration: 'none' }}Ihre LinkKomponente hinzufügen , um die Unterstreichung zu entfernen. Sie können cssdem styleBlock auch weitere hinzufügen , z style={{ textDecoration: 'none', color: 'white' }}.

<h1>
  <Link style={{ textDecoration: 'none', color: 'white' }} to="/getting-started">
    Get Started
  </Link>
</h1> 
Shubham Verma
quelle
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>
Kushal Atreya
quelle
5

Es gibt den nuklearen Ansatz, der in Ihrer App.css (oder Ihrem Gegenstück) enthalten ist.

a{
  text-decoration: none;
}

<a>Dies verhindert das Unterstreichen aller Tags, was die Hauptursache für dieses Problem ist

Dave Pile
quelle
Keine Lösung für reagieren und gestylt-jsx ...
AntonAL
Eigentlich ist es eine Lösung, die für mich funktioniert hat, da ich neben meiner Reaktion sass benutze und alle oben genannten Lösungen keinen <link> -Komponentenstil auslöste.
Ahmed Younes
4

Arbeiten Sie für mich, fügen Sie einfach className="nav-link"undactiveStyle{{textDecoration:'underline'}}

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

Schauen Sie hier -> https://material-ui.com/guides/composition/#button .

Dies ist der offizielle Material-UI-Leitfaden. Vielleicht ist es für dich so nützlich wie für mich.

In einigen Fällen bleibt die Unterstreichung jedoch bestehen, und Sie möchten möglicherweise die Textdekoration verwenden: "keine" dafür. Für einen saubereren Ansatz können Sie makeStyles aus material-ui / core importieren und verwenden.

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

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

const classes = useStyles();

Setzen Sie dann das Attribut className in Ihrem JSX-Code auf {classes.menu-btn}.

Abishek Ilango
quelle
Ich dachte, ich würde dich wissen lassen, dass dies die Antwort war, die ich brauchte, danke!
kbreezy04
1

Wenn Sie in Ihrem Inspektor nachsehen, werden Sie feststellen, dass die Verwendung von Komponenten den voreingestellten Farbwert ergibt, um die Antwort von @ Grgur zu erweitern . Sie müssen dies zusammen mit dem überschreiben, wenn Sie nicht möchten, dass es wie ein Standard-Hyperlink aussieht.Linkcolor: -webkit-linktextDecoration

Geben Sie hier die Bildbeschreibung ein

AlleyOOP
quelle
1
style={{ backgroundImage: "none" }}

Nur das hat bei mir funktioniert

Tudorprodan
quelle
1
a:-webkit-any-link {
  text-decoration: none;
  color: inherit;
}
Enravel
quelle
0
<Link to="/page">
    <Box sx={{ display: 'inline-block' }}>
        <PLink variant="primary">Page</PLink>
    </Box>
</Link>

In einigen Fällen verhindert das <Link>Hinzufügen eines divwith display: 'inline-block'um die innere Komponente, wenn eine andere Komponente innerhalb der Gatsby- Komponente verwendet wird , das Unterstreichen (von 'Seite' im Beispiel).

servrox
quelle
0

Wenn jemand nach material-uider Link-Komponente sucht . Fügen Sie einfach die Eigenschaft hinzu underlineund setzen Sie sie auf none

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

mdanishs
quelle
0

Ich habe ein Problem wie das Ihre gelöst. Ich habe versucht, das Element in Firefox zu untersuchen. Ich werde Ihnen einige Ergebnisse zeigen:

  1. Es ist nur das Element, das ich inspizieren muss. Die "Link" -Komponente wird in "ein" Tag konvertiert, und "in" Requisiten werden in die "href" -Eigenschaft konvertiert:

  1. Und wenn ich einkreuze: hov und Option: hover und hier ist das Ergebnis:

Wie Sie sehen, haben ein: Schwebeflug Textdekoration: unterstreichen. Ich füge nur zu meiner CSS-Datei hinzu:

a:hover {
 text-decoration: none;
}

und Problem ist gelöst. Aber ich habe auch Textdekoration eingestellt: keine in anderen Klassen (wie Sie: D), die möglicherweise einige Effekte haben (ich denke).

Dong Nguyen Van
quelle
-1

Was für mich funktioniert hat, ist Folgendes:

<Link to="/" style={{boxShadow: "none"}}>
Alex Mireles
quelle
1
Hast du meine Lösung ausprobiert? stackoverflow.com/a/55693040/3000540
Daniele Urania