Curso gratuito de CSS. Regístrate para hacer un seguimiento de tu progreso →

CSS: Prioridad de estilos

Al hablar de cascada, surge la pregunta: "¿Qué sucede si hay reglas iguales para un elemento en diferentes fuentes, pero con valores diferentes?". En este caso, existen reglas que determinan la prioridad de los estilos de diferentes fuentes. La lista de prioridades se ve así:

  • Estilos en el atributo de la etiqueta
  • Estilos en un archivo separado
  • Estilos por defecto que agrega el navegador

Los valores especificados en el atributo style serán más importantes que las propiedades en la etiqueta <style>, y estas serán más importantes que los estilos predeterminados del navegador.

Prioridades de los selectores

Una característica importante de CSS es que los diferentes tipos de selectores tienen diferentes prioridades. Si los estilos se contradicen en diferentes selectores, entra en juego el principio de prioridad.

Veamos un ejemplo. Crearemos un párrafo con la clase red y el identificador blue:

<p id="blue" class="red">Texto con la clase red e identificador blue</p>

Agregaremos estilos contradictorios para la clase, el identificador y la etiqueta:

p {
  color: black;
}

.red {
  color: red;
}

#blue {
  color: blue;
}

¿De qué color será el párrafo? Intenta ejecutar este ejemplo en el editor. Verás que el texto será de color azul. ¿A qué se debe esto?

Los selectores también tienen prioridades. Convencionalmente, se pueden ordenar los selectores en el siguiente orden de prioridad:

  1. Selector por identificador (#blue)
  2. Selector por clase (.red)
  3. Selector por etiqueta (p)

Donde 1 es la prioridad más alta y 3 es la más baja.

Según estas reglas, se puede entender que las propiedades especificadas en el selector por identificador tendrán mayor prioridad que los estilos en el selector por etiqueta y clase. Por lo tanto, el párrafo en el ejemplo anterior era azul.

Es fácil de recordar si los selectores son pequeños, pero estos pueden ser más complejos. Un selector puede ser una combinación de clases, etiquetas, etc. Por ejemplo:

<p class="paragraph color-primary">Párrafo</p>
.paragraph.color-primary {
  color: blue;
}

Aquí se utilizó un selector con dos clases a la vez. Esto significa que los estilos se aplicarán solo a los elementos que tengan ambas clases. Esta separación ayuda a los desarrolladores a establecer estilos de manera precisa para elementos similares. Por ejemplo:

<p class="paragraph color-primary">Párrafo</p>
<p class="paragraph">Párrafo</p>
<p class="paragraph color-primary">Párrafo</p>
.paragraph {
  color: red;
}

.paragraph.color-primary {
  color: blue;
}

En este ejemplo, todos los párrafos con la clase paragraph tendrán el color del texto en rojo, pero si también se establece la clase color-primary, el color será azul. ¿Por qué sucede esto? Estos selectores también tienen sus propias prioridades. En selectores complejos, se cuenta la cantidad de ocurrencias de los diferentes selectores y se calcula el peso total.

Para determinar la prioridad, se pueden utilizar las siguientes reglas, donde a cada selector se le asigna su "peso":

  • Selector por etiqueta: 1
  • Selector por clase: 10
  • Selector por ID: 100
  • Estilo en el atributo de la etiqueta: 1000

Para saber qué selector tendrá mayor peso, es necesario sumar todos los valores obtenidos. Por ejemplo:

  • El selector .paragraph consta de una clase, por lo que su peso es 10.
  • El selector .paragraph.color-primary consta de dos clases. Su peso es 20.

Por lo tanto, las propiedades del selector .paragraph.color-primary tendrán mayor prioridad que las del selector .paragraph.

La lista anterior para calcular los "pesos" o, como también se dice, la "especificidad de las propiedades" no es absolutamente completa, pero este método es suficiente en las primeras etapas de aprendizaje de CSS. Con la práctica, aprenderás tú mismo a determinar la prioridad de los selectores.

Tarea

Agrega un párrafo al editor con la clase border y el id no-border. Establece las siguientes reglas:

  • Para la clase border, establece un borde sólido de cualquier color con un grosor de 1px. Puedes hacerlo así: border: 1px solid #000;
  • Para el id no-border, elimina el borde. Utiliza el valor none para la regla border-style

Primero, especifica los estilos para el selector .border, luego para el selector #no-border.

Escribe los estilos dentro de la etiqueta <style>

¿El ejercicio no pasa la prueba, qué debo hacer? 😶

Si te quedaste atascado, es el momento perfecto para hacer una pregunta en las "Discusiones".
* Asegúrate de incluir la salida de las pruebas. Sin ella, es casi imposible entender qué está mal, incluso si muestras tu código. Los programadores tienen dificultades para ejecutar el código en su mente, pero casi siempre es posible entender a dónde mirar a partir del error que recibiste.

Mi código funciona en mi entorno, pero no aquí 🤨

Las pruebas están diseñadas de manera que verifican la solución de diferentes maneras y con diferentes datos. A menudo, una solución funciona con ciertos datos de entrada pero no con otros. Para entender este punto, revisa la pestaña "Pruebas" y presta atención a los mensajes de error, que suelen contener pistas.

Mi código es diferente a la solución del profesor 🤔

Esto es normal 🙆. En programación, una tarea puede tener muchas soluciones diferentes. Si tu código pasa la prueba, cumple con los requisitos de la tarea.

En raras ocasiones, la solución puede estar ajustada para pasar las pruebas, pero esto suele ser evidente.

Leí la lección, pero no entendí nada 🙄

Crear materiales de aprendizaje comprensibles para todos es bastante difícil. Hacemos nuestro mejor esfuerzo, pero siempre hay margen para mejorar. Si encuentras material que no entiendes, describe el problema en las "Discusiones". Es ideal si puedes formular los aspectos que no entiendes en forma de preguntas. Por lo general, necesitamos unos días para hacer mejoras.

Por cierto, tú también puedes contribuir a mejorar los cursos: en la parte inferior hay un enlace al código fuente de las lecciones, que se puede modificar directamente en el navegador.


¿Encontraste un error? ¿Quieres añadir algo? Las solicitudes de extracción son bienvenidas. https://codica.la/errores
Si te encuentras con dificultades y no sabes qué hacer, pregunta en nuestra gran y amigable comunidad