Dans un en-tête HTML, j'ai ceci:
<head>
<title>Title</title>
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="master.css" rel="stylesheet" type="text/css"/>
styles.css
est ma fiche spécifique à la page. master.css
est une feuille que j'utilise dans chacun de mes projets pour remplacer les paramètres par défaut du navigateur. Laquelle de ces feuilles de style a la priorité? Exemple: la première feuille contient des informations spécifiques
body { margin:10px; }
Et les frontières associées, mais le second contient mes réinitialisations de
html, body:not(input="button") {
margin: 0px;
padding: 0px;
border: 0px;
}
En substance, l'élément en cascade de CSS fonctionne-t-il de la même manière en termes de références de feuille de style que dans les fonctions CSS classiques? Ce qui signifie que la dernière ligne est celle affichée?
Les règles pour la cascade de règles CSS sont complexes - plutôt que d'essayer de les paraphraser, je vous renvoie simplement à la spécification:
http://www.w3.org/TR/2011/REC-CSS2-20110607/cascade.html#cascade
En bref: des règles plus spécifiques prévalent sur des règles plus générales. La spécificité est définie en fonction du nombre d'ID, de classes et de noms d'éléments impliqués, ainsi que de l'utilisation éventuelle de la déclaration !important
. Lorsque plusieurs règles du même "niveau de spécificité" existent, celle qui apparaît en dernier l'emporte.
Le style le plus spécifique est appliqué:
div#foo {
color: blue; /* This one is applied to <div id="foo"></div> */
}
div {
color: red;
}
Si tous les sélecteurs ont la même spécificité, la décélération la plus récente est utilisée:
div {
color: red;
}
div {
color: blue; /* This one is applied to <div id="foo"></div> */
}
Dans votre cas, body:not([input="button"])
est plus spécifique et ses styles sont utilisés.
L'ordre compte. La dernière valeur déclarée d'occurrence multiple sera prise. S'il vous plaît voir le même que j'ai travaillé sur: http://jsfiddle.net/Wtk67/
<div class="test">Hello World!!</div>
<style>
.test{
color:blue;
}
.test{
color:red;
}
</style>
Si vous échangez l'ordre de .test{}
, alors vous pouvez voir que le HTML prend la valeur du dernier déclaré en CSS
Le dernier chargement CSS est THE MASTER, qui remplacera tous les CSS avec les mêmes paramètres CSS
Exemple:
<head>
<link rel="stylesheet" type="text/css" href="css/reset.css">
<link rel="stylesheet" type="text/css" href="css/master.css">
</head>
reset.css
h1 {
font-size: 20px;
}
master.css
h1 {
font-size: 30px;
}
La sortie de la balise h1 sera font-size: 30px;
Essayons de simplifier la règle en cascade avec un exemple. Les règles vont plus spécifiques au général.
Voici le code css et html;
<style>
h2{
color:darkblue;
}
#important{
color:darkgreen;
}
.headline {
color:red;
}
article {
color:black;
font-style:italic;
}
aside h2 {
font-style:italic;
color:darkorange;
}
article h2 {
font-style: normal;
color: purple;
}
</style>
Voici le style css
<body>
<section>
<div>
<h2>Houston Chronicle News</h2>
<article>
<h2 class="headline" id="important">Latest Developments in your city</h2>
<aside>
<h2>Houston Local Advertisement Section</h2>
</aside>
</article>
</div>
<p>Next section</p>
</section>
Voici le résultat. Quel que soit l'ordre des fichiers de style ou la déclaration de style, id="important"
s'applique à la fin (notez le class="deadline"
déclaré en dernier mais ne prend aucun effet).
L'élément <article>
contient l'élément <aside>
, mais le dernier style déclaré prend effet, dans ce cas article h2 { .. }
sur le troisième élément h2.
Voici le résultat sur IE11: (Pas assez de droits pour publier une image) DarkBlue: Houston Chronicle News, DarkGreen: derniers développements dans votre ville, Violet: Section de la publicité locale de Houston, Noir: Section suivante
Cela dépend à la fois de l'ordre de chargement et de la spécificité des règles appliquées à chaque style. Compte tenu du contexte de votre question, vous souhaitez d'abord charger votre réinitialisation générale, puis la page spécifique. Ensuite, si vous ne voyez toujours pas l’effet recherché, vous devez vous pencher sur la spécificité des sélecteurs impliqués, comme d’autres l’ont déjà fait remarquer.
Oui, cela fonctionne comme si elles étaient dans une seule feuille, cependant:
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="master.css" rel="stylesheet" type="text/css"/>
Dans le code ci-dessus, rien ne garantit que master.css
sera chargé après styles.css
. Par conséquent, si master.css
est chargé rapidement et que styles.css
prend un certain temps, styles.css
deviendra la deuxième feuille de style et toutes les règles de même spécificité de master.css
seront remplacées.
Il est préférable de mettre toutes vos règles sur une seule feuille (et de les minimiser) avant de les déployer.
Le meilleur moyen consiste à utiliser les classes autant que possible. Évitez les sélecteurs d'ID (#) de toute façon. Lorsque vous écrivez des sélecteurs avec une seule classe, l'héritage CSS est beaucoup plus facile à suivre.
Mise à jour: pour en savoir plus sur la spécificité CSS dans cet article: https://css-tricks.com/specifics-on-css-specificity/
D'après votre question, je suppose que vous avez des sélections en double, un ensemble principal qui s'applique à toutes les pages et un ensemble plus spécifique que vous souhaitez remplacer par les valeurs principales de chaque page. Si tel est le cas, votre commande est correcte. Le maître est chargé en premier et les règles du fichier suivant ont priorité (si elles sont identiques ou ont le même poids). Il est vivement recommandé de décrire toutes les règles sur ce site Web http://vanseodesign.com/css/css-specificity-inheritance-cascaade/ Quand je commencé avec le développement front-end, cette page a éclairci beaucoup de questions.