J'essaie de comprendre pourquoi l'une de mes classes css semble remplacer l'autre (et non l'inverse)
Ici, j'ai deux classes css
.smallbox {
background-color: white;
height: 75px;
width: 150px;
font-size:20px;
box-shadow: 0 0 10px #ccc;
font-family: inherit;
}
.smallbox-paysummary {
@extend .smallbox;
font-size:10px;
}
et à mon avis j'appelle
<pre class = "span12 pre-scrollable smallbox-paysummary smallbox ">
La police (l'élément qui se chevauche) apparaît comme 10 pixels au lieu de 20 - quelqu'un pourrait-il expliquer pourquoi c'est le cas?
@extend .smallbox;
, qui ressemble à un cSS non standard.@extend
- si cela fait ce que je pense - et utiliser les deux sélecteurs sur le même élément..smallbox-paysummary
), et éventuellement de rendre la déclaration CSS plus clairement spécifique (sans se fier à l'ordre d'apparition dans le fichier CSS) en utilisant.smallbox.smallbox-paysummary { font-size: 10px; }
.smallbox-paysummary
police ait une police plus petite, pourquoi la réduisez-vous en premier lieu?Réponses:
Il existe plusieurs règles (appliquées dans cet ordre):
!important
toujours la priorité.Dans votre cas, c'est la règle 3 qui s'applique.
Spécificité pour les sélecteurs simples du plus élevé au plus bas:
#main
sélectionne<div id="main">
).myclass
), sélecteurs d'attributs (ex .:[href=^https:]
) et pseudo-classes (ex .::hover
)div
) et des pseudo-éléments (ex .:::before
)Pour comparer la spécificité de deux sélecteurs combinés, comparez le nombre d'occurrences de sélecteurs uniques de chacun des groupes de spécificité ci-dessus.
Exemple: comparer
#nav ul li a:hover
à#nav ul li.active a::after
#nav
):hover
et.active
)ul li a
) pour le premier et 4 pour le second (ul li a ::after
), donc le second sélecteur combiné est plus spécifique.Un bon article sur la spécificité du sélecteur css .
la source
:hover
n'est pas un sélecteur de classe , mais un sélecteur de pseudo-classe .Voici une compilation de l'ordre de style CSS dans un diagramme, sur lequel les règles CSS ont une priorité plus élevée et ont priorité sur le reste:
Clause de non - responsabilité : Mon équipe et moi avons travaillé cette pièce avec un article de blog ( https://vecta.io/blog/definitive-guide-to-css-styling-order ) qui, je pense, sera utile à tous les front-end développeurs.
la source
Ce que nous examinons ici s'appelle la spécificité comme indiqué par Mozilla :
J'aime l' explication 0-0-0 sur https://specifishity.com :
Tout à fait descriptif l'image de la
!important
directive! Mais parfois, c'est le seul moyen de remplacer l'style
attribut en ligne . C'est donc une bonne pratique d'essayer d'éviter les deux.la source
Tout d'abord, d'après votre
@extend
directive, il semble que vous n'utilisiez pas du CSS pur, mais un préprocesseur tel que SASS os Stylus.Maintenant, quand nous parlons d '«ordre de priorité» en CSS, il y a une règle générale impliquée: quelles que soient les règles définies après les autres règles (de manière descendante) sont appliquées. Dans votre cas, juste en spécifiant
.smallbox
après,.smallbox-paysummary
vous pourrez modifier la priorité de vos règles.Cependant, si vous voulez aller un peu plus loin, je vous suggère cette lecture: spécification CSS cascade W3C . Vous constaterez que la priorité d'une règle est basée sur:
la source
AS est l'état dans W3: W3 Cascade CSS
l'ordre selon lequel différentes feuilles de style sont appliquées est le suivant (citation de la section en cascade de W3):
déclarations d'agent utilisateur
déclarations normales de l'utilisateur
auteur des déclarations normales
auteur de déclarations importantes
Plus d'informations à ce sujet dans le document W3 référencé
la source
L'ordre dans lequel les classes apparaissent dans l'élément html n'a pas d'importance, ce qui compte est l'ordre dans lequel les blocs apparaissent dans la feuille de style.
Dans votre cas
.smallbox-paysummary
est défini après.smallbox
donc la priorité de 10px.la source
Le css en ligne (attribut de style html) remplace les règles css dans la balise de style et le fichier css
Un sélecteur plus spécifique a priorité sur un sélecteur moins spécifique.
Les règles qui apparaissent plus loin dans le code remplacent les règles antérieures si les deux ont la même spécificité.
la source
Il est également important de noter que lorsque vous avez deux styles sur un élément HTML avec une priorité égale, le navigateur donnera la priorité aux styles qui ont été écrits en dernier dans le DOM ... donc si dans le DOM:
... la largeur du div sera de 50px
la source