J'utilise Bootstrap 3 et j'ai un tableau montrant des données. Dans ce tableau, j'ai appliqué du javascript pour la mise en forme conditionnelle. Si une condition est remplie, je règle la classe de l'élément sur "rouge"
.red {
background-color:red;
color:white;
}
les éléments HTML sont les suivants:
<td class="red">0</td>
J'ai maintenant un conflit sur les lignes impaires, la couleur du texte s'applique, mais la couleur d'arrière-plan est remplacée par le CSS suivant tiré de Bootstrap.
.table-striped > tbody > tr:nth-child(odd) > td,
.table-striped > tbody > tr:nth-child(odd) > th {
background-color: #f9f9f9;
}
comment puis-je résoudre ce conflit et assurer que la classe rouge assume la présidence?
Votre problème concerne très probablement la spécificité. Chris Coyier a un excellent article sur la spécificité CSS . Je vous suggère également de consulter ce calculateur pratique de spécificité .
En utilisant cette calculatrice, nous pouvons voir que .table-striped > tbody > tr:nth-child(odd) > td
a une spécificité de 23. En tant que tel, pour ignorer cela, toute nouvelle règle doit avoir une spécificité égale ou supérieure à 23. .red
est à 10, de sorte que pour le couper.
Dans ce cas, cela devrait être aussi simple que de faire correspondre la spécificité existante, puis d’y ajouter votre classe. .table-striped > tbody > tr:nth-child(odd) > td.red
nous donne une spécificité de 33. Comme 33 est supérieur à 23, votre règle devrait maintenant fonctionner.
Voir un exemple de travail ici: http://bootply.com/91756
En général, vous ne devriez jamais utiliser !important
à moins que vous ne souhaitiez jamais que cette règle soit remplacée. !important
est fondamentalement l'option nucléaire. Je suis assez confiant pour dire que si vous comprenez la spécificité, vous ne devriez jamais avoir besoin de !important
pour faire fonctionner correctement une règle personnalisée dans un cadre tel que Bootstrap.
Après un peu de réflexion, la règle que je donne ici est probablement un peu trop spécifique. Que se passe-t-il si vous souhaitez mettre en évidence une cellule sur une table qui n'a pas été supprimée? Pour rendre votre règle un peu plus globale tout en ayant suffisamment de spécificité pour fonctionner dans des tableaux dépouillés, je choisirais .table > tbody > tr > td.red
. Cela a la même spécificité que la suppression de Bootstrap, mais fonctionnera également sur les tables qui ne sont pas supprimées. Exemple mis à jour ici: http://bootply.com/91760
Premièrement, lisez la réponse de Sean Ryan - elle est très bonne et informative, mais je devais modifier suffisamment sa réponse avant d’implémenter dans mon code pour que je souhaite une réponse distincte qui pourrait aider la personne suivante.
J'avais presque la même question que le PO, mais je devais aussi pouvoir mettre en évidence la rangée. Voici comment j'ai amélioré (?) La réponse de Sean Ryan et l'ai transformée en ma dernière implémentation, ce qui vous permet d'ajouter une classe à la plupart des éléments aléatoires, y compris un "tr" ou un "td"
Voir ceci sur bootply.com
CSS
/* enable 'highlight' to be applied to most anything, including <tr> & <td>, including bootstrap's aggressive 'table-stripe'
see: http://stackoverflow.com/questions/19768794/custom-css-being-overridden-by-bootstrap-css
FYI: In the stack overflow question, the class is 'red' instead of 'highlight'
FYI: This is forked from http://www.bootply.com/91756
I used three different colors here for illustration, but we'd
likely want them to all be the same color.
*/
.highlight {
background-color: lightyellow;
}
/* supersede bootstrap at the row level by being annoyingly specific
*/
.table-striped > tbody > tr:nth-child(odd).highlight > td {
background-color: pink;
}
/* supersede bootstrap at the cell level by being annoyingly specific */
.table-striped > tbody > tr:nth-child(odd) > td.highlight {
background-color:lightgreen;
}
HTML
<table class="table table-striped">
<thead>
<tr>
<th>Col 1</th>
<th>Col 2</th>
<th>Col 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>1hi</td>
<td>hi</td>
<td>hi</td>
</tr>
<tr class="highlight">
<td>2hi</td>
<td>This row highlights fine since it was an even row to begin with, and therefore not highlighted by bootstrap</td>
<td>hi</td>
</tr>
<tr class="highlight">
<td>3hi</td>
<td>This whole row should be highlighted.</td>
<td>hi</td>
</tr>
<tr>
<td>4hi</td>
<td>hi</td>
<td>hi</td>
</tr><tr>
<td>5hi</td>
<td class="highlight">Just a specific cell to be highlighted</td>
<td>hi</td>
</tr>
</tbody>
</table>
Utilisation
.table-striped > tbody > tr:nth-child(odd) > td.red {
background-color:red;
color:white;
}
pour créer un sélecteur plus spécifique, ou le mot clé! important (comme l'a montré Andrew)
Alternativement, et probablement mieux, vous pouvez créer une configuration d'amorçage personnalisée, qui n'inclut pas le style de tableau (Désélectionnez Tables dans CSS commun).
Vous devez appliquer !important
après le style de classe. parce que nous utilisons le sélecteur, c'est .table-striped > tbody > tr:nth-child(odd) > td
, qui est plus spécifique que la règle de classe et aura la priorité. Donc, vous devez remplacer ceci avec !important
.
Mais il y a deux façons de résoudre ce problème:
Utilisez !important
pour rendre une règle plus "importante". J'éviterais de faire cela parce que c'est déroutant lorsque vous avez beaucoup de règles réparties sur plusieurs fichiers.
Utilisez un sélecteur de spécification supérieure pour le td que vous souhaitez modifier. Vous pouvez ajouter un identifiant, ce qui vous permettra de remplacer la règle à partir du fichier CSS lié.
Vous pouvez ajouter !important
après chaque style de la classe .red
. Ajouter! Important donnera au CSS plus de poids, ce qui vous permettra de remplacer les autres styles.
Votre css ressemblerait à ceci:
.red {
background-color: red !important;
color: white !important;
}
Vous pouvez appliquer une valeur de !important
après la valeur que vous souhaitez prévaloir.
Ne serait-ce pas une solution qui au lieu d'appliquer une classe, ajoute css à l'élément?