#javascript #html #css #reactjs #navbar
#javascript #HTML #css #reactjs #панель навигации
Вопрос:
Как я могу изменить цвет текста ссылок на панели навигации в react.
navLink1{
color: black;
}
<div className="left-navlinks">
<img className="logo" src={logo}/>
<Link to="/"></Link>
<Link to="/home"> <div className="navlink1">Home</div></Link>
<Link to="/about"> <div className="navlink2">About</div></Link>
</div>
Я пытался сделать это с помощью свойства hover, но это не работает. Я хочу, чтобы цвет текста был синим при нажатии на ссылку и выборе
Ответ №1:
NavLink
дает нам хорошее решение для этого, вот так:
NavItem.module.css:
.left_navlinks a {
color:black;
text-decoration: none;
}
.left_navlinks a:hover,
.left_navlinks a:active,
.left_navlinks a.active {
color: blue;
}
App.js:
import React from "react";
import { NavLink } from "react-router-dom";
import classes from "./navItem.module.css";
class App extends React.Component {
render() {
return (
<>
<div className={classes.left_navlinks}>
<img className="logo" src={logo} />
<NavLink to="/"></NavLink>
<NavLink to="/home" activeClassName={classes.active}>
Home
</NavLink>
<NavLink to="/about" activeClassName={classes.active}>
About
</NavLink>
</div>
</>
);
}
}
export default App;
Ответ №2:
Link
Компонент будет отображать <a>
элемент. Итак, чтобы изменить его цвет, просто добавьте этот стиль:
a {
color: black;
}
Вы можете попробовать это здесь.
Ответ №3:
Вместо добавления в div. Вы можете напрямую передавать класс в link:
.navLink1{
color: black;
}
<div className="left-navlinks">
<img className="logo" src={logo}/>
<Link to="/"></Link>
<Link to="/home" className="navlink1"> Home</Link>
<Link to="/about" className="navlink2">About</Link>
</div>
Вот один poc из этого:
import React from "react";
import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
import "./style.css";
function BasicExample() {
return (
<Router>
<div>
<ul>
<li>
<Link to="/" className="navLink1">
Home
</Link>
</li>
<li>
<Link to="/about" className="navlink2">About</Link>
</li>
<li>
<Link to="/dashboard" className="navLink1">Dashboard</Link>
</li>
</ul>
<hr />
{/*
A <Switch> looks through all its children <Route>
elements and renders the first one whose path
matches the current URL. Use a <Switch> any time
you have multiple routes, but you want only one
of them to render at a time
*/}
<Switch>
<Route exact path="/">
<Home />
</Route>
<Route path="/about">
<About />
</Route>
<Route path="/dashboard">
<Dashboard />
</Route>
</Switch>
</div>
</Router>
);
}
// You can think of these components as "pages"
// in your app.
function Home() {
return (
<div>
<h2>Home</h2>
</div>
);
}
function About() {
return (
<div>
<h2>About</h2>
</div>
);
}
function Dashboard() {
return (
<div>
<h2>Dashboard</h2>
</div>
);
}
export default function App() {
return (
<BasicExample/>
);
}
Демонстрация:https://stackblitz.com/edit/react-kcmdvt?file=src/App.js
Ответ №4:
я рекомендовал вам использовать styled-components для добавления css к компонентам.
https://styled-components.com/docs/basics#styling-any-component
Ответ №5:
Комментарии:
1. простого цвета с основным атрибутом было бы достаточно
Ответ №6:
Для того, чтобы ссылка оставалась активной при нажатии, вам нужно будет передать некоторую поддержку этому дочернему компоненту из родительского компонента и иметь троичный оператор для применения className к ссылке, которая соответствует активной из переданной поддержки.
Например:-
import React from 'react';
import { Link } from 'react-router-dom';
function navLink({activeLink}) {
return (
<div className="left-navlinks">
<img className="logo" src={logo}/>
<Link to="/"></Link>
<Link to="/home"> <div className={activeLink === home ? `active-navlink` : `normal-navlink`}>Home</div></Link>
<Link to="/about"> <div className={activeLink === about ? `active-navlink` : `normal-navlink`}>About</div></Link>
</div>
)
}
export default navLink
Ответ №7:
Вы должны быть в состоянии полностью удалить div и иметь className в компоненте Link, также нет необходимости в разных className для каждого из них.
Чтобы изменить цвет, когда ссылка выбрана в данный момент, вы можете использовать селектор «активный», или, если вы просто хотите, чтобы он изменился, если на него щелкнули, вы можете использовать «посещенный».
Вот пример с ‘активным’ селектором.
navLink: {
color: black;
}
navLink:active {
color: blue;
}
Я также предполагаю, что вы импортируете файл css для стиля?
<div className="left-navlinks">
<img className="logo" src={logo}/>
<Link to="/"></Link>
<Link to="/home" className="navLink">Home</Link>
<Link to="/about" className="navLink">About</Link>
</div>
Комментарии:
1. Вы также могли бы использовать NavLink, который позволяет добавлять activeClassName или activeStyle reactrouter.com/web/api/NavLink
Ответ №8:
Итак, если вы хотите изменить цвет ссылки, щелкнув текст, вы должны использовать метод onClick.Используйте state для сохранения нового цвета, который вы хотите.Код выглядит следующим образом.Обратите внимание, что я использовал функциональный компонент
const [Color, setColor] = useState([""])
const handleColor= e =>{
setColor("blue")
}
return (
<div className="left-navlinks">
<div className="navlink1" style={{color:Color}} onClick={handleColor}>Home</div>
Ответ №9:
Прежде всего, я думаю, что лучше использовать NavLink из react-router-dom, а не ссылку. Теперь NavLink возвращает тег. Таким образом, вы можете настроить таргетинг на них .navlinks > a { color: black }. Однако, если вы хотите изменить цвет, например, при активации, вам, вероятно, понадобится параметр !imporant, чтобы перезаписать его. Надеюсь, это сработает.
Ответ №10:
const location = useLocation();
<div>
<img className="logo" src={logo}/>
<Link to="/"></Link>
<Link to="/home" className={location.pathname === "/home" ? "navLink1": ""}> Home</Link>
<Link to="/about" className={location.pathname === "/about" ? "navLink1":""}> About</Link>
</div>
Пожалуйста, попробуйте это. У меня это работает.