Jak mogę przesłonić style Bootstrap CSS?


234

Muszę zmodyfikować, bootstrap.cssaby pasowała do mojej witryny. Wydaje mi się, że lepiej jest utworzyć osobny custom.cssplik zamiast modyfikować bootstrap.cssbezpośrednio. Jednym z powodów jest to, że powinienem bootstrap.cssotrzymać aktualizację. Będę cierpieć z powodu próby ponownego włączenia wszystkich moich modyfikacji. Poświęcę trochę czasu ładowania dla tych stylów, ale jest to nieistotne dla kilku stylów, które zastępuję.

Jak mogę przesłonić, bootstrap.cssaby usunąć styl kotwicy / klasy? Na przykład, jeśli chcę usunąć wszystkie reguły stylizacji dla legend:

legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 20px;
  font-size: 21px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}

Mogę po prostu usunąć to wszystko bootstrap.css, ale jeśli moje zrozumienie najlepszych praktyk w zakresie zastępowania CSS jest poprawne, co powinienem zrobić?

Dla jasności chcę usunąć wszystkie style legend i użyć wartości CSS rodzica. Czy łącząc odpowiedź Pranav, czy będę robił następujące rzeczy?

legend {
  display: inherit !important;
  width: inherit !important;
  padding: inherit !important;
  margin-bottom: inherit !important;
  font-size: inherit !important;
  line-height: inherit !important;
  color: inherit !important;
  border: inherit !important;
  border-bottom: inherit !important;
}

(Miałem nadzieję, że jest sposób na zrobienie czegoś takiego :)

legend {
  clear: all;
}

Odpowiedzi:


491

Używanie !importantnie jest dobrą opcją, ponieważ najprawdopodobniej będziesz chciał zastąpić własne style w przyszłości. To pozostawia nam priorytety CSS.

Zasadniczo każdy selektor ma swoją własną „wagę” numeryczną:

  • 100 punktów za dokumenty tożsamości
  • 10 punktów za zajęcia i pseudoklasy
  • 1 punkt za selektory znaczników i pseudoelementy
  • Uwaga: Jeśli element ma wbudowany styl, który automatycznie wygrywa (1000 punktów)

Spośród dwóch stylów wyboru przeglądarka zawsze wybierze ten o większej wadze. Kolejność arkuszy stylów ma znaczenie tylko wtedy, gdy priorytety są równe - dlatego nie jest łatwo ominąć Bootstrap.

Możesz sprawdzić źródła Bootstrap, dowiedzieć się, jak dokładnie zdefiniowano określony styl, i skopiować ten selektor, aby Twój element miał taki sam priorytet. Ale w ten sposób tracimy trochę słodyczy Bootstrap.

Najłatwiejszym sposobem na rozwiązanie tego problemu jest przypisanie dodatkowego dowolnego identyfikatora do jednego z głównych elementów na stronie, na przykład: <body id="bootstrap-overrides">

W ten sposób możesz po prostu poprzedzić dowolny selektor CSS swoim identyfikatorem, natychmiast dodając 100 punktów wagi do elementu i zastępując definicje Bootstrap:

/* Example selector defined in Bootstrap */
.jumbotron h1 { /* 10+1=11 priority scores */
  line-height: 1;
  color: inherit;
}

/* Your initial take at styling */
h1 { /* 1 priority score, not enough to override Bootstrap jumbotron definition */
  line-height: 1;
  color: inherit;
}

/* New way of prioritization */
#bootstrap-overrides h1 { /* 100+1=101 priority score, yay! */
  line-height: 1;
  color: inherit;
}

skoro identyfikatory mogą być użyte tylko raz, dlaczego nie stworzyć #bootstrap-overridesklasy?
— chharvey

2
@chharvey: ponieważ musiałbyś lepiej obliczyć. jeśli byłaby to klasa w tym przykładzie, byłaby to prio 11, a jeśli definicja css byłaby po bootstrap.css, to dobrze byłoby zacząć. Byłoby to jednak dość bliskie i ustawiając go jako identyfikator, który zwiększa prio w wielkim czasie, nie musimy martwić się obliczaniem prio i testowaniem tak mocno, czy zawsze mamy rację. łatwiej z identyfikatorem, jeśli chcesz definitywnie zastąpić wartość domyślną.
— hogan

właśnie stworzyłem mój dzień. wiem o tym i wciąż utknąłem próbując dowiedzieć się, dlaczego moje style nie są interpretowane.
— hogan

