Як перезаписати стайлінг у Twitter Bootstrap


128

Як я можу перезаписати стилі в Twitter Bootstrap? Наприклад, зараз я використовую клас .sidebar, у якому є правило CSS 'float: left;' Як я можу змінити це так, щоб воно перейшло направо? Я використовую HAML та SASS, але порівняно новачок у веб-розробці.


Також дивіться: stackoverflow.com/questions/8596794/…
Зім

Відповіді:


41

Додайте власний клас, наприклад:, <div class="sidebar right"></div>за допомогою CSS як

.sidebar.right { 
    float:right
} 


2
@DamjanPavlica Чесно кажучи? Ви все ще дбаєте про IE 6? Не кажучи вже про те, що, я думаю, завантажувальний пристрій використовує ланцюжок.
Błażej Michalik

233

Всі ці поради спрацюють, але більш простим способом може бути включення вашої таблиці стилів після стилів Bootstrap.

Якщо ви включите ваш css ( site-specific.css) після Bootstrap's ( 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

3
@Kreker Це, мабуть, має багато спільного з специфікою. Ви можете прочитати про це тут (стара стаття), але в основному .sidebar.rightбільш конкретна, ніж .sidebar. В цьому, мабуть, проблема. Використовуйте веб-інспектор, щоб з’ясувати, що це переважає.
citelao

2
@Kreker ю, це ідея. Проблема !importantполягає в тому, що в майбутньому ви більше ніколи не зможете її перекрити.
citelao

5
Моє Site.cssпоєднується, перераховується Bundle.configі відображається фізично після, bootstrap.css але стилі все ще не змінюються. Мені довелося вийняти site.cssпосилання з набору модернізаторів і вручну поставити це після bootstrap.css(і натиснути Ctrl + F5 один раз налагодження, щоб очистити кеш)
atconway

1
Це може спрацювати, але це не буде найкращою практикою для виробництва. Завантажте 1 таблицю стилів на кожен сайт, якщо немає великих причин цього не робити. #sitespeed
Ben Racicot

58

Відповідь на це - специфіка CSS. Вам потрібно бути більш "конкретним" у своєму CSS, щоб він міг перекривати властивості 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>

Тут потрібно пам’ятати про ієрархію конкретності. Виходить так:

  • Дайте елемент із ідентифікатором, згаданим 100 балів
  • Дайте елемент з класом, згаданим 10 балів
  • Дайте простому елементу 1 бал

Отже, для вищезазначеного, якщо ваш 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 aпісля .navbar ul li aцього він все одно перекриє червоний колір, а не зелений, оскільки специфічність більше (13 балів).

Отже, в основному все, що вам потрібно зробити, - це обчислити бали за елемент, для якого ви хочете змінити 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 бали (порахуйте самі). Отже, все, що нам потрібно, - це щось більше, ніж це. Таким чином, я додав спеціальні ідентифікатори до елементів, тобто домашнє меню-контейнер та домашнє меню. Тепер буде працювати наступний css:

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

Зроблено.

Ви можете посилатися на це посилання MDN .


1
Що робити, якщо вони пов'язані?
Плутати

2
Не має значення, наприклад, ".abc.xyz" означає, що є елемент з класами "abc" і "xyz" - він все одно буде сприймати його як єдиний елемент з класом. Таким чином, 10 балів. те саме стосується ідентифікатора.
kaizer1v

1
Добре написано! Дякую!
GobSmack

1
Це була хитрість для мене. У мене виникли проблеми з керуванням blockquoteстилем у CSS Bootstrap. Як не дивно, це було неправильно для звичайних блок-котирувань, але виглядало правильно і <ul> в рамках блок-котировки. Ключовим моментом було оновлення моєї CSS, щоб мати blockquote pдостатньо пріоритету. <ul> робив це для іншого розділу сторінки.
Адам Вюрль

20

Ви можете перезаписати клас CSS, зробивши його "більш конкретним".

Ви піднімаєте HTML-дерево і вказуєте батьківські елементи:

div.sidebar { ... } є більш конкретним, ніж .sidebar { ... }

Ви можете пройти весь шлях до BODY, якщо вам потрібно:

body .sidebar { ... } перекриє практично все.

Дивіться цей зручний посібник: http://css-tricks.com/855-specifics-on-css-specificity/


Це насправді найкраща відповідь
CodyBugstein

9

Ви можете просто переконатися, що ваш файл css аналізує ПІСЛЯ boostrap.css, наприклад:

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


6

Якщо ви хочете перезаписати будь-який css при використанні завантажувача!

Скажімо, ось клас заголовка сторінки в завантажувальній системі, який має 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;
}

Зверніть увагу на! Важливо з моїм полем, яке буде замінено поле запасу класу bootstarp сторінки-заголовка.


приголомшливий! це те, що я хочу. Спасибі
Gisway

2
Зауважте, що використання! Важливо дещо анти-шаблон. Детальніше читайте тут: james.padolsey.com/css/dont-use-імпорт
майатрон

3

Я зіткнувся з цим пізно, але я думаю, що це може використати іншу відповідь.

Якщо ви використовуєте sass, ви можете фактично змінити змінні, перш ніж імпортувати завантажувальну систему. http://twitter.github.com/bootstrap/customize.html#variables

Змініть будь-яку з них, наприклад:

$bodyBackground: red;
@import "bootstrap";

Крім того, якщо для змін, які ви хочете змінити, немає змінної, ви можете змінити стилі або додати свій власний.

Sass:

@import "bootstrap";

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

Також дивіться це: Правильна структура активів SCSS в рейках


2

Я знаю, що це старе питання, але все-таки я зіткнувся з подібною проблемою і зрозумів, що мій "не працює" код css у моєму bootstrapOverload.cssфайлі був написаний після media queries. коли я перемістив його над медіа-запитами, він почав працювати.

Про всяк випадок, якщо хтось інший стикається з тією ж проблемою

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.