Como trabalhar com CSS Seletores no Python
O mecanismo de seletores em Aspose.HTML FOSS para Python avalia seletores de classe, id, tipo, atributo e pseudo-classe com especificidade de padrões. Este guia demonstra a correspondência de seletores através da cascata — o mesmo mecanismo que alimenta select() e element_matches() — usando pip para instalação.
Guia passo a passo
Passo 1: Instale o pacote
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Passo 2: Importe as classes necessárias
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetPasso 3: Crie um elemento que corresponda a múltiplos seletores
Um elemento que possui tanto uma classe quanto um id é correspondido pelos seletores .foo, #bar e div simultaneamente:
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)Etapa 4: Deixe a especificidade decidir
Anexe regras concorrentes — o seletor de ID (1,0,0) supera o seletor de classe (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"))Etapa 5: Substitua com uma declaração inline
Declarações inline possuem prioridade de nível inline (1,0,0) e superam as regras do autor de qualquer especificidade de seletor:
inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))Problemas comuns e correções
Um seletor que parece correto não corresponde a nada. Texto de seletor com erros de sintaxe falha ao analisar — o motor o relata em vez de adivinhar; verifique a string do seletor.
:where() comporta-se de forma diferente de :is(). Isso é intencional: :where() contribui com especificidade zero, :is() contribui com a do seu argumento.
Um seletor de tipo perde inesperadamente. Seletores de tipo têm a classe de especificidade mais baixa (0,0,1); qualquer regra de classe ou id no mesmo elemento as supera.
Perguntas Frequentes
Posso executar uma consulta de seletor sem uma folha de estilos?
Sim — select() avalia um seletor diretamente contra uma árvore, e element_matches() testa um único elemento.
Como a especificidade é calculada?
specificity() devolve a tupla padrão (id, class, type) usada tanto por consultas quanto pela cascata.
Quais pseudo-classes são modeladas?
Formas estruturadas existem para :is(), :where(), :has(), :not() com argumentos complexos e seletores estruturais no estilo nth-child.