Як працювати з CSSOM у Python
Aspose.HTML FOSS для Python реалізує модель об’єктів CSS: таблиці стилів парсяться в живі об’єкти правил, приєднуються до документів і розв’язуються через реальний каскад. Цей посібник застосовує стиль до елемента та читає обчислений результат, використовуючи 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 — обидва будуть брати участь у збігу селекторів:
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)Крок 4: Розбір та підключення таблиці стилів
replace_sync() розбирає текст таблиці стилів; attach_style_sheet() реєструє її в документі:
sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: blue }")
doc.attach_style_sheet(sheet)Крок 5: Зчитати обчислений стиль
Селектор ID (специфічність 1,0,0) переважає селектор класу (0,1,0), тому перевагу має синій:
style = el.get_computed_style()
print(style.get_property_value("color"))Поширені проблеми та їх виправлення
Обчислене значення ігнорує мою таблицю стилів. Таблицю треба прикріпити за допомогою Document.attach_style_sheet() before get_computed_style() називається.
Вбудований стиль програє правилу таблиці стилів. Правила автора, позначені !important перевищують неважливі вбудовані оголошення; перевірте пріоритети за допомогою get_property_priority().
Два правила з однаковою специфічністю дають несподіваного переможця. Пізніші правила виграють у випадках рівної специфічності — порядок правил у таблиці важливий.
Поширені запитання
Як програмно задати вбудовані стилі?
Через декларацію style елемента: присвойте її змінній і викличте set_property() на ній.
Який об’єкт повертає get_computed_style?
Об’єкт ComputedStyleDeclaration; читаєте значення за допомогою get_property_value().
Чи моделюються правила media, keyframes та font-face?
Так — розпарсені листи містять типізовані правила, включаючи CSSMediaRule, CSSKeyframesRule і CSSFontFaceRule у CSSRuleList.