Comment puis-je outrepasser Bootstrap CSS styles?
je dois modifier bootstrap.css
pour correspondre à mon site web. Je pense qu'il est préférable de créer un fichier séparé custom.css
au lieu de modifier bootstrap.css
directement, une raison étant que si bootstrap.css
obtenir une mise à jour, je vais souffrir d'essayer de re-inclure toutes mes modifications. Je vais sacrifier un peu de temps pour ces styles, mais c'est négligeable pour les quelques styles que je supplante.
Hw dois-je remplacer bootstrap.css
de sorte que je supprimer l' style d'une ancre / classe? Par exemple, si je veux supprimer toutes les règles de style pour 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;
}
je peux simplement supprimer tout cela dans bootstrap.css
, mais si ma compréhension des meilleures pratiques sur les CSS est correcte, que devrais-je faire à la place?
pour être clair, je veux supprimer tous ces styles de légende et utiliser les valeurs CSS de parent. Donc, en combinant la réponse de Pranav, vais-je faire ce qui suit?
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;
}
(j'espérais qu'il y a moyen de faire quelque chose comme ce qui suit:)
legend {
clear: all;
}
10 réponses
L'utilisation de !important
n'est pas une bonne option, car vous voudrez très probablement outrepasser vos propres styles à l'avenir. Cela nous laisse avec des priorités CSS.
fondamentalement, chaque sélecteur a son propre "poids" numérique:
- 100 points pour IDs
- 10 points pour les classes et pseudo-classes
- 1 point pour les sélecteurs d'étiquettes et les pseudo-éléments
parmi deux le navigateur selector styles choisira toujours celui qui a le plus de poids. L'ordre de vos feuilles de style n'a d'importance que lorsque les priorités sont égales - c'est pourquoi il n'est pas facile d'outrepasser Bootstrap.
votre option est d'inspecter les sources Bootstrap, trouver comment exactement un style spécifique est défini, et copier ce sélecteur pour que votre élément ait la même priorité. Mais on perd un peu la douceur du Bootstrap.
la façon la plus facile de surmonter cela est de assignez un identifiant arbitraire supplémentaire à l'un des éléments racine de votre page, comme ceci: <body id="bootstrap-overrides">
de cette façon, vous pouvez juste préfixer n'importe quel sélecteur CSS avec votre ID, ajoutant instantanément 100 points de poids à l'élément, et en outrepassant les définitions 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;
}
dans la section tête de votre place html votre coutume.css en dessous de bootstrap.CSS.
<link href="bootstrap.min.css" rel="stylesheet">
<link href="custom.css" rel="stylesheet">
puis dans coutume.css vous devez utiliser exactement le même sélecteur pour l'élément que vous souhaitez remplacer. Dans le cas de legend
il reste simplement legend
dans votre personnalisé.css parce que bootstrap n'a pas de sélecteur plus spécifique.
legend {
display: inline;
width: auto;
padding: 0;
margin: 0;
font-size: medium;
line-height: normal;
color: #000000;
border: 0;
border-bottom: none;
}
mais dans le cas de h1
par exemple, vous devez prendre soin des sélecteurs plus spécifiques comme .jumbotron h1
parce que
h1 {
line-height: 2;
color: #f00;
}
n'annule pas
.jumbotron h1,
.jumbotron .h1 {
line-height: 1;
color: inherit;
}
Voici une explication utile de la spécificité des sélecteurs css que vous devez comprendre pour savoir exactement quelles règles de style s'appliqueront à un élément. http://css-tricks.com/specifics-on-css-specificity /
Tout le reste est juste une question de copier/coller et modifier les styles.
il ne devrait pas affecter le temps de charge beaucoup puisque vous êtes des parties prépondérantes de la feuille de style de base.
voici quelques bonnes pratiques que je suis personnellement:
- chargez toujours le fichier CSS personnalisé après le fichier CSS de base (non responsive).
- éviter d'utiliser
!important
si possible. Qui peut outrepasser certains styles importants des fichiers CSS de base. - chargez toujours bootstrap-responsive.css après personnaliser.css si vous ne voulez pas perdre les requêtes des médias. - DOIT SUIVRE
- préfère modifier les propriétés requises (pas toutes).
liez votre coutume.fichier css comme dernière entrée sous le bootstrap.CSS. Personnaliser.les définitions de style css annuleront bootstrap.css
Html
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/custom.css" rel="stylesheet">
copier toutes les définitions de style de la légende dans la coutume.css et y apporter des modifications (comme margin-bottom:5px; -- Cela overrider margin-bottom:20px; )
si vous planifiez d'effectuer des changements assez grands, il pourrait être une bonne idée de les faire démarrer directement et de le reconstruire. Vous pouvez alors réduire le nombre de données chargées. S'il vous plaît se référer à Bootstrap sur GitHub pour le guide de construction.
un peu tard, mais ce que j'ai fait est que j'ai ajouté une classe à la racine div
puis étend tous les éléments bootstrap dans ma feuille de style personnalisé:
.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>
pour réinitialiser les styles définis pour legend
dans bootstrap, vous pouvez faire ce qui suit dans votre fichier css:
legend {
all: unset;
}
Ref: https://css-tricks.com/almanac/properties/a/all /
la propriété all dans CSS réinitialise tous les éléments sélectionnés propriétés, à l'exception des propriétés direction et unicode-bidi qui contrôle de l'orientation du texte.
les valeurs possibles sont: initial
, inherit
& unset
.
note de Côté: "151950920 de la propriété" est utilisé en relation avec float
( https://css-tricks.com/almanac/properties/c/clear/ )
j'ai découvert que (bootrap 4) Mettre votre css onw derrière bootstrap.css et .js est la meilleure solution.
trouvez l'article que vous voulez changer (inspecter l'élément) et utilisez la même déclaration exacte, puis il aura priorité.
Il m'a fallu peu de temps pour comprendre cela.
donner une identification à la légende et appliquer css. Comme add id hello to legend() la css est comme suit:
#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;
}
utiliser jquery css au lieu de css . . . jquery ont la priorité sur bootstrap css...
E. g
$(document).ready(function(){
$(".mnu").css({"color" : "#CCFF00" , "font-size": "16px" , "text-decoration" : "overline"});
);
instead of
.mnu
{
font-family:myfnt;
font-size:20px;
color:#006699;
}