Come lavorare con i selettori CSS in Python
Il motore di selezione in Aspose.HTML FOSS per Python valuta i selettori di classe, id, tipo, attributo e pseudo-classe con la specificità degli standard. Questa guida dimostra il matching dei selettori attraverso la cascata — lo stesso motore che alimenta select() e element_matches() — utilizzando pip per l’installazione.
Guida passo passo
Passo 1: Installa il pacchetto
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: Importa le classi necessarie
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetPasso 3: Crea un elemento che corrisponde a più selettori
Un elemento che possiede sia una classe sia un id viene corrisposto dai selettori .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)Passo 4: Lascia che la Specificità decida
Allega regole concorrenti — il selettore ID (1,0,0) supera il selettore di 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"))Passo 5: Sovrascrivi con una Inline Declaration
Le dichiarazioni inline hanno priorità (1,0,0) a livello inline e superano le regole dell’autore di qualsiasi specificità del selettore:
inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))Problemi comuni e soluzioni
Un selettore che sembra corretto non corrisponde a nulla. Il testo del selettore con errori di sintassi non riesce a essere analizzato — il motore lo segnala invece di indovinare; controlla la stringa del selettore.
:where() si comporta diversamente da :is(). È così di proposito: :where() contribuisce con specificità zero, :is() contribuisce a quella del suo argomento.
Un selettore di tipo perde inaspettatamente. I selettori di tipo hanno la classe di specificità più bassa (0,0,1); qualsiasi regola di classe o ID sullo stesso elemento le supera.
Domande frequenti
Posso eseguire una query di selettore senza un foglio di stile?
Sì — select() valuta un selettore direttamente su un albero, e element_matches() verifica un singolo elemento.
Come viene calcolata la specificità?
specificity() restituisce la tupla standard (id, class, type) utilizzata sia dalle query che dalla cascata.
Quali pseudo-classi sono modellate?
Esistono forme strutturate per :is(), :where(), :has(), :not() con argomenti complessi e selettori strutturali in stile nth-child.