【问题标题】:Custom CSS doesn't override NavLink in React Bootstrap自定义 CSS 不会覆盖 React Bootstrap 中的 NavLink
【发布时间】:2020-08-10 04:09:16
【问题描述】:

我是 React 和 Boostrap 的新手,所以我开始使用 react-bootstrap 来玩它们。我听说覆盖 boostrap CSS 的最简单方法之一是在 bootstrap CSS 之上应用你自己的 CSS。所以我有以下页面

我有以下 App.js

import React from 'react';
import Nav from 'react-bootstrap/Nav';
import Navbar from 'react-bootstrap/Navbar';
import Container from 'react-bootstrap/Container';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import "bootstrap/dist/css/bootstrap.css";
import './App.css';
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';


function App() {
  return (
    <Router>
      <Container fluid>
      <Navbar bg="dark" expand="lg" id="navbar-parent">
        <Navbar.Brand href="#home" id="navigation-bar">TURLS</Navbar.Brand>
        <Navbar.Toggle aria-controls="basic-navbar-nav"/>
        <Navbar.Collapse id="basic-navbar-nav">
          <Nav className="mr-auto" variant="pills">
            <Nav.Link href="#home" className="whte">Home</Nav.Link>
            <Nav.Link href="#api" className="whte">API</Nav.Link>
          </Nav>
        </Navbar.Collapse>
      </Navbar>

      </Container>
    </Router>
    );
}

export default App;

以下是App.css

#navigation-bar {
  border-style: solid;
  padding: 15px;
  border-radius: 50px;
  font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
  font-weight: 900;
  color: white;
  border-width: 5px;
  font-size: 1.5em;
}

#navigation-bar:hover {
  color: #3399ff;
}

.whte {
  color: white; 
}

我能够使用自己的 CSS 覆盖 Nav.Brand 的字体和颜色,并使用 CSS #id 选择器引用它。但我无法使用自定义 CSS 类 .whte 覆盖 Nav.Link。我试图覆盖 HomeAPI 的颜色,想更改字体、pills 大小和背景颜色,但我不知道怎么做。

我可以使用!important 更改文本的颜色,但我在某处读到使用它不是自定义事物的好方法。检查元素后,我发现 Nav.Links 正在从以下 CSS 类中获取颜色,尽管我的自定义类 .whte

.navbar-light .navbar-nav .nav-link {
    color: rgba(0,0,0,.5);
}

同样我发现蓝色的nav-pills实际上是以下类的一部分

.navbar-light .navbar-nav .active>.nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show>.nav-link {
    color: rgba(0,0,0,.9);
}

.nav-pills .nav-link.active, .nav-pills .show>.nav-link {
    color: #fff;
    background-color: #007bff;
}

我不确定要自定义哪些类来实现我想要的效果。我尝试添加我自己的 CSS 实现,但这不起作用。

那么通常如何自定义引导 css?我应该覆盖与 boostrap 元素关联的所有 CSS 类吗?或者我应该在每个元素上添加一个 ID,并使用相同的代码分别自定义每个元素。

如果问题过于幼稚或模棱两可,我深表歉意,我只是想了解在 React Bootstrap

中更改或自定义引导 CSS 的推荐方法

感谢您的帮助

【问题讨论】:

  • Nav.Link 的优先级高于 .whte。如果你想覆盖Nav.link,你必须像Nav.whte{...}那样编写你的选择器,或者使用#id.whte{...}

标签: javascript css reactjs bootstrap-4 react-bootstrap


【解决方案1】:

你的逻辑很好。 众所周知 如果 CSS 内容大小的下载速度快于您的服务器响应 external CSS 文件请求的速度(考虑 DNS 时间、服务器延迟等),inline CSS 的加载速度将更快。

您可以在此处使用内联 css 和 style={{/*your styles */ }}

您可以查看some answer in SO 中提到的一些好的答案。

【讨论】:

    【解决方案2】:

    嗯,您进行了很好的搜索,并且得到了正确的结果。正如你所说,在引导元素上使用“重要”不被认为是正确的方法,但是除了影响它们自己的 css 文件之外,没有其他方法可以改变引导元素。为此,您可以按照您所说的“{{style : //like this}}”分配 CSS 内联,或者您可以创建自己的引导类。如果您想使用其他样式的库,可以使用 material-ui 之类的库。就像你说的,有 4 个选项:

    1:内联CSS:

    <Navbar.Brand href="#home" id="navigation-bar" style = {{color:'white'}}>TURLS</Navbar.Brand>

    2:自定义CSS:

     #navigation-bar {
           color : white !important;
        }
    

    3:作用于Bootstrap自带的css文件:

    //in nodemodules, the bootstrap files that you downloaded to the navbar-related parts to affect.
    

    4 : react-use 类不附带引导程序,但可以在引导程序端使用:

    <Navbar.Brand className = "text-light" href="#home" id="navigation-bar">TURLS</Navbar.Brand>
    

    祝你好运! :)

    【讨论】:

    • style={{/*your inline styles */ }} 对于内联应该是这样的,而不是你提到的{{style : //like this}}
    • 这不是一个错误。应该是这样的?
    • 如果您使用的是react,它应该是style={{/*your inline styles */ }},正如您在&lt;Navbar.Brand href="#home" id="navigation-bar" style = {{color:'white'}}&gt;TURLS&lt;/Navbar.Brand&gt; 中提到的那样。结帐w3schools.com/react/react_css.asp
    猜你喜欢
    • 1970-01-01
    • 2021-11-12
    • 2018-09-17
    • 1970-01-01
    • 2017-12-23
    • 2017-03-05
    • 1970-01-01
    • 2016-01-07
    • 2018-03-24
    相关资源
    最近更新 更多