تقنية

حدود SVG عند التكبير: حافظ على سمك الخط باستخدام vector-effect

مستطيلان متساويان، وحدان مختلفا السمك.
رسم توضيحي بقيم التجربة. [3]

كبّر شكل SVG واحتفظ بحدوده الرفيعة. [3]

تسمح non-scaling-stroke بتحجيم الشكل دون زيادة سمك حدوده مع تحويل العنصر. [3]

الخلاصة السريعة

  • تضاعف scale(2) الأبعاد؛ تثبيت الحد لا يلغي التحويل. [2] [3]
  • ضع vector-effect="non-scaling-stroke" على الشكل ذي الحد الذي تريد تثبيت سمكه. [1]
  • تساوى الشكلان؛ بلغ الحد العادي 8px والثابت 4px في تجربتنا. [3]
  • قارن التحويل نفسه مع التأثير وبدونه، وافحص أي قيمة CSS قد تتقدم على السمة. [1]

افصل الشكل عن حدوده

تضاعف scale(2) الأبعاد؛ تثبيت الحد لا يلغي التحويل. [2] [3]

نبدأ بمستطيل عرضه 60 وارتفاعه 50. التحويل في المثال يجعل أبعاده الهندسية المعروضة 120×100؛ ينطبق الحساب على المستطيلين لأن العامل نفسه مستخدم فيهما. هذه الأبعاد تصف هندسة المستطيل، لا كامل مساحة الطلاء حول حافته. [2]

تقبل scale عاملين إذا أردت تحجيمًا مختلفًا أفقيًا وعموديًا؛ وعند كتابة عامل واحد يستخدم للاتجاهين. نلتزم هنا بتحجيم متساوٍ كي تكون المقارنة سهلة القراءة. [2]

أضف التأثير إلى المستطيل الثاني

ضع vector-effect="non-scaling-stroke" على الشكل ذي الحد الذي تريد تثبيت سمكه. [1]

انسخ SVG التالي إلى صفحة HTML محلية مستقلة. المستطيل الأيسر هو الضابط العادي، والأيمن يحمل التأثير. نحافظ على اللون وسمك الحد المعلن، ونغيّر موضع المستطيل حتى لا يتراكبا. [1] [2]

القيمة الافتراضية للتأثير هي none. أما non-scaling-stroke فتغير طريقة رسم الحد، وليست طلبًا لتثبيت حجم الشكل نفسه. [1]

مرّر الشيفرة أفقيًا عند الحاجة.

<svg width="420" height="180" viewBox="0 0 420 180"
     xmlns="http://www.w3.org/2000/svg">
  <rect id="normal" x="20" y="20" width="60" height="50"
        fill="none" stroke="black" stroke-width="4"
        transform="scale(2)" />
  <rect id="fixed" x="120" y="20" width="60" height="50"
        fill="none" stroke="black" stroke-width="4"
        transform="scale(2)"
        vector-effect="non-scaling-stroke" />
</svg>

اقرأ الفرق في الطلاء

تساوى الشكلان؛ بلغ الحد العادي 8px والثابت 4px في تجربتنا. [3]

قسنا الحد العلوي بعيدًا عن الزوايا في Edge؛ النافذة 600×300 وكثافة بكسل الجهاز 1، وأبعاد SVG ثابتة. [3]

تحسب المواصفة الحد في إحداثيات منفذ SVG المضيف بعد تحويل المسار، ثم تعيده؛ يبقى الشكل محوّلًا. [3]

غيّر متغيرًا واحدًا عند الفحص

قارن التحويل نفسه مع التأثير وبدونه، وافحص أي قيمة CSS قد تتقدم على السمة. [1]

احذف سمة vector-effect من المستطيل الثاني، ثم أعدها. في الاختبار عاد حده إلى السمك العادي عند الحذف. إذا لم يظهر الفرق في صفحتك، افحص الخاصية المحسوبة؛ قيمة vector-effect في CSS تتقدم على سمة العرض عند تحديدهما معًا. [1]

الأرقام لتحويل العنصر بإعداد ثابت؛ لم نختبر تكبير المتصفح أو النظام، ولا نضمنها لهما. [3]

المصادر ومتابعة القراءة

  1. MDN: سمة vector-effect (يفتح في نافذة جديدة)developer.mozilla.org
  2. MDN: تحويلات SVG ودالة scale (يفتح في نافذة جديدة)developer.mozilla.org
  3. W3C: حساب الحد غير المتحجم (يفتح في نافذة جديدة)w3.org

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.