自定义 Bootstrap CSS 模板

Posted

技术标签:

【中文标题】自定义 Bootstrap CSS 模板【英文标题】:Customizing Bootstrap CSS template 【发布时间】:2012-01-25 16:14:17 【问题描述】:

我刚刚从 Twitter 开始使用 Bootstrap,我想知道自定义的“最佳实践”是什么。我想开发一个系统,该系统将利用 css 模板(Bootstrap 或其他)的所有功能,完全(且轻松)可修改,可持续(即,当下一版 Bootstrap 从 Twitter 发布时,我不这样做'不必重新开始。

例如,我想在顶部导航中添加背景图片。看起来有 3 种方法可以解决这个问题:

    修改 bootstrap.css 中的 .topbar 类。我不是特别喜欢这样,因为我会有很多 .topbar 项目,而且我不一定想以同样的方式修改它们。 使用我的背景图像创建新类并应用两种样式(新样式和引导到我的元素)。这可能会产生样式冲突,这可以通过将 .topbar 类剥离到单独的类中来避免,然后只使用我的自定义类没有踩到的部分。同样,这需要比我认为必要的更多的工作,虽然它很灵活,但它不会让我在 Twitter 发布下一部分时轻松更新 bootstrap.css。 使用 .LESS 中的变量来实现自定义。这似乎是一个很好的方法,但没有使用过。LESS 我担心在客户端编译 css 和代码的可持续性。

虽然我使用的是 Bootstrap,但这个问题可以推广到任何 css 模板。

提前感谢您的意见。

【问题讨论】:

嗨@Pabluez,是的,你回答了,见下文。很抱歉延迟回复 - 我一直在忙假期。 相信这篇文章会对你有所帮助prideparrot.com/blog/archive/2014/6/… 这个帖子内容丰富***.com/questions/10451317/… 【参考方案1】:

引导程序 5(2021 年更新)

如 Bootstrap 文档中所述,modifying the existing "theme" colors 是使用 SASS 完成的。与之前的版本一样,您还可以通过添加 bootstrap.css 之后的 CSS 规则来覆盖 Bootstrap CSS,并使用正确的 CSS 特性。

Bootstrap 5 - change theme colors

引导程序 4

我正在重新审视这个 4.x 的 Bootstrap 自定义问题,它现在使用 SASS 而不是 LESS。一般来说,自定义Bootstrap有2种方式...

1.简单的 CSS 覆盖

一种自定义方法是简单地使用 CSS 覆盖 Bootstrap CSS。为了可维护性,CSS 自定义项放在单独的custom.css 文件中,因此bootstrap.css 保持不变。对custom.css 的引用跟随在bootstrap.css 之后 以便覆盖工作...

<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/custom.css">

只需在自定义 CSS 中添加所需的任何更改。比如……

    /* remove rounding from cards, buttons and inputs */
    .card, .btn, .form-control 
        border-radius: 0;
    

之前 (bootstrap.css)

之后(custom.css

进行自定义时,您应该了解CSS Specificity。 custom.css 中的覆盖需要使用与 bootstrap.css 相同(或更具体)的选择器。

注意没有必要在自定义 CSS 中使用!important,除非 您正在覆盖Bootstrap Utility classes 之一。 CSS specificity 总是适用于一个 CSS 类来覆盖另一个。


2。使用 SASS 自定义

如果您熟悉SASS(并且您应该使用此方法),您可以使用自己的custom.scss 自定义Bootstrap。有一个section in the Bootstrap docs 对此进行了解释,但是文档没有解释如何利用custom.scss 中的现有变量。例如,让我们将正文背景颜色更改为#eeeeee,并将蓝色的primary 上下文颜色更改/覆盖 更改为Bootstrap's $purple variable...

/* custom.scss */    

/* import the necessary Bootstrap files */
@import "bootstrap/functions";
@import "bootstrap/variables";

/* -------begin customization-------- */   

/* simply assign the value */ 
$body-bg: #eeeeee;

/* use a variable to override primary */
$theme-colors: (
  primary: $purple
);
/* -------end customization-------- */  

/* finally, import Bootstrap to set the changes! */
@import "bootstrap";

这也适用于创建新的自定义类。例如,在这里我将purple 添加到主题颜色中,这会为btn-purpletext-purplebg-purplealert-purple 等创建所有 CSS...

/* add a new purple custom color */
$theme-colors: (
  purple: $purple
);

https://codeply.com/go/7XonykXFvP

使用 SASS,您必须@import bootstrap 自定义之后才能使它们正常工作!一旦 SASS 被编译为 CSS(这必须使用 SASS 编译器 node-sass、gulp-sass、npm webpack 等来完成。),生成的 CSS 就是定制的 Bootstrap。如果您熟悉 SASS,则可以使用我创建的 theme builder 这样的工具自定义 Bootstrap。

Custom Bootstrap Demo (SASS)

注意:与 3.x 不同,Bootstrap 4.x 不提供官方定制工具。但是,您可以根据需要下载 grid only CSS 或使用另一个 4.x custom build tool 重新构建 Bootstrap 4 CSS。


相关:How to extend/modify (customize) Bootstrap 4 with SASSHow to change the bootstrap primary color?How to create new set of color styles in Bootstrap 4 with sassHow to Customize Bootstrap

【讨论】:

注意 - 为新的自定义按钮设置背景、边框、字体的自定义颜色怎么样? 生成的CSS文件160Kb左右(压缩后130Kb)正常吗?例如,是否可以只覆盖原色? 注意:编译后记得使用Autoprefixer【参考方案2】:

我最近写了一封post,讲述了过去几年我在Udacity 的工作方式。这种方法意味着我们可以随时更新 Bootstrap,而不会出现合并冲突、抛出工作等问题。

这篇文章通过示例进行了更深入的介绍,但基本思想是:

保留引导程序的原始副本并在外部覆盖它。 修改一个文件(bootstrap 的 variables.less)以包含您自己的变量。 使您的站点文件 @include bootstrap.less 然后您的覆盖。

这确实意味着使用 LESS,并在将其发送到客户端之前将其编译为 CSS(客户端 LESS,如果挑剔的话,我通常会避免使用它),但它非常有利于可维护性/可升级性,并且获得 LESS 编译是真的很容易。链接的 github 代码有一个使用 grunt 的示例,但是有很多方法可以实现这一点 - 如果这是你的东西,甚至是 GUI。

使用此解决方案,您的示例问题将如下所示:

在您的 variables.less(不是引导程序)中使用 @navbar-inverse-bg 更改导航栏颜色 将您自己的导航栏样式添加到您的 bootstrap_overrides.less 中,随时覆盖您需要的任何内容。 幸福。

当需要升级您的引导程序时,您只需换掉原始引导程序副本,一切都会正常工作(如果引导程序进行了重大更改,您将需要更新您的覆盖,但无论如何您都必须这样做)

带有演练的博文是here。

github上的代码示例是here。

【讨论】:

【参考方案3】:

你可以从这个工具开始,https://themestr.app/theme,看看它是如何覆盖 scss 变量的,你就会知道什么变量会影响什么。这是我认为最简单的方法。

scss 生成示例:

@import url(https://fonts.googleapis.com/css?family=Montserrat:200,300,400,700);
$font-family-base:Montserrat;
@import url(https://fonts.googleapis.com/css?family=Open+Sans:200,300,400,700);
$headings-font-family:Open Sans;

$enable-grid-classes:false;
$primary:#222222;
$secondary:#666666;
$success:#333333;
$danger:#434343;
$info:#515151;
$warning:#5f5f5f;
$light:#eceeec;
$dark:#111111;
@import "bootstrap";

【讨论】:

【参考方案4】:

我认为现在官方首选的方式是使用 Less,要么动态覆盖 bootstrap.css(使用 less.js),要么重新编译 bootstrap.css(使用 Node 或 Less 编译器)。

来自Bootstrap docs,以下是动态覆盖 bootstrap.css 样式的方法:

下载最新的 Less.js 并将其路径(和 Bootstrap)包含在 &lt;head&gt; 中。

 <link rel="stylesheet/less" href="/path/to/bootstrap.less">
    <script src="/path/to/less.js"></script>

要重新编译 .less 文件,只需保存它们并重新加载您的页面。 Less.js 编译它们并将它们存储在本地存储中。

或者,如果您更喜欢使用自定义样式(用于生产环境)静态编译新的 bootstrap.css:

通过Node安装LESS命令行工具并运行以下命令:

$ lessc ./less/bootstrap.less > bootstrap.css

【讨论】:

这是首选方式 :)【参考方案5】:

我认为最好的选择是编译一个自定义 LESS 文件,包括 bootstrap.less、一个自定义 variables.less 文件和您自己的规则:

    在您的根文件夹中克隆引导程序:git clone https://github.com/twbs/bootstrap.git 将其重命名为“引导程序” 创建一个 package.json 文件:https://gist.github.com/jide/8440609 创建一个 Gruntfile.js:https://gist.github.com/jide/8440502 创建一个“less”文件夹 将 bootstrap/less/variables.less 复制到“less”文件夹中 更改字体路径:@icon-font-path: "../bootstrap/fonts/"; 在导入 bootstrap.less 和您的自定义 variables.less 文件的“less”文件夹中创建自定义 style.less 文件:https://gist.github.com/jide/8440619 运行npm install 运行grunt watch

现在你可以随意修改变量,覆盖自定义 style.less 文件中的引导规则,如果有一天你想更新引导,你可以替换整个引导文件夹!

编辑:我使用这种技术创建了一个 Bootstrap 样板:https://github.com/jide/bootstrap-boilerplate

【讨论】:

【参考方案6】:

在 Bootstrap 中使用 LESS...

Here are the Bootstrap docs for how to use LESS

(自之前的答案以来他们已经搬家了)

【讨论】:

如果文档已移动,请编辑其他答案以反映这一点 具有讽刺意味的是,此答​​案中的链接已失效。【参考方案7】:

自从 12 月 Pabluez 的回答以来,现在有一种更好的方法来自定义 Bootstrap。

使用:Bootswatch 生成您的 bootstrap.css

Bootswatch 从最新版本(无论您在 bootstrap 目录中安装什么)构建普通的 Twitter Bootstrap,但也会导入您的自定义设置。这使得使用最新版本的 Bootstrap 变得容易,同时保持自定义 CSS,而无需更改任何有关 html 的内容。您可以简单地摇摆 boostrap.css 文件。

【讨论】:

您能否详细说明使用它的最佳方式。我下载了 bootswatch 并使用 grunt swatch:theme 构建了我的 css,但我仍然对应该将哪些文件放在哪里感到困惑。我试图达到一种情况,我可以下载更新版本的引导程序或引导程序主题并使用它,但仍使用我的自定义变量。 (如果这有所作为,我正在使用 VisualStudio2013 Pro)。我不想使用 javascript 进行编译。现在,我可以运行构建命令。稍后,我会尝试找到一种自动化的好方法。谢谢马克【参考方案8】:

您可以使用来自

的引导模板

http://www.initializr.com/

其中包括所有引导 .less 文件。然后,您可以根据需要更改变量/更新较少的文件,它将自动编译 css。部署时将less文件编译成css。

【讨论】:

【参考方案9】:

最好的办法是。

1.从 github 分叉 twitter-bootstrap 并在本地克隆。

他们正在迅速改变库/框架(它们在内部发生分歧。有些人更喜欢库,我会说它是一个框架,因为从你在页面上加载它的时候开始改变你的布局)。嗯...分叉/克隆将让您轻松获取即将推出的新版本。

2。不要修改 bootstrap.css 文件

当您需要升级引导程序时(您需要这样做),这会使您的生活变得复杂。

3.创建自己的 css 文件并在需要原始引导程序时覆盖

如果他们使用color: black; 设置了一个顶栏,但您希望它是白色的,请为此顶栏创建一个新的非常具体的选择器,并在特定的顶栏上使用此规则。例如,对于一个表,它将是 &lt;table class="zebra-striped mycustomclass"&gt;。如果您在bootstrap.css 之后声明您的 css 文件,这将覆盖您想要的任何内容。

【讨论】:

+1 好答案。只是补充他的第三点:除了旧类之外,您可以创建一个新类来应用,或者只是覆盖/添加您想要更改的属性。 这就是我对 mycustomcss 的意思...除了 zebra-striped (bootstrap-class) 之外,我会将其编辑到 mycustomclass 中 关于如何以“新的”less/sass 方式执行此操作,您有什么可以添加的吗?即:您如何子类化“引导”样式?继承所有+扩充。我还没有弄清楚这是一个混合、扩展还是一个??对不起,我很笨。 +1感谢您的回答。我一直在这样做,它有效,但感觉不是最可持续的答案。如果我得到更新的 bootstrap.css 文件,我可能必须更改我的自定义覆盖类以适应任何更改。像@alexgray 一样,我想了解一种使用less 或mixins 的方法。或者,更好的方法是创建一个不应用引导程序的沙箱,这样我就可以使用我的样式而不必覆盖引导程序。如果有人有好的教程,请传递它 如果您只想对自己的 CSS 文件添加更改,那么分叉 Bootstrap 有什么意义?

以上是关于自定义 Bootstrap CSS 模板的主要内容,如果未能解决你的问题,请参考以下文章

C# MVC Core 自定义 Bootstrap CSS

Bootstrap5 和其他自定义 CSS 未在 .net core web api 中加载

左侧垂直菜单

CSS/Bootstrap 3 自定义进度跟踪器

css 自定义网格CSS 1/5与Bootstrap断点

bootstrap优点