Jak pracovat s CSS selektory v Python

Jak pracovat s CSS selektory v Python

Selektrovací engine v Aspose.HTML FOSS pro Python vyhodnocuje třídu, id, typ, atribut a pseudo-třídu selektory s konkrétností dle standardů. Tento průvodce demonstruje shodu selektorů pomocí kaskády — stejný engine, který pohání select() a element_matches() — s použitím pip pro instalaci.

Průvodce krok po kroku

Krok 1: Nainstalujte balíček

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: Importujte požadované třídy

from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet

Krok 3: Vytvořte prvek, který odpovídá více selektorům

Prvek, který má jak třídu, tak i id, je současně vybrán pomocí selektorů .foo, #bar a div:

doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)

Krok 4: Nechte rozhodnout specifitu

Připojte soupeřící pravidla — ID selektor (1,0,0) přebije třídu (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: Přepište pomocí inline deklarace

Inline deklarace mají (1,0,0) prioritu na úrovni inline a přebijí autorova pravidla jakékoli specifity selektoru:

inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))

Běžné problémy a opravy

Selektor, který vypadá správně, neodpovídá ničemu. Text selektoru se syntaktickými chybami selže při parsování — engine to nahlásí místo hádání; zkontrolujte řetězec selektoru.

:where() se chová jinak než :is(). Je to záměrně: :where() přispívá nulovou specificitou, :is() přispívá specificitou svého argumentu.

Typový selektor neočekávaně prohrává. Typové selektory mají nejnižší třídu specificity (0,0,1); jakékoli pravidlo třídy nebo id na stejném elementu je předčí.

Často kladené otázky

Mohu spustit dotaz na selektor bez stylového listu?

Ano — select() vyhodnocuje selektor přímo proti stromu a element_matches() testuje jednotlivý element.

Jak se počítá specifikace?

specificity() vrací standardní n-tici (id, class, type) používanou jak v dotazech, tak v kaskádě.

Které pseudo-třídy jsou modelovány?

Strukturované formuláře existují pro :is(), :where(), :has(), :not() s komplexními argumenty a selektory struktury ve stylu nth-child.

Viz také:

 Čeština