React Router'ın Link bileşeni için alt çizgiden nasıl kurtulurum?


121

Aşağıdakilere sahibim:

görüntü açıklamasını buraya girin

Mavi alt çizgiden nasıl kurtulurum? Kod aşağıdadır:

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

MenuItem bileşeni http://www.material-ui.com/#/components/menu adresindendir

Herhangi bir içgörü veya rehberlik çok takdir edilecektir. Şimdiden teşekkür ederim.


7
parçayı çocuklarını değil textDecoration: 'none'üzerine koyun <Link />.
— azium

Yanıtlar:


160

Satır içi stilleri kullandığınızı görüyorum. textDecoration: 'none'aslında içeride kullanılması gerektiği çocukta kullanılır <Link>:

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

<Link>esasen standart bir <a>etiket döndürecektir , bu yüzden textDecorationorada kural uyguluyoruz.

umarım bu yardımcı olur


2
textdecoration yok ile global ayarlamanın bir yolu var mı? app.css'de?
— stackdave

3
İşe yarıyor :). Stili kopyalayıp .css dosyanıza yapıştırırsanız (çünkü tabii ki satır içi stilleri sevmiyorsunuz) o zamantext-decoration: none;
— David Torres

64

Eğer kullanıyorsanız styled-components, bunun gibi bir şey yapabilirsiniz:

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

63

Bir MenuItem'de (ve düğmeler gibi diğer MaterialUI bileşenlerinde) react-router-dom Link'i kullanmanın en iyi yolunun, Link'i "component" prop'undan geçirmek olduğunu düşünüyorum.

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

"MenuItem" öğesinin (Link bileşenine aktarılacak) 'to' pervanesindeki yol yolunu geçmeniz gerekir. Bu şekilde MenuItem stilini kullanacağı için herhangi bir stil eklemenize gerek yoktur.


8
2019'un cevabı kesinlikle sizin olmalı.
— Pablo Anaya

5
Bu, yukarıdaki cevaplardan daha iyi bir çözümdür.
— Martin Nuc

1
Bu kesinlikle yayınlananlar arasında en iyi çözüm
— royalaid

Bu, dokümanlardan 100 kat daha iyi, onlar pek çok işe yaramaz kodu kullanıyorlar
— coiso

Diğer tüm yanıtlar beni korkutuyor
— coiso

30

Bağlantının stilini düzgün bir şekilde kaldırmanın başka bir yolu da var. Ona bir stil vermelisiniz textDecoration='inherit've color='inherit'bunları aşağıdaki gibi bağlantı etiketine stil olarak ekleyebilirsiniz:

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

veya daha genel hale getirmek için aşağıdaki gibi bir css sınıfı oluşturun:

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

Ve sonra sadece <Link className='text-link'>



9

Alt çizgiyi kaldırmak style={{ textDecoration: 'none' }}için Linkbileşeninize ekleyebilirsiniz . Ayrıca daha fazla ekleyebilirsiniz cssiçinde styleblok ör 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'nizde (veya muadili) nükleer yaklaşım var

a{
  text-decoration: none;
}

<a>Bu sorunun temel nedeni olan tüm etiketlerin altının çizilmesini engelleyen


React ve style-jsx için bir çözüm değil…
— AntonAL

aslında bu benim için bir çözüm oldu, çünkü tepkimin yanında sass kullanıyorum ve yukarıdaki tüm çözümleri kullanmak <link> bileşen stilini tetiklemedi ..
— Ahmed Younes

4

Benim için çalışıyorum, sadece ekle className="nav-link"veactiveStyle{{textDecoration:'underline'}}

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

2

Buraya bakın -> https://material-ui.com/guides/composition/#button .

Bu, resmi materyal kullanıcı arayüzü kılavuzudur. Belki benim için olduğu gibi senin için de faydalı olur.

Bununla birlikte, bazı durumlarda, alt çizgi devam eder ve bunun için text-decoration: "none" kullanmak isteyebilirsiniz. Daha temiz bir yaklaşım için, makeStyles'ı material-ui / core'dan içe aktarabilir ve kullanabilirsiniz.

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

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

const classes = useStyles();

Ve sonra JSX kodunuzda className özniteliğini {classes.menu-btn} olarak ayarlayın.


O yıl sonra ihtiyacım olan cevap buydu, teşekkürler!
— kbreezy04

1

@ Grgur'un cevabını genişletmek için , denetçinize bakarsanız, Linkbileşenleri kullanmanın onlara önceden ayarlanmış renk değerini verdiğini göreceksiniz color: -webkit-link. textDecorationVarsayılan bir köprü gibi görünmesini istemiyorsanız, bunu geçersiz kılmanız gerekir .

görüntü açıklamasını buraya girin


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

Sadece bu benim için çalıştı


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>

Bazı durumlarda, Gatsby bileşeninin içinde başka bir bileşen kullanılırken , iç bileşenin etrafına <Link>bir divtane eklemek display: 'inline-block', altının çizilmesini önler (örnekte "Sayfa" nın).


0

Birisi material-ui's Link bileşenini arıyorsa . Sadece mülkü ekleyin underlineve yok olarak ayarlayın

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


0

Sizin gibi bir sorunu çözdüm. Firefox'taki elementi incelemeye çalıştım. Size bazı sonuçlar göstereceğim:

  1. İncelediğim tek unsur bu. "Link" bileşeni "a" etiketine, "to" props ise "href" özelliğine dönüştürülecektir:

  1. Ve işaretlediğimde: hov ve seçenek: fareyle üzerine gelin ve işte sonuç:

Gördüğünüz gibi: fareyle üzerine gelindiğinde text-decoration: underline var. Sadece css dosyama ekliyorum:

a:hover {
 text-decoration: none;
}

ve sorun çözüldü. Ama aynı zamanda metin dekorasyonunu da ayarladım: başka sınıflarda hiçbiri (sizin gibi: D), bu bazı etkiler yaratabilir (sanırım).


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.