Як позбутися підкреслення компонента 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.