No, no es malo, pero no siempre puede ser necesario
herramientas como Page Speed de Google y YSlow! referirse a este tipo de selectores como "más cualificados", tal vez ahí es donde está escuchando el "es malo" parte de - reading material
Tomemos por ejemplo p#myid
- un ID siempre debe ser único en una página de todos modos, por lo tanto no no es necesario para calificarlo con el elemento p
.una ID ya tiene el peso más alto cuando se está contando la especificidad, así que de nuevo es totalmente redundante agregar la parte extra para intentar agregar más especificidad.
Sin embargo, con nombres de clase como su ejemplo, a veces puede ser deseable agregar el calificador ya que puede desear que la clase sea reutilizable en diferentes elementos de tipo pero tenga diferentes propiedades dependiendo de si es div
o p
para ejemplo, el "calificativo" entonces hace que el selector de poco más específica
.error {background: red; margin: 5px;}
p.error {margin: 2px;}
el código anterior significa que puede utilizar la clase error
en cualquier elemento y tendrá 5PX márgenes sin embargo si se establece la clase de error sobre un elemento p
el segundo selector está haciendo algo, está superando los márgenes de la primera pero sigue obteniendo el color de fondo
Así que hacen un trabajo, pero con demasiada frecuencia se ve demasiada gente que califica todos sus elementos cuando no es necesario ... por ejemplo, si solo aplica esa clase .error
a un elemento p
entonces no necesitarías el segundo selector.
La regla de oro es hacer que el selector sea único lo más rápido posible comenzando desde el lado derecho del mismo.
'.error' podría ser más rápido que' p.error', pero p.error es más preciso y siempre tendrá mi preferencia. ¿Qué pasa si tienes un 'body> div.error'? Eso coincidirá con '.error' cuando solo quisiste unir' p.error' ... Lo mismo ocurre con las clases html: siempre incluyo 'html' en el selector, porque nunca sabes (?) Qué elementos tienen qué clases en cualquier parte del documento. – Rudie