En un encabezado HTML, tengo esto:
<head>
<title>Title</title>
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="master.css" rel="stylesheet" type="text/css"/>
styles.css
es mi hoja de página específica. master.css
es una hoja que uso en cada uno de mis proyectos para anular los valores predeterminados del navegador. ¿Cuál de estas hojas de estilo tiene prioridad? Ejemplo: la primera hoja contiene información específica
body { margin:10px; }
Y bordes asociados, pero el segundo contiene mis restablecimientos de
html, body:not(input="button") {
margin: 0px;
padding: 0px;
border: 0px;
}
En esencia, ¿el elemento en cascada de CSS funciona igual en términos de referencias de hoja de estilo que en las funciones típicas de CSS? ¿Significa que la última línea es la que se muestra?
css
overriding
stylesheet
ian5v
fuente
fuente
body:not(input="button")
No es un selector válido por cierto. Probablemente quisiste dividirlo enbody, input:not([type="button"])
.master.css
debería cargar primero, luego es mucho más fácil anular los estilos maestros en tustyles.css
.Respuestas:
Las reglas para la cascada de reglas CSS son complejas: en lugar de tratar de parafrasearlas mal, simplemente lo referiré a la especificación:
http://www.w3.org/TR/2011/REC-CSS2-20110607/cascade.html#cascade
En resumen: las reglas más específicas anulan las más generales. La especificidad se define en función de la cantidad de ID, clases y nombres de elementos involucrados, así como de si
!important
se utilizó la declaración. Cuando existen varias reglas del mismo "nivel de especificidad", gana la que aparezca la última.fuente
!important
participa directamente en la cascada y no tiene nada que ver con la especificidad. La especificidad está relacionada con los selectores, mientras que!important
se usa con declaraciones de propiedades. (¡Entonces tiene razón al decir que las reglas son complejas!;)Se aplica el estilo más específico:
Si todos los selectores tienen la misma especificidad, se utiliza la declinación más reciente:
En su caso,
body:not([input="button"])
es más específico por lo que se utilizan sus estilos.fuente
El orden sí importa. Se tomará el último valor declarado de ocurrencia múltiple. Por favor vea el mismo que resolví : http://jsfiddle.net/Wtk67/
Si intercambias el orden de
.test{}
, entonces puedes ver que el HTML toma el valor del último declarado en CSSfuente
El último CSS cargado es THE MASTER, que anulará todos los CSS con la misma configuración de CSS
Ejemplo:
reset.css
master.css
La salida para la etiqueta h1 será de tamaño de fuente: 30px;
fuente
.css
se carga en último lugar. ¿Se aplican por orden de carga o por definición?Tratemos de simplificar la regla en cascada con un ejemplo. Las reglas van más específicas al general.
Aquí está el código CSS y HTML;
Aquí está el estilo CSS
Aquí está el resultado. No importa el orden de los archivos de estilo o la declaración de estilo, se
id="important"
aplica al final (tenga en cuenta elclass="deadline"
último declarado pero no tiene ningún efecto).El
<article>
elemento contiene un<aside>
elemento, sin embargo, el último estilo declarado tendrá efecto, en este casoarticle h2 { .. }
en el tercer elemento h2.Aquí está el resultado en IE11: (No hay suficientes derechos para publicar la imagen) DarkBlue: Houston Chronicle News, DarkGreen: Últimos desarrollos en su ciudad, Purple: Sección de publicidad local de Houston, Black: Siguiente sección
fuente
Depende tanto del orden de carga como de la especificidad de las reglas reales aplicadas a cada estilo. Dado el contexto de su pregunta, primero desea cargar su reinicio general, luego la página específica. Luego, si aún no está viendo el efecto deseado, debe analizar la especificidad de los selectores involucrados, como ya lo han señalado otros.
fuente
Sí, funciona igual que si estuvieran en una hoja, sin embargo:
¡El orden de carga importa!
En el código anterior, no hay garantía de que
master.css
se cargue despuésstyles.css
. Por lo tanto, simaster.css
se carga rápidamente ystyles.css
tarda un tiempo,styles.css
se convertirá en la segunda hoja de estilo ymaster.css
se sobrescribirá cualquier regla de la misma especificidad .Lo mejor es poner todas sus reglas en una hoja (y minimizar) antes de implementar.
fuente
master.css
y dejando que sestyles.css
cargue por completo. Entonces, dejomaster.css
cargar. El estilo "superpuesto"master.css
aún se aplicaba, y la representación se bloqueó hasta que semaster.css
cargó y se analizó. Nota : probérel=preload
enmaster.css' (no halting) and that apparently alters its _declaration_ order by hoisting it above
styles.css`.La mejor manera es usar las clases tanto como sea posible. Evite los selectores de ID (#) de todos modos. Cuando escribe selectores con solo clases individuales, la herencia CSS es mucho más fácil de seguir.
Actualización: Lea más sobre la especificidad de CSS en este artículo: https://css-tricks.com/specifics-on-css-specificity/
fuente
Sospecho por su pregunta que tiene selecciones duplicadas, un conjunto maestro, que se aplica a todas las páginas, y un conjunto más específico que desea anular los valores maestros para cada página individual. Si ese es el caso, entonces su orden es correcta. El Master se carga primero y las reglas en el archivo posterior tendrán prioridad (si son idénticas o tienen el mismo peso). Hay una descripción muy recomendada de todas las reglas en este sitio web http://vanseodesign.com/css/css-specificity-inheritance-cascaade/ Cuando comencé con el desarrollo front-end, esta página despejó tantas preguntas.
fuente
Es la cascada que define la precedencia de las declaraciones. Puedo recomendar la especificación oficial; esta parte es bien legible.
https://www.w3.org/TR/css-cascade-3/#cascading
Los siguientes tienen un efecto en la ordenación, en orden descendente de prioridad.
Una combinación de origen e importancia:
Transition
declaraciones!important
!important
!important
style
atributoAnimation
declaracionesstyle
atributoSi dos declaraciones tienen el mismo origen e importancia , entra en juego la especificidad, es decir , qué tan claramente se define el elemento, calculando una puntuación.
#x34y
).level
)li
):hover
) excluyendo:not
Por ejemplo, el selector
main li + .red.red:not(:active) p > *
tiene una especificidad de 24.El orden de aparición solo juega un papel si dos definiciones tienen el mismo origen, importancia y especificidad. Las definiciones posteriores preceden a las definiciones anteriores en el documento (incluidas las importaciones).
fuente
Creo que al ejecutar el código, se lee de arriba a abajo, lo que significa que el último enlace CSS anularía los estilos similares en cualquier hoja de estilo que se encuentre encima.
Por ejemplo, si creó dos hojas de estilo
y en ambos, establece el color de fondo del cuerpo en dos colores diferentes: el color del cuerpo en style2.css tendría prioridad.
Puede evitar el problema de prioridad de estilo utilizando
!IMPORTANT
dentro del estilo de clase que le gustaría tener prioridad, o posiblemente reorganizando su<link>
pedido.fuente