مقدمة
تتوقف معظم أدوات HTML عند الشجرة. Aspose.HTML FOSS لـ Python يذهب خطوةً أخرى: فهو يطبق نموذج الكائنات CSS، لذا فإن ورقة الأنماط ليست مجرد نص تحمله — إنها تشارك في سلسلة الانحدار الحقيقية، ويمكن لكل عنصر أن يخبرك بالنمط الذي ينتهي به فعليًا.
يغطي هذا الغوص العميق طبقة CSSOM: تحليل أوراق الأنماط باستخدام CSSStyleSheet، تعديل التصريحات عبر CSSStyleDeclaration، وقراءة النتائج مرة أخرى باستخدام Element.get_computed_style() — بما في ذلك كيف يتفاعل التحديد، !important، والوراثة. المكتبة متوفرة على PyPI كـ aspose-html-foss، مرخصة تحت MIT، وهي Python صافية (3.10+)، مما يجعلها عملية للتحقق من الأنماط في مجموعات الاختبار والخدمات حيث يكون المتصفح بدون رأس مبالغًا فيه.
الميزات الرئيسية
تحليل وإرفاق أوراق الأنماط
CSSStyleSheet.replace_sync() يحلل نص ورقة الأنماط في موضعه؛ Document.attach_style_sheet() يسجل الورقة مع المستند بحيث تشارك في السلسلة. يمكن أيضًا بناء الأوراق قاعدةً بقاعدة باستخدام 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)
التحديد يقرر الفائز
عند استهداف عدة قواعد لنفس العنصر، تتبع القيمة المحسوبة أولوية المحدد. يعلو محدد الـ ID (specificity 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.