Jak pracować z selektorami CSS w Python
Silnik selektorów w Aspose.HTML FOSS dla Python ocenia selektory klas, identyfikatorów, typów, atrybutów i pseudoklas z zachowaniem specyficzności standardów. Ten przewodnik demonstruje dopasowywanie selektorów w ramach kaskady — ten sam silnik, który napędza select() i element_matches() — przy użyciu pip do instalacji.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Krok 2: Zaimportuj wymagane klasy
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetKrok 3: Utwórz element, który pasuje do wielu selektorów
Element posiadający zarówno klasę, jak i identyfikator jest dopasowywany jednocześnie przez selektory .foo, #bar i div:
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)Krok 4: Niech specyficzność decyduje
Dołącz konkurujące reguły — selektor ID (1,0,0) wygrywa nad selektorem klasy (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"))Krok 5: Nadpisz deklaracją inline
Deklaracje inline mają priorytet (1,0,0) na poziomie inline i przeważają reguły autora niezależnie od specyficzności dowolnego selektora:
inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))Typowe problemy i rozwiązania
Selektor, który wygląda poprawnie, nie dopasowuje niczego. Tekst selektora z błędami składni nie przechodzi parsowania — silnik zgłasza błąd zamiast zgadywać; sprawdź ciąg selektora.
:where() zachowuje się inaczej niż :is(). Tak jest zamierzone: :where() wnosi zerową specyficzność, :is() wnosi specyficzność argumentu.
Selektor typu nieoczekiwanie przegrywa. Selektory typu mają najniższą klasę specyficzności (0,0,1); dowolna reguła klasy lub identyfikatora na tym samym elemencie ma wyższy priorytet.
Najczęściej Zadawane Pytania
Czy mogę uruchomić zapytanie selektora bez arkusza stylów?
Tak — select() ocenia selektor bezpośrednio względem drzewa, a element_matches() testuje pojedynczy element.
Jak obliczana jest specyficzność?
specificity() zwraca standardową krotkę (id, class, type) używaną zarówno w zapytaniach, jak i w kaskadzie.
Jakie pseudo-klasy są modelowane?
Formy strukturalne istnieją dla :is(), :where(), :has(), :not() z złożonymi argumentami oraz selektorami strukturalnymi w stylu nth-child.