مقدمه
اکثریت ابزارهای HTML فقط تا درخت متوقف میشوند. Aspose.HTML FOSS برای Python یک لایه دیگر میرود: آن مدل شیء CSS را پیادهسازی میکند، بنابراین یک stylesheet فقط متن سادهای نیست که همراه خود حمل کنید — در یک cascade واقعی شرکت میکند، و هر عنصر میتواند به شما بگوید سبک واقعی که در نهایت دارد چیست.
این کاوش عمیق لایه CSSOM را پوشش میدهد: تجزیه stylesheetها با CSSStyleSheet، ویرایش اعلانها از طریق CSSStyleDeclaration، و خواندن نتایج با Element.get_computed_style() — شامل نحوه تعامل specificity، !important و inheritance. کتابخانه بر روی PyPI به عنوان aspose-html-foss موجود است، تحت مجوز MIT، و کاملاً Python (3.10+) میباشد، که آن را برای تأیید سبک در مجموعههای تست و سرویسهایی که مرورگر بدون سر نیاز به آن نیست، عملی میسازد.
ویژگیهای کلیدی
تجزیه و پیوست کردن Stylesheets
CSSStyleSheet.replace_sync() متن stylesheet را در محل تجزیه میکند؛ Document.attach_style_sheet() sheet را با سند ثبت میکند تا در cascade شرکت کند. Sheets همچنین میتوانند بهصورت rule-by-rule با insert_rule()، add_rule() و remove_rule() ساخته شوند، یا از متن با from_text() ایجاد شوند:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red }")
doc.attach_style_sheet(sheet)
Specificity برنده را تعیین میکند
زمانی که چندین قانون به یک عنصر هدف میگیرند، مقدار محاسبهشده بر اساس خاصیتسازندهٔ انتخابگر (selector specificity) تعیین میشود. یک انتخابگر ID (خاصیتسازنده 1,0,0) بر یک انتخابگر کلاس (0,1,0) برتری دارد:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)
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"))
اعلانهای درونخطی و CSSStyleDeclaration
ویژگی style هر عنصر یک CSSStyleDeclaration زنده است. اعلانها با set_property() ویرایش میشوند و با get_property_value()، get_property_priority() و item() بررسی میشوند. اعلانهای درونخطی خاصیتسازندهٔ (1,0,0) دارند، بنابراین بر قوانین نوع و کلاس از شیوهنامههای نویسنده پیروز میشوند:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
اهمیت بر خاصیتسازنده برتری دارد
!important نتیجهٔ معمول را وارونه میکند: یک قانون نویسنده که با !important علامتگذاری شده است، بر یک اعلان درونخطی غیرمهم، صرفنظر از خاصیتسازنده، پیروز میشود. اولویتها همچنین میتوانند بهصورت برنامهنویسی با set_property_priority() تنظیم شوند:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red !important }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
ارثبری و کلیدواژه inherit
ویژگیهای قابل ارث مانند color از والد به فرزند جریان مییابند مگر اینکه فرزند مقدار محلی خود را داشته باشد — یک قانون محلی همیشه یک قانون ارثبرده را نادیده میگیرد. کلیدواژهٔ صریح inherit مقدار محاسبهشدهٔ والد را کپی میکند، و در عنصری ریشهای که والد ندارد، به مقدار اولیهٔ ویژگی بازمیگردد:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
inline = el.style
inline.set_property("color", "inherit")
print(el.get_computed_style().get_property_value("color"))
شروع سریع
نصب از PyPI:
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .حل یک تعارض سهگانه — قانون کلاس در مقابل قانون شناسه در مقابل اعلان درونخطی:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: green }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
منبع باز و مجوزدهی
Aspose.HTML FOSS برای Python تحت مجوز MIT توزیع میشود — استفاده تجاری، تغییر و توزیع مجدد مجاز است. منبع در GitHub قرار دارد و نسخهها به PyPI به عنوان aspose-html-foss تحویل داده میشوند.