Cách làm việc với CSSOM trong Python
Aspose.HTML FOSS cho Python triển khai mô hình đối tượng CSS: các stylesheet được phân tích thành các đối tượng quy tắc sống, gắn vào tài liệu, và được giải quyết qua một cascade thực tế. Hướng dẫn này tạo kiểu cho một phần tử và đọc kết quả đã tính toán, sử dụng pip để cài đặt.
Hướng dẫn từng bước
Bước 1: Cài đặt gói
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Bước 2: Nhập các lớp cần thiết
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetBước 3: Tạo một phần tử có kiểu
Tạo một tài liệu và một phần tử với lớp và id — cả hai sẽ tham gia vào việc khớp selector:
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)Bước 4: Phân tích và Gắn Stylesheet
replace_sync() phân tích văn bản stylesheet; attach_style_sheet() đăng ký nó với tài liệu:
sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: blue }")
doc.attach_style_sheet(sheet)Bước 5: Đọc Computed Style
Bộ chọn ID (độ đặc thù 1,0,0) ưu tiên hơn bộ chọn lớp (0,1,0), vì vậy màu xanh thắng:
style = el.get_computed_style()
print(style.get_property_value("color"))Các vấn đề thường gặp và cách khắc phục
Giá trị tính toán bỏ qua bảng kiểu của tôi. Bảng kiểu phải được đính kèm qua Document.attach_style_sheet() before get_computed_style() được gọi là.
Kiểu nội tuyến thua trước quy tắc trong bảng kiểu. Quy tắc của tác giả được đánh dấu !important ưu tiên hơn các khai báo nội tuyến không quan trọng; kiểm tra mức độ ưu tiên bằng get_property_priority().
Hai quy tắc có độ đặc thù bằng nhau tạo ra một kết quả bất ngờ. Các quy tắc sau thắng trong trường hợp độ đặc thù bằng nhau — thứ tự quy tắc trong bảng kiểu có ảnh hưởng.
Câu hỏi thường gặp
Làm thế nào để đặt kiểu nội tuyến một cách lập trình?
Thông qua khai báo style của phần tử: gán nó vào một biến và gọi set_property() trên đó.
Đối tượng nào mà get_computed_style trả về?
Một ComputedStyleDeclaration; đọc các giá trị bằng get_property_value().
Các quy tắc media, keyframes và font-face có được mô hình hoá không?
Có — các trang tính đã phân tích chứa các quy tắc đã định kiểu bao gồm CSSMediaRule, CSSKeyframesRule và CSSFontFaceRule trong một CSSRuleList.