Як позбутися підкреслення компонента Link React Router?


121

У мене є таке:

введіть тут опис зображення

Як я можу позбутися від синього підкреслення? Код нижче:

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

Компонент MenuItem походить з http://www.material-ui.com/#/components/menu

Будь-яке розуміння чи настанови були б дуже вдячні. Спасибі заздалегідь.


7
ставити textDecoration: 'none'на <Link />компонент не його дітей.
— азіум

Відповіді:


160

Я бачу, що ви використовуєте вбудовані стилі. textDecoration: 'none'застосовується у дитини, де насправді його слід застосовувати всередині <Link>як таке:

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

<Link>по суті поверне стандартний <a>тег, тому ми застосовуємо textDecorationтам правило.

Я сподіваюся, що це допомагає


2
є спосіб встановити глобальний за допомогою текстуdecoration немає? в app.css?
— stackdave

3
Це працює :). Майте на увазі, що якщо ви скопіюєте вставити стиль у свій .css (адже, звичайно, вам не подобаються стилі вбудованого), то цеtext-decoration: none;
— David Torres

64

Якщо ви використовуєте styled-components, ви можете зробити щось подібне:

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

Я думаю, що найкращий спосіб використовувати Link react-router-dom у MenuItem (та інший компонент MaterialUI, такий як кнопки) - це передати Посилання в опорному "компоненті"

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

вам потрібно пройти шлях маршруту в підпоріжці «до» менюItem (який буде переданий до компонента Посилання). Таким чином вам не потрібно додавати жодного стилю, оскільки він буде використовувати стиль MenuItem


7
Ваша відповідь напевно повинна відповісти у 2019 році.
— Пабло Аная,

4
Це краще рішення, ніж відповіді вище.
— Мартін

Це, безумовно, найкраще рішення опублікованих
— royalaid

Це в 100 разів краще, ніж документи, вони люблять багато непотрібного коду
— coiso

Усі інші відповіді мене лякають
— coiso

30

Існує також інший спосіб належним чином зняти стилізацію посилання. Ви повинні надати йому стиль, textDecoration='inherit'і color='inherit'ви можете або додати такі, як стилінг, до тегу посилання, як:

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

або щоб зробити його більш загальним, просто створіть клас css на зразок:

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

І тоді просто <Link className='text-link'>


ви спробували моє рішення stackoverflow.com/a/55693040/3000540
— Daniele Urania

9

Ви можете додати style={{ textDecoration: 'none' }}свій Linkкомпонент, щоб видалити підкреслення. Ви також можете додати більше cssу styleблок, наприклад 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

Є ядерний підхід, який є у вашому App.css (або його аналог)

a{
  text-decoration: none;
}

що не дозволяє підкреслити всі <a>теги, що є першопричиною цієї проблеми


Не рішення для реагування та стилі-jsx…
— AntonAL

насправді його рішення, воно працювало для мене, оскільки я використовую sass, поруч з моєю реакцією і використовуючи всі вищезазначені рішення, не викликало <link> стиль компонента ..
— Ahmed Younes

4

Працюючи на мене, просто додайте className="nav-link"іactiveStyle{{textDecoration:'underline'}}

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

2

Подивіться тут -> https://material-ui.com/guides/composition/#button .

Це офіційний посібник з матеріалів ui. Можливо, вам це стане в нагоді так, як це було для мене.

Однак у деяких випадках підкреслення зберігається, і ви, можливо, захочете використовувати текстовий декор: "немає" для цього. Для більш чистого підходу ви можете імпортувати та використовувати makeStyles з material-ui / core.

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

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

const classes = useStyles();

А потім встановіть атрибут className до {class.menu-btn} у своєму JSX-коді.


Подумав, я дам вам знати, що через рік ця відповідь мені була потрібна, дякую!
— kbreezy04

1

Щоб розширити відповідь @ Grgur , якщо ви подивитеся на свого інспектора, ви побачите, що використання Linkкомпонентів надає їм задане значення кольору color: -webkit-link. Вам потрібно буде це змінити разом із тим, textDecorationякщо ви не хочете, щоб воно виглядало як гіперпосилання за замовчуванням.

введіть тут опис зображення




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

У деяких випадках, коли ви використовуєте інший компонент всередині компонента Гетсбі <Link>, додавання a divз display: 'inline-block'навколо внутрішнього компонента запобігає підкресленню (у прикладі "Сторінка").


0

Якщо хтось шукає material-uiкомпонент 'Link'. Просто додайте властивість underlineі встановіть його на жодне

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


0

Я вирішив проблему, можливо, як вашу. Я намагався оглянути елемент у firefox. Я покажу вам деякі результати:

  1. Це лише елемент, який я оглядаю. Компонент "Посилання" буде перетворений у тег "a", а реквізит "до" буде перетворений у властивість "href":

  1. І коли я вказую: hov та option: hover і ось результат:

Як ви бачите: наведіть курсор на текстовий декор: підкресліть. Я додаю лише до свого файлу css:

a:hover {
 text-decoration: none;
}

і проблема вирішена. Але я також встановив оформлення тексту: жоден в інших класах (як ти: D), це може зробити деякі ефекти (я думаю).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.