Як працювати з CSS селекторами у Python

Як працювати з CSS селекторами у Python

Селекторний движок у Aspose.HTML FOSS для Python оцінює селектори класу, id, типу, атрибуту та псевдокласу з урахуванням специфічності за стандартами. Цей посібник демонструє відповідність селекторів через каскад — той самий движок, який живить select() та element_matches() — використовуючи pip для встановлення.

Покроковий посібник

Крок 1: Встановіть пакет

git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .

Крок 2: Імпортуйте необхідні класи

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

Крок 3: Створіть елемент, який відповідає кільком селекторам

Елемент, який має одночасно клас і id, збігається з селекторами .foo, #bar та div одночасно:

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

Крок 4: Дайте специфічності вирішити

Прикріпіть суперечливі правила — селектор ID (1,0,0) переважає селектор класу (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"))

Крок 5: Перезаписати за допомогою Inline-оголошення

Inline-оголошення мають пріоритет (1,0,0) на рівні inline і переважають правила автора будь-якої специфічності селектора:

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

Поширені проблеми та виправлення

Селектор, який виглядає правильним, нічого не збігається. Текст селектора з синтаксичними помилками не проходить парсинг — движок повідомляє про це, а не вгадує; перевірте рядок селектора.

:where() поводиться інакше, ніж :is(). Так задумано: :where() додає нульову специфічність, :is() додає специфічність його аргументу.

Типовий селектор неочікувано програє. Типові селектори мають найнижчий клас специфічності (0,0,1); будь-яке правило класу або id на тому ж елементі має вищий пріоритет.

Поширені запитання

Чи можу я виконати запит селектора без таблиці стилів?

Так — select() оцінює селектор безпосередньо проти дерева, а element_matches() тестує окремий елемент.

Як обчислюється специфічність?

specificity() повертає стандартний кортеж (id, class, type), який використовується як у запитах, так і в каскаді.

Які псевдокласи змодельовані?

Для :is(), :where(), :has() та :not() існують структуровані форми зі складними аргументами та селекторами структури в стилі nth-child.

Дивіться також

 Українська