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.


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


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

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


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


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> 

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

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


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>

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}.


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


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

Nur das hat bei mir funktioniert


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

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).


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>


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).


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.