如何覆盖Twitter Bootstrap中的样式


Answers:



233

所有这些技巧都可以使用,但是更简单的方法可能是在Bootstrap 样式之后包含样式表。

如果site-specific.css在Bootstrap的()之后包含css()bootstrap.css,则可以通过重新定义规则来覆盖它们。

例如,如果这是将CSS包含在自己的方式中 <head>

<link rel="stylesheet" href="css/bootstrap.css" />
<link rel="stylesheet" href="css/site-specific.css" />

您可以通过写入(在site-specific.css文件中)简单地将侧边栏向右移动:

.sidebar {
    float: right;
}

原谅缺少HAML和SASS,但我对它们的了解不足,无法在其中编写教程。


7
@ClaudiuConstantin我没有理由不这样做。经验法则是,如果两种样式的特异性相同,则第二种样式将始终胜过第一种样式。只要您的样式出现,样式就会被覆盖。
citelao 2012年

3
@Kreker这可能与特异性有很大关系。您可以在此处阅读相关内容(旧文章),但基本上.sidebar.right比更加具体.sidebar。那可能是问题所在。使用Web检查器找出覆盖的内容。
citelao

2
@Kreker是的,就是这个想法。问题!important在于您将来再也无法覆盖它。
citelao

5
Site.css被捆绑在一起并列出Bundle.config在之后进行 物理渲染bootstrap.css但是样式仍然没有被覆盖。我不得不site.css从现代化工具包中取出参考,然后手动将其放在bootstrap.css(并在调试后按Ctrl + F5清除缓存)
atconway 2013年

1
这可能有效,但不是最佳生产实践。除非有很大的理由,否则每个站点加载1个样式表。#sitespeed
Ben

58

答案是CSS专用性。您需要在CSS中更“特定”,以便它可以覆盖bootstrap css属性。

例如,您在此处具有引导菜单的示例代码:

<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
    <div id="home-menu-container" class="collapse navbar-collapse">
        <ul id="home-menu" class="nav navbar-nav">
            <li><a class="navbar-brand" href="#"><img src="images/xd_logo.png" /></a></li>
            <li><a href="#intro">Home</a></li>
            <li><a href="#about">About Us</a></li>
            <li><a href="#services">What We Do</a></li>
            <li><a href="#process">Our Process</a><br /></li>
            <li><a href="#portfolio">Portfolio</a></li>
            <li><a href="#contact">Contact Us</a></li>
        </ul>
    </div><!-- /.navbar-collapse -->
</nav>

在这里,您需要记住特异性的层次结构。它是这样的:

  • 给一个id为100的元素
  • 给一个元素上10分的分数
  • 给一个简单的元素一个单

因此,对于上述情况,如果您的CSS具有以下内容:

.navbar ul li a { color: red; } /* 10(.navbar) + 1(ul) + 1(li) + 1(a) = 13 points */
.navbar a { color: green; } /* 10(.navbar) + 1(a) = 11 points */

因此,即使您已经定义了.navbar aafter .navbar ul li a,由于其特异性更高(13分),它仍将用红色而不是绿色替代。

因此,基本上,您所需要做的就是通过浏览器上的inspect元素来计算要更改css的元素的点数。在这里,bootstrap为元素指定了其css为

.navbar-inverse .navbar-nav>li>a { /* Total = 22 points */
    color: #999;
}

因此,即使您的css正在加载,也要在bootstrap.css之后加载,其内容如下:

.navbar-nav li a {
    color: red;
}

它仍将呈现为#999。为了解决这个问题,引导程序有22分(自己计算)。因此,我们所需要的不只是这些。因此,我将自定义ID添加到元素,即home-menu-container和home-menu。现在,以下CSS将起作用:

#home-menu-container #home-menu li a { color: red; } /* 100 + 100 + 1 + 1 = 202 points :) */

做完了

您可以参考此MDN链接


1
如果绑在一起怎么办?
2015年

2
没关系,例如'.abc.xyz'意味着存在一个类为'abc'和'xyz'的元素-它仍将其作为具有类的单个元素。因此,有10分。ID也一样。
kaizer1v 2015年

1
写得好!谢谢!
GobSmack

1
这是我的把戏。我在覆盖blockquoteBootstrap CSS中的样式时遇到麻烦。奇怪的是,对于正常的块引用来说这是错误的,但是在块引用内查找<ul>正确。关键是将我的CSS更新为具有blockquote p,从而具有足够的优先级。<ul>在页面的其他部分执行此操作。
亚当·维尔


9

您可以确保在boostrap.css 之后解析css文件,如下所示:

<link href="css/bootstrap.css" rel="stylesheet">
<link href="css/myFile.css" rel="stylesheet">


6

如果要覆盖引导程序中的任何CSS,请使用!important

假设这是引导程序中的页面标题类,其顶部有40px的边距,我的客户不喜欢它,他希望顶部仅15个像素,底部仅10个像素

.page-header {
    border-bottom: 1px solid #EEEEEE;
    margin: 40px 0 20px;
    padding-bottom: 9px;
}

所以我在我的site.css文件中的类上添加了这样的名称

.page-header
{
    padding-bottom: 9px;
    margin: 15px 0 10px 0px !important;
}

请注意!important与我的空白,它将覆盖bootstarp页面标题类空白的空白。


太棒了!这就是我要的。谢谢
Gisway 2014年

2
请注意,使用!important有点反模式。在此处了解更多信息:james.padolsey.com/css/dont-use-important
mayatron 2015年

3

来得很晚,但是我认为它可以使用另一个答案。

如果您使用的是sass,则实际上可以在导入引导程序之前更改变量。http://twitter.github.com/bootstrap/customize.html#variables

更改其中任何一个,例如:

$bodyBackground: red;
@import "bootstrap";

或者,如果没有想要更改的变量,则可以覆盖样式或添加自己的样式。

萨斯:

@import "bootstrap";

/* override anything manually, like rounded buttons */
.btn {
  border-radius: 0;
}

另请参阅:Rails中正确的SCSS资产结构


2

我知道这是一个古老的问题,但是仍然遇到了类似的问题,并且我意识到文件中的“无法正常工作”的CSS代码bootstrapOverload.css是在之后编写的media queries。当我将其移至媒体查询上方时,它开始工作。

万一有人遇到同样的问题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.