3
Czy wymienione przez Ciebie punkty (100 dla identyfikatorów, 10 dla klas / pseudo klas, 1 dla selektorów znaczników / pseudoelementów) są dosłowne, czy po prostu wymyśliłeś te wartości dla tego przykładu?
— Kyle Vassella,

2
Twoje wyjaśnienie jest dobre, ma sens jako sposób na wyjaśnienie tego komuś nowemu w css, ale wprowadza w błąd. Prawidłowa nazwa tego, co wspomniałeś, to css, specificityktóry określa „wagę” każdego selektora css. Oto kilka szczegółów na ten temat: css-tricks.com/specifics-on-css-specificity/…
— Adriano

85

W sekcji nagłówka html umieść custom.css poniżej bootstrap.css.

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

Następnie w custom.css musisz użyć dokładnie tego samego selektora dla elementu, który chcesz przesłonić. W takim przypadku legendpozostaje tylko legendw pliku custom.css, ponieważ bootstrap nie ma bardziej szczegółowych selektorów.

legend {
  display: inline;
  width: auto;
  padding: 0;
  margin: 0;
  font-size: medium;
  line-height: normal;
  color: #000000;
  border: 0;
  border-bottom: none;
}

Ale h1na przykład musisz zadbać o bardziej szczegółowe selektory, takie jak .jumbotron h1ponieważ

h1 {
  line-height: 2;
  color: #f00;
}

nie zastąpi

.jumbotron h1,
.jumbotron .h1 {
  line-height: 1;
  color: inherit;
}

Oto pomocne wyjaśnienie specyficzności selektorów css, które musisz zrozumieć, aby dokładnie wiedzieć, które reguły stylu będą miały zastosowanie do elementu. http://css-tricks.com/specifics-on-css-specificity/

Cała reszta to tylko kwestia kopiowania / wklejania i edycji stylów.


28

Nie powinno to znacząco wpływać na czas ładowania, ponieważ zastępujesz części podstawowego arkusza stylów.

Oto kilka najlepszych praktyk, które osobiście stosuję:

  1. Zawsze ładuj niestandardowy CSS po podstawowym pliku CSS (nie reaguje).
  2. !importantJeśli to możliwe, unikaj używania . Może to zastąpić niektóre ważne style z podstawowych plików CSS.
  3. Zawsze ładuj bootstrap-responsive.css po custom.css, jeśli nie chcesz stracić zapytań o media. - MUSI PODĄŻAĆ
  4. Wolę modyfikować wymagane właściwości (nie wszystkie).

10
skoro bootstrap-responsive.cssjuż nie istnieje, czy nadal jest to prawdą, czy też nie jest to już istotne?
— Shaun Wilson

20

Połącz plik custom.css jako ostatni wpis poniżej pliku bootstrap.css. Definicje stylu Custom.css zastąpią bootstrap.css

HTML

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

Skopiuj wszystkie definicje stylu legendy do custom.css i dokonaj w nim zmian (np. Margines-dół: 5px; - To spowoduje przekroczenie marginesu-dół: 20px;)


Tak, już to zrobiłem. Przepraszam, moje pytanie nie było jasne. Moje pytanie dotyczyło tego, co zrobić w custom.css, aby zastąpić style z bootstrap.min.css.
— Alex

Co jeśli używam również bootstrap-theme.min.css?
— Quasaur,

Pracował dla mnie, nawet z min css
— mimi

5

Aby zresetować style zdefiniowane dla legendbootstrap, możesz wykonać następujące czynności w pliku css:

legend {
  all: unset;
}

Patrz: https://css-tricks.com/almanac/properties/a/all/

Wszystkie właściwości w CSS resetują wszystkie właściwości wybranego elementu, z wyjątkiem właściwości direction i unicode-bidi, które kontrolują kierunek tekstu.

Możliwe wartości to: initial, inherit&unset .

