Problema
- Al dar estilo con CSS, a veces ocurren conflictos y se termina aplicando un estilo no deseado.
- Estos conflictos suelen deberse a bibliotecas de UI, widgets de terceros o código CSS administrado por otros equipos, y en esos casos muchas veces no se puede modificar el CSS libremente.
- En particular, cuando hay conflictos con CSS proveniente de una biblioteca de UI o de terceros, también puede ser difícil agregar clases o IDs adicionales al HTML.
- Además, si el código CSS que causa el conflicto está escrito de forma muy específica, puede que ni siquiera sea posible hacerlo más específico para aumentar la prioridad de mi CSS.
- En este punto muchos desarrolladores recurren fácilmente a
!important, pero no es una práctica recomendada.
Solución
- Basta con repetir el selector.
- Por ejemplo,
.checkbox__icon.checkbox__icon tiene mayor prioridad que un solo .checkbox__icon.
- Aunque este método pueda parecer un hack de CSS, en la especificación de CSS Selectors Level 4 se indica explícitamente: "Repeated occurrences of the same simple selector are allowed and do increase specificity.(Se permiten las apariciones repetidas del mismo selector simple y sí aumentan la especificidad.)".
7 comentarios
Ahora que CSS Cascade Layers (
@layer) ya es compatible con todos los navegadores principales, parece que ya no será necesario depender de este tipo de hacks.https://developer.mozilla.org/en-US/docs/Web/CSS/@layer
https://caniuse.com/css-cascade-layers
Oh, entonces así es como se sobrescribe el estilo usando
&&en styled-components, ¿no?Baja el post, estudiante.
Se siente como magia negra jajaja
Ahora veremos código como este.
.checkbox__icon.checkbox__icon.checkbox__icon.checkbox__icon.checkbox__icon.checkbox__icon.checkbox__icon.checkbox__icon.checkbox__icon.checkbox__icon
Oh, no sabía esto...
Dependiendo del caso, quizá incluso se podría crear y usar un preprocesador que repita el selector varias veces.
Oh, no conocía ese método.