Cum să lucrați cu selectorii CSS în Python
Motorul de selectori din Aspose.HTML FOSS pentru Python evaluează selectorii de clasă, id, tip, atribut și pseudo-clasă cu specificitatea standard. Acest ghid demonstrează potrivirea selectorilor prin cascadă — același motor care alimentează select() și element_matches() — folosind pip pentru instalare.
Ghid pas cu pas
Pasul 1: Instalați pachetul
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Pasul 2: Importați clasele necesare
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetPasul 3: Creați un element care să se potrivească cu mai mulți selectori
Un element care are atât o clasă, cât și un id este potrivit de selectorii .foo, #bar și div simultan:
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)Pasul 4: Lăsați Specificitatea să Decida
Atașați regulile concurente — selectorul ID-ului (1,0,0) învinge selectorul de clasă (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"))Pasul 5: Suprascrie cu o Declarație Inline
Declarațiile inline au prioritate (1,0,0) la nivel inline și înving regulile autorului indiferent de specificitatea selectorului:
inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))Probleme Comune și Soluții
Un selector care pare corect nu se potrivește cu nimic. Textul selectorului cu erori de sintaxă nu reușește parsarea — motorul îl raportează în loc să ghicească; verificați șirul selectorului.
:where() se comportă diferit față de :is(). Este așa prin proiectare: :where() contribuie cu zero specificitate, :is() contribuie cu cea a argumentului său.
Un selector de tip pierde neașteptat. Selectoarele de tip au cea mai mică clasă de specificitate (0,0,1); orice regulă de clasă sau id pe același element le depășește.
Întrebări frecvente
Pot rula o interogare de selector fără o foaie de stil?
Da — select() evaluează un selector direct pe un arbore, iar element_matches() testează un singur element.
Cum se calculează specificitatea?
specificity() returnează tupla standard (id, class, type) folosită atât de interogări, cât și de cascade.
Ce pseudo-clase sunt modelate?
Forme structurate există pentru :is(), :where(), :has(), :not() cu argumente complexe și selectori structurali în stil nth-child.