Uwaga dodatkowa: clearwłaściwość jest używana w związku z float( https://css-tricks.com/almanac/properties/c/clear/ )


3

Jeśli planujesz wprowadzić dość duże zmiany, dobrym pomysłem może być wykonanie ich bezpośrednio w samym bootstrapie i przebudowanie. Następnie możesz zmniejszyć ilość ładowanych danych.

Przewodnik po kompilacji można znaleźć w Bootstrap na GitHub .


W zależności od zakresu wymaganego dostosowania może to być najprostsza opcja. Na przykład zmiana dowolnych kolorów motywu wymagałaby tylu przesłonięć, że wolałbym zmienić szablon i niestandardową kompilację.
— David Kirkland

@alex Bump źródła i odbudować?
— Victor Häggqvist

3

Zobacz https://bootstrap.themes.guide/how-to-customize-bootstrap.html

  1. W przypadku prostych przesłonięć CSS możesz dodać plik custom.css poniżej pliku bootstrap.css

    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="css/custom.css">
  2. W przypadku bardziej szczegółowych zmian zalecaną metodą jest SASS.

    • stwórz swój własny custom.scss
    • zaimportuj Bootstrap po zmianach w pliku custom.scss
    • Na przykład zmieńmy kolor tła ciała na jasnoszary #eeeeee i zmień niebieski podstawowy kolor kontekstowy na zmienną $ fioletowy Bootstrap ...

      /* custom.scss */    
      
      /* import the necessary Bootstrap files */
      @import "bootstrap/functions";
      @import "bootstrap/variables";
      
      /* -------begin customization-------- */   
      
      /* simply assign the value */ 
      $body-bg: #eeeeee;
      
      /* or, use an existing variable */
      $theme-colors: (
        primary: $purple
      );
      /* -------end customization-------- */  
      
      /* finally, import Bootstrap to set the changes! */
      @import "bootstrap";

2

Trochę za późno, ale dodałem klasę do katalogu głównego, diva następnie rozszerzyłem wszystkie elementy bootstrap w moim niestandardowym arkuszu stylów:

.overrides .list-group-item {
    border-radius: 0px;
}
.overrides .some-elements-from-bootstrap { 
    /* styles here */
}
<div class="container-fluid overrides">
    <div class="row">
        <div class="col-sm-4" style="background-color: red">
            <ul class="list-group">
                <li class="list-group-item"><a href="#">Hey</a></li>
                <li class="list-group-item"><a href="#">I was doing</a></li>
                <li class="list-group-item"><a href="#">Just fine</a></li>
                <li class="list-group-item"><a href="#">Until I met you</a></li>
                <li class="list-group-item"><a href="#">I drink too much</a></li>
                <li class="list-group-item"><a href="#">And that's an issue</a></li>
                <li class="list-group-item"><a href="#">But I'm okay</a></li>
            </ul>
        </div>
        <div class="col-sm-8" style="background-color: blue">
            right
        </div>
    </div>
</div>

-1
  1. Sprawdź przycisk celu na konsoli.
  2. Przejdź do karty elementów, a następnie najedź myszką na kod i upewnij się, że znajduje się domyślny identyfikator lub klasa używana przez bootstrap.
  3. Użyj jQuery / javascript, aby zastąpić styl / tekst przez wywołanie funkcji.

Zobacz ten przykład:

  $(document).ready(function(){
      $(".dropdown-toggle").css({ 
        "color": "#212529",
        "background-color": "#ffc107",
        "border-color": "#ffc107"
       });
      $(".multiselect-selected-text").text('Select Tags');
  });

-1

Dowiedziałem się, że (bootstrap 4) pozostawia swój własny CSS bootstrap.css i .js jest najlepszym rozwiązaniem.

Znajdź element, który chcesz zmienić (sprawdź element) i użyj dokładnie tej samej deklaracji, a następnie zastąpi.

Zajęło mi to trochę czasu, aby to zrozumieć.


-3

Podaj identyfikator legendzie i zastosuj css. Jak dodać id hello do legend (), css jest następujący:

#legend  legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 20px;
  font-size: 21px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}

-9

Użyj jquery css zamiast css. . . jquery mają priorytet niż bootstrap css ...

na przykład

$(document).ready(function(){
        $(".mnu").css({"color" : "#CCFF00" , "font-size": "16px" , "text-decoration" : "overline"});    


);

 instead of

.mnu
{

font-family:myfnt;
font-size:20px;
color:#006699;

}

6
HTML powinien być używany do zapewniania struktury, CSS powinien być używany do zapewniania stylu, a JavaScript (w tym jQuery) powinien być używany tylko do zapewniania interaktywności. Używanie jQuery do nadpisywania stylów jest sprzeczne z zasadami dobrej architektury i będzie bardzo mylące dla każdego, kto będzie próbował pracować nad kodem za 6 miesięcy.
— Stephen R. Smith
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.