¿Cómo deshacerse del subrayado para el componente Link de React Router?


121

Tengo lo siguiente:

ingrese la descripción de la imagen aquí

¿Cómo me deshago del subrayado azul? El código está abajo:

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

El componente MenuItem es de http://www.material-ui.com/#/components/menu

Cualquier idea u orientación sería muy apreciada. Gracias de antemano.


7
coloque textDecoration: 'none'el <Link />componente, no sus hijos.
azium

Respuestas:


160

Veo que estás usando estilos en línea. textDecoration: 'none'se usa en niños, donde de hecho debe usarse en interiores <Link>como tal:

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

<Link>Básicamente, devolverá una <a>etiqueta estándar , por lo que aplicamos la textDecorationregla allí.

Espero que eso ayude


2
¿Hay alguna manera de establecer global con textdecoration ninguno? en la app.css?
stackdave

3
Funciona :). Tenga en cuenta que si copia y pega el estilo en su .css (porque, por supuesto, no le gustan los estilos en línea) entonces estext-decoration: none;
David Torres

64

Si está usando styled-components, podría hacer algo como esto:

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

62

Creo que la mejor manera de usar el enlace react-router-dom en un MenuItem (y otro componente MaterialUI como los botones) es pasar el enlace en el "componente" prop

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

debe pasar la ruta de la ruta en el accesorio 'to' del "MenuItem" (que se pasará al componente Link). De esta manera, no es necesario agregar ningún estilo, ya que usará el estilo MenuItem


7
La tuya definitivamente debería ser la respuesta en 2019.
Pablo Anaya

4
Esta es una mejor solución que las respuestas anteriores.
Martin Nuc

Esta es definitivamente la mejor solución de las publicadas
royalaid

Esto es 100 veces mejor que los documentos, les encantan muchos códigos inútiles
coiso

Todas las demás respuestas me asustan
coiso

30

También hay otra forma de eliminar correctamente el estilo del enlace. Tienes que darle estilo textDecoration='inherit'y color='inherit'puedes agregarlos como estilo a la etiqueta del enlace como:

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

o para hacerlo más general, simplemente cree una clase css como:

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

Y luego solo <Link className='text-link'>



9

Puede agregar style={{ textDecoration: 'none' }}su Linkcomponente para eliminar el subrayado. También puede agregar más cssen el stylebloque, por ejemplo 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

Existe el enfoque nuclear que está en su App.css (o contraparte)

a{
  text-decoration: none;
}

que evita el subrayado para todas las <a>etiquetas, que es la causa principal de este problema


No es una solución para react y styled-jsx…
AntonAL

en realidad, es una solución que funcionó para mí, ya que estoy usando sass junto a mi reacción y el uso de todas las soluciones anteriores no activó el estilo del componente <link> ..
Ahmed Younes

4

Trabajando para mí, solo agrega className="nav-link"yactiveStyle{{textDecoration:'underline'}}

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

2

Mire aquí -> https://material-ui.com/guides/composition/#button .

Esta es la guía oficial de material-ui. Quizás te sea útil como lo fue para mí.

Sin embargo, en algunos casos, el subrayado persiste y es posible que desee utilizar text-decoration: "none" para eso. Para un enfoque más limpio, puede importar y usar makeStyles desde material-ui / core.

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

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

const classes = useStyles();

Y luego establezca el atributo className en {classes.menu-btn} en su código JSX.


Pensé que te haría saber que un año después esta era la respuesta que necesitaba, ¡gracias!
kbreezy04

1

Para ampliar la respuesta de @ Grgur , si mira en su inspector, encontrará que el uso de Linkcomponentes les da el valor de color preestablecido color: -webkit-link. Deberá anular esto junto con el textDecorationsi no desea que se vea como un hipervínculo predeterminado.

ingrese la descripción de la imagen aquí



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>

En algunos casos, cuando se usa otro componente dentro del <Link>componente Gatsby , agregar un divcon display: 'inline-block'alrededor del componente interno evita el subrayado (de 'Página' en el ejemplo).


0

Si alguien está buscando material-uiel componente Link. Simplemente agregue la propiedad underliney configúrela como ninguna

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


0

He resuelto un problema tal vez como el tuyo. Intenté inspeccionar el elemento en Firefox. Te mostraré algunos resultados:

  1. Es solo el elemento que he inspeccionado. El componente "Enlace" se convertirá en una etiqueta "a" y los accesorios "a" se convertirán en la propiedad "href":

  1. Y cuando marco: hov y option: hover y aquí está el resultado:

Como ve, un: hover tiene text-decoration: underline. Solo agrego a mi archivo css:

a:hover {
 text-decoration: none;
}

y el problema se resuelve. Pero también configuro text-decoration: none en algunas otras clases (como tú: D), eso puede tener algunos efectos (supongo).


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.