Cómo trabajar con selectores CSS en Python

Cómo trabajar con selectores CSS en Python

El motor de selectores en Aspose.HTML FOSS para Python evalúa selectores de clase, id, tipo, atributo y pseudo-clase con la especificidad de los estándares. Esta guía demuestra la coincidencia de selectores a través de la cascada — el mismo motor que impulsa select() y element_matches() — usando pip para la instalación.

Guía paso a paso

Paso 1: Instalar el paquete

git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .

Paso 2: Importar clases requeridas

from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet

Paso 3: Crear un elemento que coincida con múltiples selectores

Un elemento que lleva tanto una clase como un id es coincidido por los selectores .foo, #bar y div simultáneamente:

doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)

Paso 4: Deja que la especificidad decida

Adjunta reglas en competencia — la especificidad del selector ID (1,0,0) supera la del selector de clase (0,1,0):

sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: blue }")
doc.attach_style_sheet(sheet)
print(el.get_computed_style().get_property_value("color"))

Paso 5: Sobrescribir con una declaración en línea

Las declaraciones en línea tienen prioridad a nivel inline (1,0,0) y superan las reglas del autor de cualquier especificidad de selector:

inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))

Problemas comunes y soluciones

Un selector que parece correcto no coincide con nada. El texto del selector con errores de sintaxis falla al analizarse — el motor lo informa en lugar de adivinar; verifica la cadena del selector.

:where() se comporta de manera diferente a :is(). Eso es por diseño: :where() contribuye con una especificidad cero, :is() contribuye con la de su argumento.

Un selector de tipo pierde inesperadamente. Los selectores de tipo tienen la clase de especificidad más baja (0,0,1); cualquier regla de clase o id en el mismo elemento los supera.

Preguntas frecuentes

¿Puedo ejecutar una consulta de selector sin una hoja de estilo?

Sí — select() evalúa un selector contra un árbol directamente, y element_matches() prueba un solo elemento.

¿Cómo se calcula la especificidad?

specificity() devuelve la tupla estándar (id, class, type) utilizada tanto por las consultas como por la cascada.

¿Qué pseudo-clases están modeladas?

Existen formularios estructurados para :is(), :where(), :has(), :not() con argumentos complejos y selectores estructurales al estilo nth-child.

Ver también

 Español