Jak pracować z selektorami CSS w Python

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 CSSStyleSheet

Krok 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.

Zobacz także

 Polski