将 CSS 模块与 Bootstrap 相结合

Posted

技术标签:

【中文标题】将 CSS 模块与 Bootstrap 相结合【英文标题】:Combining CSS modules with Bootstrap 【发布时间】:2020-04-29 10:50:09 【问题描述】:

在 React 组件中结合(自定义)CSS 模块与 Bootstrap 的最佳方式是什么?我正在使用 Bootstrap CDN 来获取样式并在组件中使用它们。如何应用自定义样式到(例如).nav-link使用 CSS 模块连接到组件?换句话说,我如何覆盖 Bootstrap 的默认样式?假设以下是我的代码:

组件

import React from "react";
import styles from "./Navbar.module.css";

function Navbar() 
   return (
      <nav className="navbar navbar-expand-lg">
         <div className="collapse navbar-collapse" id="navbarNav">
            <ul className="navbar-nav ml-auto">
               <li className="nav-item">
                  <a className="nav-link" href="#">Home</a>
               </li>
               <li className="nav-item">
                  <a className="nav-link" href="#">About</a>
               </li>
            </ul>
         </div>
      </nav>
   );


export default Navbar;

CSS

.Navbar 
   background-color: green;


知道 css 模块的导入允许我使用 styles.Navbar 作为类名,我想出了这个以使导航栏的背景颜色为绿色。

<nav className=`navbar navbar-expand-lg $styles.Navbar`>

但是,我无法在 CSS 模块中捕获任何与引导相关的类。目标是得到这样的东西,我可以在 css 模块中覆盖 Bootstrap。

.Navbar 
   background-color: green;

.Navbar .nav-link 
   color: red;

【问题讨论】:

为什么不直接覆盖引导类? .navbar background-color: green !important 【参考方案1】:

我的意见是,当涉及到 css 模块和 React 组件方法时,您通常应该避免使用后代选择器 .class1 .class2。我宁愿简单地创建一个.navigationLink 类并将其直接应用于&lt;a&gt; &lt;/a&gt; 元素。然后,您可以将其作为一个单独的 &lt;NavigationLink/&gt; 组件以实现可重用性。

另一种方法是使用 Bootstrap 主题来全局更改链接颜色等内容:

https://getbootstrap.com/docs/4.1/getting-started/theming/ https://github.com/twbs/bootstrap-sass/blob/master/assets/stylesheets/bootstrap/_variables.scss#L35

【讨论】:

【参考方案2】:

例如导入 bootstrap your-component.js 的组件如下所示:

/* Bootstrap */
import "bootswatch/dist/cosmo/bootstrap.min.css";  

/* Custom Styling */
import './your-override.css';

如果您在此文件 (your-override.css) 中添加具有相同类名或 id 等的样式,导入 bootstrap.css 之后,您可以通过导入 css 文件轻松覆盖。就像引导程序一样,它将覆盖。

请勿使用 !important。这真是糟糕的做法。

【讨论】:

以上是关于将 CSS 模块与 Bootstrap 相结合的主要内容,如果未能解决你的问题,请参考以下文章

将 Greenleets 与 Flask 和标准线程相结合

Java 9:将自定义模块化运行时映像与第三方插件系统相结合

Bootstrap入门组件4:按钮组与下拉菜单结合

需要帮助将 time.sleep 与 python 3 中的多处理相结合

将 Bootstrap 4 与 NuxtJS 一起使用

Bootstrap