Existe-t-il une règle en CSS qui détermine l'ordre de cascade lorsque plusieurs classes sont définies sur un élément? (class="one two"
contre class="two one"
)
À l'heure actuelle, il ne semble pas y avoir un tel effet.
Exemple: les deux divs sont de couleur orange sur Firefox
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<style>
.one { border: 6px dashed green }
.two { border: 6px dashed orange }
</style>
</head>
<body>
<div class="one two">
hello world
</div>
<div class="two one">
hello world
</div>
Cela dépend du dernier déclaré dans votre feuille de style. Par exemple,
.one { border: 6px dashed green }
.two { border: 6px dashed orange }
contre
.two { border: 6px dashed green }
.one { border: 6px dashed orange }
La classe définie dernière dans le CSS est ce qui gagne dans ces cas. L'ordre sur l'élément n'a pas d'importance, c'est cohérent dans tous les navigateurs que je connais, je vais essayer d'indiquer les bits de spécification pertinents.
La classe entière ne gagne pas, les propriétés gagnent individuellement, si le .one
avait une propriété qui .two
n'est-ce pas que vous verriez bien cette propriété sur ces deux <div>
éléments.
Comme les autres réponses l'ont noté, l'ordre déclaré dans l'attribut class n'a aucun effet - la priorité vient de l'ordre des déclarations dans le fichier CSS.
Cependant, si vous voulez vraiment simuler quelque chose qui vous permet de "fake" la priorité dans l'attribut class, vous pouvez essayer:
.one-first { border: 6px dashed green }
.two-first { border: 6px dashed orange }
.one { border: 6px dashed green }
.two { border: 6px dashed orange }
Puis
<div class="one-first two"/>
et
<div class="two-first one"/>
Ordonnera la priorité avec le dernier gagnant (dans la même veine que la propriété CSS qui vient en dernier en priorité.)
Lorsque vous utilisez plusieurs classes pour définir une feuille de style d'élément, vous pouvez utiliser le !important
pour remplacer la "cascation" de la feuille de style.
.one { border: 6px dashed green !important }
.two { border: 6px dashed orange }
Cela rendra vos divs vertes.
L'ordre de l'attribut de classe n'a pas d'importance d'un bit. Cela dépend de plusieurs choses, dans votre cas, c'est l'ordre dans lequel votre CSS est écrit.
Les deux styles ont la même spécificité, donc le style .two remplace le style de .one car il est plus bas dans la balise de style.
Je pense qu'il est clair qu'aucune règle de ce type ne s'applique. La règle .one
a la même spécificité que la règle .two
, donc selon la norme CSS, les propriétés du .two
le bloc remplace ceux du .one
parce que le .two
le bloc apparaît plus tard. Aucune référence n'est faite nulle part à l'ordre des mots dans l'attribut class
.
le remplacement se produira dans l'ordre dans lequel les classes sont déclarées. donc .two gagne toujours
En cas de doute, affichez la page dans FireBug. Il supprimera les classes qui sont remplacées et affichera l'ordre dans lequel elles sont appliquées dans la page.
Notez également que les styles en ligne remplaceront ceux déclarés dans une feuille de style externe. Si vous voulez rompre la chaîne en cascade avec l'applicabilité, vous pouvez utiliser la déclaration ! Important comme dans
p {margin: 10px 5px 0 10px !important}
Cela entraînera la déclinaison ! Important pour remplacer les autres quelle que soit la position. Certains y voient une mauvaise pratique, mais elle peut être utile si elle est utilisée judicieusement.