اذهب إلى المحتوى

البحث في الموقع

المحتوى عن 'تنسيق'.

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المحتوى


التصنيفات

  • الإدارة والقيادة
  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • السلوك التنظيمي في المؤسسات
  • عالم الأعمال
  • التجارة والتجارة الإلكترونية
  • نصائح وإرشادات
  • مقالات ريادة أعمال عامة

التصنيفات

  • مقالات برمجة عامة
  • مقالات برمجة متقدمة
  • PHP
    • Laravel
    • ووردبريس
  • جافاسكربت
    • لغة TypeScript
    • Node.js
    • React
    • Vue.js
    • Angular
    • jQuery
    • Cordova
  • HTML
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • لغة C#‎
    • ‎.NET
    • منصة Xamarin
  • لغة C++‎
  • لغة C
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • لغة Rust
  • برمجة أندرويد
  • لغة R
  • الذكاء الاصطناعي
  • صناعة الألعاب
  • سير العمل
    • Git
  • الأنظمة والأنظمة المدمجة

التصنيفات

  • تصميم تجربة المستخدم UX
  • تصميم واجهة المستخدم UI
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب GIMP
    • كريتا Krita
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • مقالات DevOps عامة
  • خوادم
    • الويب HTTP
    • البريد الإلكتروني
    • قواعد البيانات
    • DNS
    • Samba
  • الحوسبة السحابية
    • Docker
  • إدارة الإعدادات والنشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
    • ريدهات (Red Hat)
  • خواديم ويندوز
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • شبكات
    • سيسكو (Cisco)

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح
  • مبادئ علم التسويق

التصنيفات

  • مقالات عمل حر عامة
  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • العمل الحر المهني
    • العمل بالترجمة
    • العمل كمساعد افتراضي
    • العمل بكتابة المحتوى

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
    • بريستاشوب
    • أوبن كارت
    • دروبال
  • الترجمة بمساعدة الحاسوب
    • omegaT
    • memoQ
    • Trados
    • Memsource
  • برامج تخطيط موارد المؤسسات ERP
    • تطبيقات أودو odoo
  • أنظمة تشغيل الحواسيب والهواتف
    • ويندوز
    • لينكس
  • مقالات عامة

التصنيفات

  • آخر التحديثات

أسئلة وأجوبة

  • الأقسام
    • أسئلة البرمجة
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات

التصنيفات

  • كتب ريادة الأعمال
  • كتب العمل الحر
  • كتب تسويق ومبيعات
  • كتب برمجة
  • كتب تصميم
  • كتب DevOps

ابحث في

ابحث عن


تاريخ الإنشاء

  • بداية

    نهاية


آخر تحديث

  • بداية

    نهاية


رشح النتائج حسب

تاريخ الانضمام

  • بداية

    نهاية


المجموعة


النبذة الشخصية

  1. غالبًا ما تشكّل الأرقام الجزء الأعظم والأهم من جداول بيانات اكسل. وهي تختلف بأنواعها، صيغها، وأطوالها. وعلى غرار الخلايا التي يمكن تنسيقها بعدة أنماط، يمكن تنسيق محتويات الخلية، سواء كانت نصوص أو أرقام. ما سنغطيه في هذا المقال هو تنسيق الأرقام، ونقصد بالتنسيق اختيار الصيغة المناسبة لعرض الرقم بعد إدخاله. يوفّر اكسل مجموعة خيارات لصيغ الأرقام، كالعملات، الوقت، التاريخ، الأرقام عشرية، أو مجرّد أرقام اعتيادية. يجب أن تأخذ في الاعتبار أن تغيير تنسيق الرقم سيؤثر على مظهر الرقم فقط، ولا يؤثّر على قيمة الرقم التي يخزّنها اكسل. على سبيل المثال؛ لنفرض أنّك قمت بإدخال الرقمين 0.6666667 و 0.3333333 في جدول بيانات اكسل وتريد جمعها بعملية الجمع البسيطة. لكن قبل ذلك قمت بتغيير صيغة الرقمين لإظهار مرتبة عشرية واحدة، أي بالشكل التالي: 0.6 و 0.3. أي شخص يعرف بالعمليات الحسابية الأساسية سيقول أنّ نتيجة جمع 0.6 + 0.3 تساوي 0.9 وهذا صحيح. إلّا أنّ النتيجة التي سيرجعها اكسل ستكون 1 بدلًا من 0.9؛ أي أنّه قام بجمع 0.6666667 + 0.3333333 والسبب كما أسلفنا هو أنّ قيمة الرقم المخزونة في اكسل لا تتغيّر عند تغيير تنسيق الرقم، وإنّما يتغيّر مظهر الرقم فقط. بإمكانك ضبط إعدادات اكسل الافتراضية ليقوم بتغيير قيمة الرقم المخزونة وليس مظهره فقط عند تغيير صيغته. اذهب إلى: File > Options > Advanced انتقل إلى قسم When Calculating this workbook ثم قم بتأشير مربّع الخيار Set precisions as displayed: مع ذلك، يُنصح بترك هذا الخيار غير مؤشّر لأنّ سيؤثّر على دقة الأرقام، وهذا غير مفيد في الحسابات التي تتطلّب أرقامًا دقيقة جدًا والتي تكون فيها أعشار الرقم مهمة جدًا. تنسيقات الأرقام المضمنة افتراضيا في اكسل توجد قائمة تنسيقات الأرقام المضمّنة في اكسل في تبويب الصفحة الرئيسية Home وبالتحديد في خانة رقم Number: يمكنك تطبيق التنسيق بتحديد الخلية التي تحتوي على الرقم ومن ثم اختيار التنسيق المناسب من القائمة: من التنسيقات المضّمنة الشائعة التي تُستخدم في أغلب جداول البيانات: عام General هو التنسيق الافتراضي الذي يُستخدم تلقائيًا عند كتابة أي رقم. ويعني التنسيق العام أنّه لم يتم تطبيق أي تنسيق آخر على الرقم سواء كان من التنسيقات المضمّنة أو المخصصة: الرقم Number يُستخدم هذا التنسيق مع الأرقام بشكل عام. سيظهر الرقم عند اختيار هذا التنسيق بفواصل عشرية: يمكنك تحديد المنازل العشرية المعروضة بعد الفاصلة بالنقر على زر زيادة/إنقاص المنازل العشرية: يمكنك أيضًا التحكّم في عدد المنازل العشرية، وكذلك طريقة عرض الأرقام السالبة من خلال مربع الحوار تنسيق الخلايا Format Cells. انقر على مشغّل مربّع الحوار، حدد تبويب Number ثم اختر التنسيق المرغوب: العملة Currency يستخدم هذا التنسيق مع القيم النقدية العامة. حيث يقوم بإظهار رمز العملة الافتراضي بجانب الرقم. وبإمكانك التحكّم في عدد المنازل العشرية للرقم، كيفية عرض القيم السالبة، وكذلك رمز العملة من خلال مربع الحوار Format Cells وكما ذكرنا أعلاه: محاسبة Accounting يستخدم هذا التنسيق أيضًا مع القيم النقدية، لكنّه يقوم بمحاذاة رمز العملة بشكل منفصل عن الرقم داخل الخلية: بإمكانك تغيير رمز العملة، أو نوعها، بواسطة زر Accounting Number Format الذي يعرض مجموعة من الخيارات البديلة. ويمكن الوصول إلى المزيد من خيارات رموز العملات بالنقر على More Accounting Formats: وبخلاف تنسيق العملة، لا يمكن التحكّم في طريقة عرض القيم السالبة عند استخدام تنسيق محاسبة، وستُعرض الأرقام السالبة كما هي بالإضافة إلى رمز العملة: التاريخ Date يوفّر اكسل عدة خيارات مفيدة لتنسيق الأرقام بصيغة تواريخ. وعندما تقوم بإدخال تاريخ معيّن باستخدام أي نوع من الفواصل، سيقوم اكسل بتحويله تلقائيًا إلى صيغة تاريخ، ويختار نوع الفاصل الأنسب. على سبيل المثال، إذا قمنا بإدخال التاريخ 22-03-2016 في الخلية، سيتم تطبيق تنسيق التاريخ تلقائيًا، كما يغيّر مظهر التاريخ إلى الصيغة الموضّحة أدناه: أي أنّه استخدم الفاصلة المائلة بدلًا من التي قمنا بإدخالها. توجد العديد من صيغ التاريخ التي يمكنك الاختيار من بينها، ويمكنك الوصول إليها من مربع الحوار Format Cells: بعض هذه الصيغ تتغيّر بتغيّر إعدادات الوقت والتاريخ للمنطقة التي تم تحديدها لنظام تشغيل جهازك. هناك خيارات أيضًا لعرض التاريخ بصيغة طويلة، أي بكتابة اسم الشهر بدلًا من رقمه. اختر الصيغة المرغوبة ثم انقر على OK. الوقت Time الوقت، حاله حال التاريخ، يمكن أن يسبب لك الالتباس عند إدخاله. فقد يختلف ما تقوم بإدخاله عما يظهر في الخلية. والسبب هو أيضًا في تنوّع تنسيقات الوقت المضمّنة في اكسل. حيث يقوم البرنامج بالتعرّف على صيغة الوقت وعرضها بتنسيق معيّن قد يكون مختلفًا عمّا قصدته. على سبيل المثال، إذا أردت إدخال 4 دقائق و 56 ثانية، يمكنك كتابتها بالشكل 4:56 داخل الخلية. لكن ستلاحظ، من خلال شريطة الصيغة، أنّ اكسل يقوم بتخزين الوقت بالشكل 04:56:00 ص. كما يتم تحديد التنسيق Custom: وعندما تذهب إلى مربّع الحوار Format Cells، ستجد أنّ الوقت قد تم عرضه بصيغة hh:mm (أي ساعة: دقيقة)، وتم اعتبار الرقم 4 هو ما يمثّل الساعات والرقم 56 هو ما يمثّل الدقائق: وستلاحظ أيضًا وجود العديد من التنسيقات المتنوّعة للوقت. فإذا كنت ترغب في عرض الدقائق: الثواني اختر التنسيق mm:ss. من جديد سيقوم اكسل بعرض وقت مخالف للوقت الذي قمت بإدخاله: لذلك يجب أن تكون أكثر دقة في إدخال الوقت. وفي مثالنا هذا يجب كتابة الوقت بالشكل 00:04:56، لكي نكون أكثر تحديدًا في بيان رقم الساعة، الدقيقة، والثانية. بعد أن تتأكد من إدخال الوقت بصورة صحيحة، يمكنك تغيير التنسيق واختيار صيغة أخرى لعرض الوقت مثل hh:mm AM/PM لإظهار ص (صباحًا) أو م (مساءً) بجانب الوقت، أو h:mm:ss إذا كنت تريد جمع الوقت وطرحه، حيث تكون هذه الصيغة مفيدة في هذه الحالة على وجه الخصوص. نسبة مئوية Percentage يُستخدم هذا التنسيق لعرض محتوى الخلية كنسبة مئوية، أي يقوم بضرب الرقم الموجود في الخلية × 100 ويضيف رمز النسبة المئوية. يمكنك تطبيق هذا التنسيق إما بالنقر على أمر النسبة المئوية في خانة Number، أو استخدام مفتاح الاختصار Ctrl+Shift+% أو من خلال قائمة التنسيقات. ويمكن التحكّم في عدد المنازل العشرية بواسطة مربع الحوار Format Cells: كسور Fraction يُستخدم هذا التنسيق لعرض الأرقام بشكل كسور صحيحة، وحسب نوع الكسر الذي تختاره (من مربع الحوار Format Cells): علمي Scientific في هذا التنسيق، يتم عرض الأرقام باستخدام الرمز الأسي. حيث يتم ضرب الرقم بالأساس 10 ويرفع لأس محدد حسب طول الرقم. على سبيل المثال، عند كتابة الرقم 255 وتطبيق هذا التنسيق سيتم عرض الرقم بالشكل التالي: نص Text إذا كنت تريد أن تتم معاملة الرقم كنص عادي في الخلية يمكنك استخدام هذا التنسيق. عند تطبيقه سيتم محاذاة الرقم إلى جهة مخالفة لجهة الأرقام لتمييزه عنها: تنسيقات خاصة Special هناك بعض التنسيقات الخاصة المضمّنة في اكسل مثل تنسيق الرموز البريدية، أرقام الهواتف، أو أرقام الحماية الاجتماعية. يمكنك الوصول إلى هذه الخيارات من مربع الحوار Format Cells: مثلا، عند تطبيق تنسيق رقم الهاتف Phone Number على الرقم 1112224445، ستتم إضافة فواصل وسطية صغيرة، وسيظهر بصيغة رقم هاتف. لكن يبقى الرقم في حقل الصيغة كما تم إدخاله، وهذا مثال آخر على تغيير مظهر الرقم وليس قيمته عند تغيير التنسيق: اقرأ أيضًا دليلك الشامل إلى أنواع البيانات
  2. إن هذا الدليل مستوحى من دليل GitHub ودليل Bozhidar Batsov. ولدينا أيضًا دليل جافاسكربت لتنسيق الشيفرة البرمجية جدول المحتويات المسافات البيضاء المسافة البادئة في الشيفرة المسافات السطرية الأسطر الجديدة طول السطر التعليقات تعليقات على مستوى الملف/الصنف تعليقات الدالة التعليقات الكتلية والمضمّنة علامات الترقيم والإملاء والنحو تعليقات TODO شيفرات برمجية بدون تعليقات الدوال تعريف الدوال دوال الاستدعاء التعابير الشرطيّة الكلمات المفتاحية للجمل الشرطية المعامل الثلاثي الشروط المتشعّبة الصياغة قواعد التسمية الأصناف الاستثناءات التجميعات السلاسل النصية التعابير النمطية محارف النسبة المئوية ريلز نطاقات انسجم مع الشيفرة المسافات البيضاء المسافة البادئة في الشيفرة استخدم الزر (tabs) بمقدار مسافتين (وتسمى أيضًا Soft-Tab نظرًا لأن زر Tab الإفتراضي يكون ثمان مسافات). سيكون عمق الكلمة المفتاحية when بقدر عمق case. case when song.name == 'Misty' puts 'Not again!' when song.duration > 120 puts 'Too long!' when Time.now.hour > 21 puts "It's too late" else song.play end kind = case year when 1850..1889 then 'Blues' when 1890..1909 then 'Ragtime' when 1910..1929 then 'New Orleans Jazz' when 1930..1939 then 'Swing' when 1940..1950 then 'Bebop' else 'Jazz' end حاذِ وسطاء الّدالة فإما أن يكونوا على نفس السطر أو سطر لكلّ واحدٍ منهم. # bad def self.create_translation(phrase_id, phrase_key, target_locale, value, user_id, do_xss_check, allow_verification) ... end # good def self.create_translation(phrase_id, phrase_key, target_locale, value, user_id, do_xss_check, allow_verification) ... end # good def self.create_translation( phrase_id, phrase_key, target_locale, value, user_id, do_xss_check, allow_verification ) ... end حاذِ الأسطر المتتابعة بمقدار مسافتين في جملة التنفيذ للتعابير المنطقية متعددة الأسطر. # bad def is_eligible?(user) Trebuchet.current.launch?(ProgramEligibilityHelper::PROGRAM_TREBUCHET_FLAG) && is_in_program?(user) && program_not_expired end # good def is_eligible?(user) Trebuchet.current.launch?(ProgramEligibilityHelper::PROGRAM_TREBUCHET_FLAG) && is_in_program?(user) && program_not_expired end المسافات السطرية لا تترك مسافة زائدة. عند تضمين التعليقات في السطر، اترك مسافة واحدة بين نهاية الشيفرة البرمجية وبداية تعليقك. # bad result = func(a, b)# we might want to change b to c # good result = func(a, b) # we might want to change b to c استخدم المسافات حول المعاملات (operators)، وبعد الفواصل، وبعد النقطتين، وبعد الفاصلة المنقوطة، وبعد فتح قوس ما { وقبل إغلاقه أيضًا }. sum = 1 + 2 a, b = 1, 2 1 > 2 ? true : false; puts 'Hi' [1, 2, 3].each { |e| puts e } لا تضع أبدًا مسافة فارغة قبل الفاصلة. result = func(a, b) لا تضع مسافة داخل كتلة وسطاء الأنبوب (pipe)، بل ضع واحدًا بين الوسطاء في الكتلة، وواحدًا آخر خارج كتلة وسطاء الأنبوب. # bad {}.each { | x, y |puts x } # good {}.each { |x, y| puts x } لا تضع مسافات بين إشارة التعجب ! ومعاملاتها. !something لا تترك فارغات بعد الأقواس من نوع ( و[ أو قبلها ) و]. some(arg).other [1, 2, 3].length تجنب وضع المسافات عند إنشاء السلاسل النصية. # bad var = "This #{ foobar } is interpolated." # good var = "This #{foobar} is interpolated." لا تستخدم مسافة إضافية في النطاق الحرفي (range literals). # bad (0 ... coll).each do |item| # good (0...coll).each do |item| الأسطر الجديدة أضف سطرًا جديدًا بعد الجملة الشرطية if ذات الشروط المتعددة لتصبح في عدة أسطر، ولتساعد في التفريق بين الشروط وجسم الشرط. if @reservation_alteration.checkin == @reservation.start_date && @reservation_alteration.checkout == (@reservation.start_date + @reservation.nights) redirect_to_alteration @reservation_alteration end أضف سطرًا جديدًا بعد نهاية الجمل الشرطية، والكتل، والبيانات …إلخ. if robot.is_awesome? send_robot_present end robot.add_trait(:human_like_intelligence) لا تضف أسطرًا جديدةً فارغةً بين المناطق ذات مسافات بادئة مختلفة (مثلًا حول أجزاء الصنف أو أجسام الوحدة). # bad class Foo def bar # body omitted end end # good class Foo def bar # body omitted end end أضف سطرًا جديدًا فارغًا بين الدوالّ. def a end def b end أضف سطرًا فارغًا لفصل البيانات المترابطة في الدوالّ لتشكيلّ فقرات منطقية داخلها. def transformorize_car car = manufacture(options) t = transformer(robot, disguise) car.after_market_mod! t.transform(car) car.assign_cool_name! fleet.add(car) car end أضف سطرًا فارغًا في نهاية كل ملف، ولا تضف أبدًا عدة أسطر. طول السطر حافظ على كلّ سطر من الشيفرة البرمجية ليكون بطول مناسب للقراءة، وابقِ طول الأسطر أقل من 100 محرف (إليك السبب) إلا إن كان لديك سبب وجيه لجعله أطول من ذلك. التعليقات كُتِبَ هذا الشرح باستعانة كبيرة من دليل Google لتنسيق الشيفرة البرمجية للغة C++‎ ولغة Python. تعليقات على مستوى الملف/الصنف عند التعريف عن صنف ما يجب أن يوجد تعليق مصاحب له يصف ماهيّة الصنف وكيفية استخدامه. يجب أن يملك الملف الذي لا يحتوي على أصناف، أو يحتوي على أكثر من صنف على تعليق في أعلاه يصف محتوياته. # Automatic conversion of one locale to another where it is possible, like # American to British English. module Translation # Class for converting between text between similar locales. # Right now only conversion between American English -> British, Canadian, # Australian, New Zealand variations is provided. class PrimAndProper def initialize @converters = { :en => { :"en-AU" => AmericanToAustralian.new, :"en-CA" => AmericanToCanadian.new, :"en-GB" => AmericanToBritish.new, :"en-NZ" => AmericanToKiwi.new, } } end ... # Applies transforms to American English that are common to # variants of all other English colonies. class AmericanToColonial ... end # Converts American to British English. # In addition to general Colonial English variations, changes "apartment" # to "flat". class AmericanToBritish < AmericanToColonial ... end يجب أن تملك جميع الملفات من بينهم ملفات البيانات والإعداد، على تعليقات على مستوى الملف. # List of American-to-British spelling variants. # # This list is made with # lib/tasks/list_american_to_british_spelling_variants.rake. # # It contains words with general spelling variation patterns: # [trave]led/lled, [real]ize/ise, [flav]or/our, [cent]er/re, plus # and these extras: # learned/learnt, practices/practises, airplane/aeroplane, ... sectarianizes: sectarianises neutralization: neutralisation ... تعليقات الدالة يجب أن يكون هنالك تعليقات عند تعريف كلّ دالة وتكون قبلها مباشرة لتصف ما تؤديه هذه الدالة وكيفية استخدامها، ويجب أن تكون هذه الملفات وصفية ("يُفتح الملف") بدلًا من أمرية ("افتح الملف"). التعليقات التي تصف الدالّة، لا تشرح ما تقوم به الدالّة خطوة بخطوة. عمومًا، لا تصف هذه التعليقات كيفية تنفيذ هذه الدالّة عملها حرفيًا، وإنما، يجب ترك هذه التعليقات لتتخلل الشيفرة البرمجية للدالّة. يجب أن تذكر كلُّ دالّة ما هي مدخلاتها ومخرجاتها، إلا إن كانت لا تستوف جميع المعايير التالية: غير مرئية من الخارج. قصيرة جدًا. واضحة وبديهية. يمكنك استخدام أي تنسيق تريده، في لغة Ruby، يوجد مخططين لتوثيق وشرح عمل الدالّة وهما TomDoc وYARD كما يمكنك أيضًا كتابة تعليقات موجزة: # Returns the fallback locales for the_locale. # If opts[:exclude_default] is set, the default locale, which is otherwise # always the last one in the returned list, will be excluded. # # For example: # fallbacks_for(:"pt-BR") # => [:"pt-BR", :pt, :en] # fallbacks_for(:"pt-BR", :exclude_default => true) # => [:"pt-BR", :pt] def fallbacks_for(the_locale, opts = {}) ... end التعليقات الكتلية والمضمّنة المكان الأخير للتعليقات هو في الأجزاء الصعبة من الشيفرة البرمجية، فعّلق عليها الآن إذا توجب عليك شرحها عند مراجعة القادمة للشيفرة البرمجية. يجب أن تحصل العمليات المعقدة على بضعة أسطر من التعليقات قبل بدء العمليات، بالنسبة للأجزاء غير الواضحة فإنها التعليقات ستكون في نهاية السطر. def fallbacks_for(the_locale, opts = {}) # dup() to produce an array that we can mutate. ret = @fallbacks[the_locale].dup # We make two assumptions here: # 1) There is only one default locale (that is, it has no less-specific # children). # 2) The default locale is just a language. (Like :en, and not :"en-US".) if opts[:exclude_default] && ret.last == default_locale && ret.last != language_from_locale(the_locale) ret.pop end ret end من ناحية أخرى، لا تصف طريقة عمل التعليمات البرمجية، افترض أن الشخص الذي يقرأ شيفرتك البرمجية يعرف اللغة البرمجية (وإن لم يكن ما تحاول القيام به) أفضل منك. وفي سياق متصل: لا تستخدم التعليقات الكتلية، فلا يمكن أن تسبقها بمسافة وليس من السهل رؤيتها كالتعليقات العادية. # bad =begin comment line another comment line =end # good # comment line # another comment line علامات الترقيم والإملاء والنحو اهتم بعلامات الترقيم، والإملاء، والنحو. فمن السهل قراءة التعليقات المكتوبة بعناية على عكس نظيرتها غير المكتوبة بعناية. ينبغي أن تكون التعليقات قابلة للقراءة كنص سردي، مع وجود الحروف الكبيرة وعلامات الترقيم المناسبة. في حالات كثيرة، تكون الجمل الكاملة قابلة للقراءة أكثر من الجمل القصيرة. يمكن للتعليقات القصيرة، مثل الّتي توضع في نهاية آخر سطر في شيفرة برمجية أن تكون أقل رسمية، لكن على كلّ الأحوال يجب أن تكون متسقة مع تنسيقك للتعليقات ككلّ. على الرغم من أنه من المحبط أن يشير مُراجِع لشيفرتك البرمجية لاستخدامك فاصلة عادية في مكان الفاصلة المنقوطة، لذا من المهم أن تحافظ على شيفرتك البرمجية لتكون بمستوى عالٍ من الوضوح وقابلية القراءة، وستُساعدنا علامات الترقيم والكتابة الإملائية الصحيحة واستخدام الصحيح للقواعد النحوية في تحقيق هذا الهدف. تعليقات TODO استخدم تعليقات TODO للشيفرات البرمجية المؤقتة، أو للحلّ قصير الأجل، أو الحلّ الجيد بما يكفي ولكنه ليس مثاليًا. يجب أن تتضمن تعليقات TODO على كلمة TODO بالأحرف الكبيرة متبوعة بالاسم الكامل للشخص الذي يمكنه توفير أفضل حل للمشكلة في الشيفرة المشار إليها من قِبل تعليق TODO بين قوسين. يمكنك إضافة النقطتين ومن ثمّ ضع تعليق يشرح ما يجب القيام به، فالغرض الرئيسي هو تنسيق تعليق TODO ليصبح قابلًا للبحث ليجده الشخص الّذي يمكنه توفير مزيد من التفاصيل عند الطلب. إن تعليق TODO لا يُلزم الشخص المشار إليه لإصلاح المشكلة، ولذلك عند إنشائك تعليق TODO، فغالبًا -إن لم يكن دائمًا- ستكتب اسمك. # bad # TODO(RS): Use proper namespacing for this constant. # bad # TODO(drumm3rz4lyfe): Use proper namespacing for this constant. # good # TODO(Ringo Starr): Use proper namespacing for this constant. شيفرات برمجية بدون تعليقات لا تترك أبدًا شيفراتك البرمجية بدون تعليقات. الدوال تعريف الدوال استخدم الكلمة المفتاحية def مع الأقواس عند وجود وسطاء، واحذف الأقواس عندما لا تقبل الدوالّ أي وسطاء. def some_method # body omitted end def some_method_with_parameters(arg1, arg2) # body omitted end لا تستخدم الوسطاء الموضوعة افتراضيًا، بل استخدم معاملات الكلمات الرئيسية (keyword) – الموجودة في إصدار لغة روبي Ruby 2.0 أو الأحدث - أو يمكنك استخدام أسماء hash أيضًا. # bad def obliterate(things, gently = true, except = [], at = Time.now) ... end # good def obliterate(things, gently: true, except: [], at: Time.now) ... end # good def obliterate(things, options = {}) options = { :gently => true, # obliterate with soft-delete :except => [], # skip obliterating these things :at => Time.now, # don't obliterate them until later }.merge(options) ... end تجنب الدوالّ المتكونة من سطر واحد، على الرغم من انتشارها، إلا أنه توجد بعض الغرابة حول طريقة صياغتها مما يجعل استخدامها أمرًا غير مرغوب به. # bad def too_much; something; something_else; end # good def some_method # body end دوال الاستدعاء استخدم الأقواس لدالة الاستدعاء في الحالات التالية: إذا كانت الدالة ترجع قيمة. # bad @current_user = User.find_by_id 1964192 # good @current_user = User.find_by_id(1964192) إذا كان الوسيط الأول للدالّة يستخدم الأقواس. # bad put! (x + y) % len, value # good put!((x + y) % len, value) لا تضع أبدًا مسافة بين اسم الدالّة والقوس الأول. # bad f (3 + 2) + 1 # good f(3 + 2) + 1 تجنب الأقواس عند استدعاء الدالّة إذا لم تقبل الدالّة أي وسطاء. # bad nil?() # good nil? ستكون الأقواس اختيارية ما لم تكن الدالة تُعيدّ قيمة (أو لا نهتم بما تُعيده)، أما إذا كان الوسطاء في عدة أسطر، فيمكن للأقواس أن تزيد من قابلية القراءة. # okay render(:partial => 'foo') # okay render :partial => 'foo' في كِلا الحالتين: في حالة قبول الدالة hash كوسيط أخير اختياري، لا تستخدم الأقواس { أو } أثناء الاستدعاء. # bad get '/v1/reservations', { :id => 54875 } # good get '/v1/reservations', :id => 54875 التعابير الشرطيّة الكلمات المفتاحية للجمل الشرطية لا تستخدم الكلمة المفتاحية then للجملة الشرطية if/unless المتعددة الأسطر. # bad if some_condition then ... end # good if some_condition ... end لا تستخدم الكلمة المفتاحية do مع while أو until المتعددات الأسطر. # bad while x > 5 do ... end until x > 5 do ... end # good while x > 5 ... end until x > 5 ... end إن الكلمات المفتاحية and وor وnot محظورة، فهي لا تستحق العناء، استخدم دائمًا && و|| و! بدلًا منها. يمكنك استخدام المعدِل if/unless عندما يكون الجسم بسيط والشرط بسيط وكلّ شيء في سطر واحد، وخلافًا لذلك، تجنب استخدام if/unless. # bad - this doesn't fit on one line add_trebuchet_experiments_on_page(request_opts[:trebuchet_experiments_on_page]) if request_opts[:trebuchet_experiments_on_page] && !request_opts[:trebuchet_experiments_on_page].empty? # okay if request_opts[:trebuchet_experiments_on_page] && !request_opts[:trebuchet_experiments_on_page].empty? add_trebuchet_experiments_on_page(request_opts[:trebuchet_experiments_on_page]) end # bad - this is complex and deserves multiple lines and a comment parts[i] = part.to_i(INTEGER_BASE) if !part.nil? && [0, 2, 3].include?(i) # okay return if reconciled? لا تستخدم أبدًا الكلمة المفتاحية unless مع else، أعد كتابة الشرط لتصبح الحالة الصحيحة الأولى أولًا. # bad unless success? puts 'failure' else puts 'success' end # good if success? puts 'success' else puts 'failure' end تجنب unless مع الشروط المتعددة. # bad unless foo? && bar? ... end # okay if !(foo? && bar?) ... end تجنب استخدام unless مع معاملات الموازنة فإن استطعت استخدام الشرط if مع عكس الشرط الموجود في unless ففعل ذلك. # bad unless x == 10 ... end # good if x != 10 ... end # bad unless x < 10 ... end # good if x >= 10 ... end # ok unless x === 10 ... end لا تستخدم أقواسًا حول الشروط if/unless/while. # bad if (x > 10) ... end # good if x > 10 ... end المعامل الثلاثي تجنب استخدام العامل الثلاثي (:?) إلا في الحالات الّتي تكون فيها جميع التعابير بسيطة، إلا أنه يمكنك استخدامه بدلًا من if/then/else/end في الشروط المتكونة من سطر واحد. # bad result = if some_condition then something else something_else end # good result = some_condition ? something : something_else استخدم تعبير واحد لكلّ فرع في المعامل الثلاثي، كذلك يجب ألا يكون المعامل الثلاثي متشعبًا، إذ يُفضّل استخدام بنية if/else في هذه الحالات. # bad some_condition ? (nested_condition ? nested_something : nested_something_else) : something_else # good if some_condition nested_condition ? nested_something : nested_something_else else something_else end تجنب الشروط المتعدّدة في المعامل الثلاثي إذ يُفضّل استخدام الأخير مع الشروط الفردية. تجنب الأسطر المتعدّدة :? في المعامل الثلاثي، واستخدم if/then/else/end بدلا منه. # bad some_really_long_condition_that_might_make_you_want_to_split_lines ? something : something_else # good if some_really_long_condition_that_might_make_you_want_to_split_lines something else something_else end الشروط المتشعّبة تجنب استخدام الشروط المتشعّبة لزيادة التحكم بالشيفرة (يمكنك الاطلاع على هذا المقال لمزيد من المعلومات). يُفضّل استخدام تعبير الحراسة (guard clause) عندما تريد التحقق بيانات غير صالحة، فشرط الحراسة هو عبارة شرطية في أعلى الدالة التي تعيد النتيجة بأسرع ما يمكن. المبادئ العامة هي: أعدّ القيمة (النتيجة) مباشرة بمجرد معرفتك بأن الدالّة لا طائل منها، أو أنها لا تضف أي زيادة حقيقة للشيفرة. قلل التشعّب والمسافات البادئة في الشيفرة البرمجة من خلال إعادة النتيجة بأسرع وقت ممكن. وهذا يجعل الشيفرات البرمجية أسهل للقراءة، وتتطلّب جهدً عقليًا أقل أثناء قراءة الفرع الثاني من الشرط else. ينبغي أن تكون الشروط الجوهرية أو الأكثر أهمية ذات مسافات بادئة أقل. # bad def compute server = find_server if server client = server.client if client request = client.make_request if request process_request(request) end end end end # good def compute server = find_server return unless server client = server.client return unless client request = client.make_request return unless request process_request(request) end يُفضّل استخدام next في الحلقات بدلًا من الكتل الشرطيّة. # bad [0, 1, 2, 3].each do |item| if item > 1 puts item end end # good [0, 1, 2, 3].each do |item| next unless item > 1 puts item end الصياغة لا تستخدم for إلّا إذا كنت تعرّف تمامًا لماذا ستستخدمها، فغالبًا، يجب استخدام المكرّرات (iterator) بدلًا منها، فتعمل for بنفس شروط each (أي أنك ستضيف مستوى جديد من المراوغة للبرنامج) لكن مع عيب صغير، فلا تُعرّف for نطاق جديد (على عكس each) وستظهر المتغيرات المعرّفة في كتلتها خارجيًا. arr = [1, 2, 3] # bad for elem in arr do puts elem end # good arr.each { |elem| puts elem } يفضل استخدام {...} بدلًا من do...end للكتل المكوّنة من سطر واحد، وتجنّب استخدام {...} للكتل المكونة من عدة أسطر (فسَلّسَلةُ عدة أسطر هو شيء قبيح)، واستخدم do...end دائمًا للتحكم في التدفّق ولتعريف الدوالّ، وتجنب استخدام do...end عند السَلّسَلة. names = ["Bozhidar", "Steve", "Sarah"] # good names.each { |name| puts name } # bad names.each do |name| puts name end # good names.each do |name| puts name puts 'yay!' end # bad names.each { |name| puts name puts 'yay!' } # good names.select { |name| name.start_with?("S") }.map { |name| name.upcase } # bad names.select do |name| name.start_with?("S") end.map { |name| name.upcase } سيُجادلنا البعض ويقول أن سَلّسَلَة الأسطر المتعددة تبدو جيّدة عند استخدام {...}، لكن هل سألوا أنفسهم هل هذه الشيفرة البرمجية قابلة للقراءة حقًا. وهل يمكن استخلاص محتوى الكتلة لوضعها في دوالّ فعّالة. استخدم معاملات الإسناد المختصرة كلما كان ذلك ممكنًا. # bad x = x + y x = x * y x = x**y x = x / y x = x || y x = x && y # good x += y x *= y x **= y x /= y x ||= y x &&= y تجنب الفواصل المنقوطة باستثناء حالة تعريفك لصنف ذو سطر واحد، وعندما يكون من الملائم استخدام فاصلة منقوطة، ينبغي أن تكون متاخمة مباشرةً للعبارة التي ستنهيها. لا يجب ترك مسافة قبل الفاصلة المنقوطة. # bad puts 'foobar'; # superfluous semicolon puts 'foo'; puts 'bar' # two expressions on the same line # good puts 'foobar' puts 'foo' puts 'bar' puts 'foo', 'bar' # this applies to puts in particular استخدم :: للثوابت المرجعيّة فقط (ويشمل هذا الأصناف والوحدات) والبواني (مثل: Array()‎ أو Nokogiri::HTML()‎) ولا تستخدم :: لاستدعاء الدالّة العادية. # bad SomeClass::some_method some_object::some_method # good SomeClass.some_method some_object.some_method SomeModule::SomeClass::SOME_CONST SomeModule::SomeClass() تجنب استخدام return عندما تكون غير مطلوبة. # bad def some_method(some_arr) return some_arr.size end # good def some_method(some_arr) some_arr.size end لا تستخدم القيمة المُعادة من المساواة = في الجمل الشرطيّة. # bad - shows intended use of assignment if (v = array.grep(/foo/)) ... end # bad if v = array.grep(/foo/) ... end # good v = array.grep(/foo/) if v ... end استخدم ‎||=‎ كما تريد لتهيئة المتغيّرات. # set name to Bozhidar, only if it's nil or false name ||= 'Bozhidar' لا تستخدم ‎||=‎ لتهيئة المتغيرات المنطقيّة، (فكر في ما سيحدث إذا كانت القيمة الحالية تساوي false). # bad - would set enabled to true even if it was false enabled ||= true # good enabled = true if enabled.nil? استخدم ‎.call الصريحة عند استدعاء lambda. # bad lambda.(x, y) # good lambda.call(x, y) تجنب استخدام متغيرات الخاصة على نمط بيرل Perl (مثل: $ أو ‎$0-9 …إلخ)، فهي مبهمة فعلًا. واستخدامها سيُعيقنا بكلّ شيئ عدا في السكربتات ذات السطر الواحد. يُفضّل اصدارات ذات الشكل الطويل مثل: ‎$PROGRAM_NAME. استخدم الاختصار &: عندما تأخذ كتلة الدالّة وسيط واحد فقط، ويعمل الجسم على قراءة سِمة أو استدعاء دالّة بدون وسطاء . # bad bluths.map { |bluth| bluth.occupation } bluths.select { |bluth| bluth.blue_self? } # good bluths.map(&:occupation) bluths.select(&:blue_self?) يفضلُ استخدام some_method على self.some_method عند استدعاء الدالّة داخليًا. # bad def end_date self.start_date + self.nights end # good def end_date start_date + nights end يجب عليك استخدام self.‎ في الحالات الثلاثة التالية: عند تعريف دالّة صنف: def self.some_method. عندما تكون self هي نموذج سجل فعالّ ActiveRecord ويكون الجانب الأيسر هو استدعاء دالّة اِسناد بما في ذلك اِسناد سِمة: self.guest = user. الإشارة للصنف داخليًا: self.class. عند تعريف كائن من أي نوع قابل للتحويل وتريده أن يكون ثابتًا، تأكد من استدعاء freeze عليه، ومن الأمثلة الشائعة على ذلك هي السلاسل النصية، والمصفوفات، ومتغيرات من نوع hash (انظر لهذا المقال لمزيد من المعلومات). والسبب في ذلك أن الثوابت في لفة روبي (Ruby) هي أنواع قابلة للتحويل، وبعضها الآخر ليس كذلك. ستتأكد من عدم قابليتها للتحويل عند استدعاء freeze عليها لأنه سيصدر استثناء عند محاولة تعديلهم إن كانت غير قابلة للتعديل، وبالنسبة للسلاسل النصية، سيُسمح بالتعامل معهم لنسخ روبي ذات الاصدار الأقدم من 2.2. # bad class Color RED = 'red' BLUE = 'blue' GREEN = 'green' ALL_COLORS = [ RED, BLUE, GREEN, ] COLOR_TO_RGB = { RED => 0xFF0000, BLUE => 0x0000FF, GREEN => 0x00FF00, } end # good class Color RED = 'red'.freeze BLUE = 'blue'.freeze GREEN = 'green'.freeze ALL_COLORS = [ RED, BLUE, GREEN, ].freeze COLOR_TO_RGB = { RED => 0xFF0000, BLUE => 0x0000FF, GREEN => 0x00FF00, }.freeze end قواعد التسمية استخدم أسلوب التسمية snake_case (جميع حروف اسم المتغير صغيرة) للدوالّ والمتغيرات. استخدم أسلوب التسمية camelCase (تكبير أول حرف من كلّ كلمة في اسم المتغير عدا أول كلمة) للأصناف والوحدات. (احتفظ بالاختصارات مثل" HTTP وRFC وXML بحالة حروف كبيرة). استخدم أسلوب التسمية SCREAMING_SNAKE_CASE (جميع حروف اسم المتغير كبيرة) للثوابت الأخرى. يجب أن تنتهي الدوالّ الإسنادية (الّتي ترجع قيمة منطقية) بعلامة استفهام. (هكذا: Array#empty?‎). يجب أن تنتهي أسماء الدوالّ التي يُحتمل أن تكون خطرة (مثل الدوالّ الّتي تُعدلّ self أو الوسطاء، أو exit!‎ …إلخ) بعلامة تعجب، ويجب أن تتواجد الدوالّ الخطرة (bang) إذا تتواجدت الدوالّ غير الخطرة (non-bang) معها (يمكنك الاطلاع على المقال للمزيد من المعلومات). سمِّ متغيّرات رمي الأخطاء _. version = '3.2.1' major_version, minor_version, _ = version.split('.') الأصناف تجنب استخدام متغيرات (@@) بسبب سلوكهم السيئ في الوراثة. class Parent @@class_var = 'parent' def self.print_class_var puts @@class_var end end class Child < Parent @@class_var = 'child' end Parent.print_class_var # => will print "child" كما ترى أن جميع الأصناف في التسلسل الهرمي للصنف تتشارك في متغير صنف واحد، ويجب أن تُفضّل متغيّرات مثيل الصنف على متغيّرات الصنف. استخدم def self.method لتعريف الدوالّ المتفرّدة (Singleton Methods)، وسيجعل هذا الدوالّ أكثر مقاومة لتغييرات إعادة الهيكلة. class TestClass # bad def TestClass.some_method ... end # good def self.some_other_method ... end تجنب استخدام class << self إلا عند الضرورة، فمثلًا، الجالبات المفردة (single accessors) والسمات مستعارة (aliased attributes). class TestClass # bad class << self def first_method ... end def second_method_etc ... end end # good class << self attr_accessor :per_page alias_method :nwo, :find_by_name_with_owner end def self.first_method ... end def self.second_method_etc ... end end ضع مسافة بادئة لدوالّ public وprotected وprivate بقدر تعريف الدالّة الّتي ينتمون إليها، واترك سطرًا فارغًا أعلاها وأسفلها. class SomeClass def public_method # ... end private def private_method # ... end end الاستثناءات لا تستخدم الاستثناءات للتحكم بسير البرنامج. # bad begin n / d rescue ZeroDivisionError puts "Cannot divide by 0!" end # good if d.zero? puts "Cannot divide by 0!" else n / d end تجنب إنقاذ (rescue) صنف الاستثناء Exception. # bad begin # an exception occurs here rescue Exception # exception handling end # good begin # an exception occurs here rescue StandardError # exception handling end # acceptable begin # an exception occurs here rescue # exception handling end لا تحدّد في استثناء RuntimeError وسيطين فقط في الكلمة المفتاحية raise، ومن الأفضل استخدام خطأ الأصناف الفرعية لتوضيح الخطأ وشرحه بطريقة أفضل. # bad raise RuntimeError, 'message' # better - RuntimeError is implicit here raise 'message' # best class MyExplicitError < RuntimeError; end raise MyExplicitError يُفضّل توفير صنف استثناء والرسالة كوسيطين في الكلمة المفتاحية raise بدلًا من نسخة استثناء عادي. # bad raise SomeException.new('message') # Note that there is no way to do `raise SomeException.new('message'), backtrace`. # good raise SomeException, 'message' # Consistent with `raise SomeException, 'message', backtrace`. تجنب استخدام rescue في شكل مُعدّل (Modifier). # bad read_file rescue handle_error($!) # good begin read_file rescue Errno:ENOENT => ex handle_error(ex) end التجميعات (Collections) يفضّل استخدام الخارطة (أو الخريطة) map بدلًا من تجميعة collect. يفضّل استخدام detect على find، فاستخدام find غامض بسبب دالّة find الخاصة بكائن السجل الغعال (ActiveRecord) وسيُظهر detect على أنك تعمل مع تجميعة في لغة روبي وليس كائن سجل فعال. يُفضّل استخدام reduce على inject. يُفضّل استخدام size على length وcount لتحسين أداء الشيفرة. يفّضل استخدام تدوين الإنشاء (creation notation) ومصفوفة مجزئة مصنّفة النوع (Literal)، إلّا إذا كنت بحاجة لتمرير الوسطاء لمنشئيها. # bad arr = Array.new hash = Hash.new # good arr = [] hash = {} # good because constructor requires parameters x = Hash.new { |h, k| h[k] = {} } يُفضّل استخدام Array#join بدلًا من Array#*‎ لوضوح الشيفرة. # bad %w(one two three) * ', ' # => 'one, two, three' # good %w(one two three).join(', ') # => 'one, two, three' استخدم الرموز (symbols) بدلًا من السلاسل النصية كمفاتيح لجدول Hash. # bad hash = { 'one' => 1, 'two' => 2, 'three' => 3 } # good hash = { :one => 1, :two => 2, :three => 3 } على نحو مماثل، استخدم رموز واضحة بدلًا من رموز السلاسل النصية عندما يكون ذلك ممكنًا. # bad :"symbol" # good :symbol استخدم Hash#key?‎ بدلًا من Hash#has_key?‎ وHash#value?‎ بدلًا من Hash#has_value?‎. فوفقًا لماتز (Matz)، تعدّ الأشكال الطويلة مُهملة. # bad hash.has_key?(:test) hash.has_value?(value) # good hash.key?(:test) hash.value?(value) استخدم جدول hash متعدّد الأسطر لأنه يجعل الشيفرة أكثر قابليّة للقراءة، واستخدم الفواصل التذييلية للتأكد من أن أي تغيّر للوسطاء لن يتسبب بتغيّرات غريبة لشكل هذه الأسطر، وذلك عندما لا يتغيّر منطق الحلّ. hash = { :protocol => 'https', :only_path => false, :controller => :users, :action => :set_password, :redirect => @redirect_url, :secret => @secret, } استخدم الفاصلة التذيليّة في المصفوفة الّتي تمتد لأكثر من سطر واحد. # good array = [1, 2, 3] # good array = [ "car", "bear", "plane", "zoo", ] السلاسل النصية يُفضّل توليد السلسلة النصية (string interpolation) بدلًا من دمج السِلاسل النصية: # bad email_with_name = user.name + ' <' + user.email + '>' # good email_with_name = "#{user.name} <#{user.email}>" وعلاوة على ذلك، لا تنس توليد نمط روبي 1.9، لنفترض أنك تُنشئ مفاتيح ذاكرة التخزين المؤقت كالتالي: CACHE_KEY = '_store' cache.write(@user.id + CACHE_KEY) مرةً أخرى يُفضّل توليد السلسلة النصية (string interpolation) بدلًا من دمج السِلاسل النصية: CACHE_KEY = '%d_store' cache.write(CACHE_KEY % @user.id) تجنب استخدام String#+‎ عندما تحتاج لإنشاء قطع بيانات كبيرة، واستخدم بدلًا من ذلك String#<<‎. تحور عملية دمج نسخ السلاسل النصية في مكانها، وهي أسرع دومًا من String#+‎، والّذي ينشئ مجموعة جديدة من كائنات السلسلة النصية. # good and also fast story = '' story << 'The Ugly Duckling' paragraphs.each do |paragraph| story << paragraph end استخدم \ في نهاية السطر بدلًا من + أو << لدمج السلاسل النصية متعددة الأسطر. # bad "Some string is really long and " + "spans multiple lines." "Some string is really long and " << "spans multiple lines." # good "Some string is really long and " \ "spans multiple lines." التعابير النمطية تجنب استخدام ‎$1-9 لأنه من الصعب متابعة ما يحتويه، واستخدم بدلًا منه المجموعات المسماة (Named groups). # bad /(regexp)/ =~ string ... process $1 # good /(?<meaningful_var>regexp)/ =~ string ... process meaningful_var كن حذرًا عند استخدام ^ و$ لأنها تطابق بداية/نهاية السطر، وليس نهايات السلسلة النصية، فإذا أردت مطابقة كامل السلسلة النصية فاستخدم: ‎\A و‎\z. string = "some injection\nusername" string[/^username$/] # matches string[/\Ausername\z/] # don't match استخدم المُعدّل x للتعابير النمطية المعقدة، فهذا سيجعلها أكثر قابلية للقراءة، ويمكنك إضافة بعض التعليقات المفيدة، فقط كن حذرًا لأنه سيتجاهل المسافات. regexp = %r{ start # some text \s # white space char (group) # first group (?:alt1|alt2) # some alternation end }x محارف النسبة المئوية يفضل استخدام الأقواس الهلالية على الأقواس المعقوصة، أو الأقواس المعقوفة، أو حتى الأنابيب (pipes) عند استخدام محددات مجردة % للتناسق ولأن سلوك محارف % أقرب إلى استدعاء الدالّة منه إلى البدائل. # bad %w[date locale] %w{date locale} %w|date locale| # good %w(date locale) استخدم ‎%w كما يحلو لك. STATES = %w(draft open closed) استخدم ()‎% للسلاسل النصية المتكونة من سطر واحد، والّتي تتطلّب عملية توليد سلسلة وعلامات الاقتباس المزدوجة المضمّنة، وبالنسبة للسلاسل النصية المتكونة من عدة أسطر، يُفضل استخدام heredocs. # bad - no interpolation needed %(Welcome, Jane!) # should be 'Welcome, Jane!' # bad - no double-quotes %(This is #{quality} style) # should be "This is #{quality} style" # bad - multiple lines %(Welcome, Jane!\nPlease enjoy your stay at #{location}\nCheers!) # should be a heredoc. # good - requires interpolation, has quotes, single line %(Welcome, #{name}!) استخدم ‎٪r للتعابير النمطية فقط والّتي تتطابق مع أكثر من محرف /. # bad %r(\s+) # still bad %r(^/(.*)$) # should be /^\/(.*)$/ # good %r(^/blog/2011/(.*)$) تجنب استخدام ‎%x إلا إذا أردت استدعاء أمر مع علامة الاقتباس الخلفية (`) - وهو أمر مستبعد إلى حد ما -. # bad date = %x(date) # good date = `date` echo = %x(echo `date`) ريلز عند العودة فورًا بعد استدعاء render أو redirect_to، ضع الكلمة المفتاحية return في السطر التالي وليس في نفس السطر. # bad render :text => 'Howdy' and return # good render :text => 'Howdy' return # still bad render :text => 'Howdy' and return if foo.present? # good if foo.present? render :text => 'Howdy' return end نطاقات عند تعريف نطاقات نموذج السجل الفعّال (ActiveRecord)، أحِط العلاقة بـ lambda، وخلافًا لذلك سيفرض الاتصال المجردة لقاعدة البيانات تنفيذه في وقت تحميل الصنف (مشابهة لطريقة بدء التشغيل). # bad scope :foo, where(:bar => 1) # good scope :foo, -> { where(:bar => 1) } انسجم مع الشيفرة إذا كنت تعدل شيفرة برمجية ما، فألقِ نظرة عليها لعدة دقائق، وحدّد أسلوب تنسيقها، فإن كانوا يستخدمون مسافات حول جميع المعاملات الرياضية، فانسجم مع هذه الطريقة، وإن كان للتعليقات صناديق صغيرة من المربعات hash حولها، فانسجم معها أيضًا. الهدف من امتلاك مبادئ توجيهية لتنسيق الشيفرة هي الحصول على مفردات مشتركة من الشيفرات ليتمكن الناس من فهم ما تقوله بدلًا من كيف تقوله، واستعرضنا هنا قواعد التنسيق العالمية حتى يعرف الناس المفردات، لكن التنسيقات شيفراتك المحلية مهمة أيضًا، فإذا كانت الشيفرة البرمجية الّتي ستضيفها تختلف اختلافًا كبيرًا عن الشيفرات البرمجية الّتي حولها فعندها ستجعل قراءة الشيفرة صعبة ولذلك تجنب هذا الأمر - دليل Google لتنسيق الشيفرة البرمجية للغة C++‎ ترجمة لدليل Ruby Style Guide من شركة Airbnb على موقع GitHub
  3. التسلسل (أو التتابع Hierarchy) هو مفهوم واسع ومُهمّ لكنّه سهل التّنفيذ في مجال الخطوط Typography، وسنقوم في هذا المقال بإرشادك إلى طريقة تسخير هذا المفهوم لتحسين مشاريعك التصميمية. قد يبدو لكَ هذا المصطلح غير مألوفٍ أو غير واضح، ولكنّك على الأرجح تكون قد صادفته مرّاتٍ عديدة. تصَوّر مثلًا الصحف، فهي تحتوي على العناوين الرئيسية، العناوين الفرعية، والمحتوى. يعتبر هذا مثالًا تقليديًّا لمستويات التسلسل في تنسيق النصوص، لكن هذه الطريقة ما زالت مستخدمة إلى اليوم، في كِلا المجالين: الطباعة وعبر الإنترنت. إنّ الصحف، منذ أوائل القرن العشرين وحتى منتصفه، توفّر، وعلى نحو استثنائي، أمثلةً مبالغًا فيها، كما نلاحظ في الصورة أدناه: لا يُشترط بالعناوين في هذه الأيام أن تكون بطول ستّ بوصات لكي تجذب انتباه القرّاء، لكنّ المثال أعلاه يُعتبر مثالّا رائعًا وواضحًا إلى ماهيّة التسلسل في تنسيق النصوص؛ والذي يعني تنظيم وتنسيق خيارات النصوص بطريقة تجعل القراء يرون بوضوح الشيء الأكثر أهمّية، والذي يمكّنهم من التصفّح بسهولة والبحث بسرعة للعثور على المعلومات التي يريدونها. إنّ من الفوائد المهمّة لتنسيق النصوص بتسلسل واضح هو تعزيز سهولة القراءة وسهولة الاستخدام. فمثلًا؛ لو كانت الصفحة الأمامية للصحيفة أعلاه بدون تسلسل في تنسيق النصوص، أو كان هذا التسلسل محدودًا، كما نرى في المثالين الأوّلين أدناه (من جهة اليسار)، فلن يكون بالإمكان إيصال الرسالة المهمّة بسهولة وخلال لمحة واحدة. وسيكون من الصعب على القرّاء أن يميّزوا بداية ونهاية الفقرات، مما يجعله تصميمًا أقلّ وقْعًا وأصعب للقراءة. إذًا، كيف يكون باستطاعتك تنسيق النصوص بتسلسلٍ مؤثّر في تصميمك؟ سيكون من الجيّد والكافي للكثير من التصاميم أن تبدأ بإضافة ثلاثة مستويات منفصلة عند تنسيق النصوص. المستوى الأوّل: يحتوي هذا المستوى، بصورة عامّة، على المحتوى أو المعلومات الأكثر أهمية؛ ويجب أن يكون هذا هو العنصر النصّي الأكثر وضوحًا والذي تتم ملاحظته بشكل مباشر في التصميم. المستوى الثاني: تساعد عناصر المستوى الثاني عادةً في تنظيم التصميم إلى أجزاء أو مجموعات تربط المعلومات سويّةً. لا يجب أن تكون هذه العناصر بارزةً بقدر عناصر المستوى الأول، لكنّها يجب أن توجّه المشاهدين بوضوح إلى الأجزاء المختلفة للتصميم وأن تساعدهم على سهولة التنقّل بين تلك الأجزاء. المستوى الثالث: يُعتبر المستوى الثالث هو جوهر التصميم إذا كان مخطط التصميم غنيًّا بالنصوص، وفيه يكمن الموضوع، ويتمّ من خلاله إيصال رسالة التصميم. قد يكون الموضوع طويلًا أو قصيرًا، مقالًا متكاملًا أو ملاحظةً صغيرة، أو قد يكون وصفًا مختصرًا؛ النقطة الأساسية التي يجب أخذها بعين الاعتبار في هذا المستوى هي أن يكون سهل القراءة، كون حجم الخط سيكون صغيرًا نوعًا ما، وهو المفضّل. فعلى سبيل المثال؛ تصميم الصفحة الخاصّة بهذا المنتج بسيط، ولكنّه مع ذلك يحتوي على ثلاث مستويات على الأقل من التسلسل في تنسيق النصوص. بإمكاننا القول إنّ اسم المنتج " Major Black headphones" هو المستوى الأول، السعر هو المستوى الثاني، ووصف المنتج هو المستوى الثالث. لاحظ كيف أن فقرة الوصف منسّقة بخط رقيق سهل القراءة وبمسافات كبيرة بين الأسطر (يعرف أيضًا بالتباعد الرأسي للأسطر Leading). توجد العديد من الطرق التي يمكن الاختيار من بينها لغرض تنظيم محتوى التصميم بصريًّا. قد يبدو العديد منها كتفاصيل صغيرة، ولكن على حد تعبير المصمم والمعماريّ الأمريكي المشهور؛ تشارلز إيميز Charles Eames: " التفاصيل ليست بالتفاصيل. التفاصيل هي التي تصنع التصميم" ( “The details are not the details. They make the design.”) دعونا نلقي نظرة على الخيارات التي تمكّن المصمّم من تحقيق التسلسل في تنسيق النصوص بحيث تعطي وقْعًا قويًّا ومؤثّرًا. كيفية إنشاء نصوص ذات نسق متسلسل وتنظيم التصميم بصريا. 1. نسّق أحجام الخطوط إنّ الحجم هو الطريقة الأبسط لخلق التباين بين العناصر النصّية المختلفة في التصميم، خصوصًا إذا كنتَ تعمل مع خطوط من عائلة خطوط typeface واحدة فقط (يُطلق أيضًا اسم Font Family على عائلات الخطوط). عند العمل بالمستويات الثلاثة لتنسيق النصوص سيكون الحجم الأكبر عادةً في الأعلى (المستوى الأول؛ المعلومات الأكثر أهميّة)، ثمّ يتناقص الحجم كلمّا نزلنا نحو أسفل الصفحة (في النهاية يكون حجم نصّ المحتوى هو الأصغر؛ أي المستوى الثالث). إن التسلسل المتجه من الأعلى إلى الأسفل هو الأكثر طبيعية بالنسبة للقرّاء عند التصفّح، لأننا نقرأ عادةً من اليمين إلى اليسار (أو العكس)، ومن الأعلى إلى الأسفل. وهذا النمط شائعٌ جدّا في التخطيط لكل الأشياء المقروءة، كالكتب، المجلّات، أو المقالات على شبكة الأنترنت. تذكّر؛ وظيفة التسلسل هي مساعدتك على إبراز المعلومات الأكثر أهمّية بصريّا، سواءً كانت تلك المعلومات اسم (قد يكون اسمك على بطاقة عملك، أو الضيف المتحدّث على الملصق الخاص بحدث معيّن)، عنوان المقال أو المدونة، أو خصم خاص أو ترويج في إعلانٍ ما. فإذا جعلت حجم هذا النصّ أكبر من بقية النصوص في المخطط ستضمن جذب الانتباه. في الصورة أدناه، يبرز سعر العرض الخاص بسبب حجمه الكبير مقارنةً مع بقيّة النصوص على الجانب الأيمن من الصورة. كما إنّ استخدام اللون الأحمر البرّاق لتمييز الترويج أكثر هو اختيارٌ ذكيّ (لمعرفة المزيد حول استخدام الألوان في التسلسل تابع النقطة الرابعة). 2. اختر العديد من عائلات الخطوط المتباينة فكّر مرّة أخرى بالعنوان الرئيسي "On The Moon" في الصفحة التي شاهدناها في بداية المقال. ألا يتميّز الخط السميك من عائلة sans-serif بصورة واضحة عن الخط المائل والنصوص المكتوبة بخطوط عائلة serif في بقية الصفحة؟ لا يُشترط دائمًا أن يكون الجمع بين عائلات الخطوط Typefaces ملحوظًا كهذا، ولكنّ التباين عنصرٌ أساسيٌّ في أيّ تركيبة خطوط. إنّ الجمع بين عائلتي الخطوط sans-serif وserif كان شائعًا بين الخطاطين والمصمّمين لفترة طويلة. وهذه الطريقة تعتبر مبدءًا عامًّا وتقليديًّا والذي يخدم كنقطة بداية جيّدة لأي تصميم. وحتّى لو استخدمنا خطًّا مختلفًا للنص في المستوى الأول فقط، يمكن لذلك أن يصنع وقعًا بصريًّا قويًّا. لتضع في حسابك أنّ اختيار العديد من أنواع الخطوط غير محبّذ، وسيجعل ذلك تصميمك مُبعثرًا ومُزدحِمًا؛ نوعان أو ثلاثة كافيان في أغلب التصاميم. كما يجب أن تتأكد من أنّ اختياراتك ملائمةٌ لنمط وسياق تصميمك. على سبيل المثال، لن ترغب بأن تكون المعلومات المهمّة كوقت وتاريخ حدث معيّن خاص بالشركة بنوع خط غير نموذجي، طريف وصعب القراءة. أو أن تختار نوع الخط للفقرات الطويلة بحيث يصعب على العين قراءتها. كما إن بعض أنواع الخطوط يصعب رؤيتها عند تقليل الحجم إلى أحجام صغيرة. هذه الأمور وطريقة تأثيرها على سهولة القراءة والشكل العام للتصميم مهمّة، ويجب أخذها بنظر الاعتبار في أي مشروع. 3. جرب أنماط وأسماك خطوط مختلفة تأتي العديد من الخطوط مع خيارات متعددة للنمط والسُمْك -أرجو ألّا يكون قد تبادر السَّمَك إلى أذهانكم عند قراءتكم لكلمة أسماك-الأنماط المختلفة يمكن أن تتضمن الإمالة Italic، تحويل الأحرف الصغيرة إلى كبيرة Small Caps، أو الإصدارات المتقاربة أو المتباعدة من الخطوط. أمّا السُمْك فهو يشير إلى رِقّة أو غِلط الخطوط. إذا كان الخط الذي تستخدمه بخيارات رقيق، متوسط، سميك، وسميك جدّا فتلك هي الأسماك المختلفة. إنّ هذه الخصائص تعطيك الكثير من الخيارات عندما يتعلّق الأمر بتوزيع الأدوار المختلفة (أو إعطاء مظهر مختلف ولكن متكامل) بين العناصر النصيّة المتنوعة في تصميمك. لنأخذ الصورة أدناه كمثال (وهي إشهار لرسالة إخبارية). جميع النصوص من عائلة sans-serif هي بنفس الخط ولكن بأسماك مختلفة. الحروف السميكة لعنوان الرسالة الإخبارية تجعلها أكثر وضوحًا؛ أي إنّ السُمْك البصريّ يشير إلى أنها الجزء الأهمّ في تسلسل التصميم هذا. لاحظ أيضًا هذه الملصقات في الصورة أدناه، فقد صُمّمت باستخدام أسماك متنوّعة؛ ما بين الاعتيادي والسميك، بالإضافة إلى النمط المائل والحروف الكبيرة، وجميعها تنتمي لنفس العائلة من الخطوط. 4. قم بإضافة بعض الألوان الألوان حالها حال أنماط وأسماك الخطوط؛ فهي طريقة أخرى لجعل أجزاء معيّنة من التصميم تبرز بشكل أفضل قليلًا. يجب عليك كمصمّم أن تختار الألوان التي تناسب طِراز، غرض، وأسلوب تصميمك، لأن الألوان عادًة لها معاني وارتباطات معيّنة. كمثال على ذلك الصورة أدناه، وهي دعوة لحدث تقيمه شركة قهوة عريقة، فقد تمّ تنسيق النصوص بألوان طبيعية ترابية والتي تدعم خصائص العلامة التجارية وموضوع الحدث. وبالمثل؛ بطاقة العمل أدناه، نُسّقت النصوص فيها بمزيج مميز من اللونين الأزرق والأصفر مما جعلها لافتة للنظر. تعطي الألوان شعورًا منعشًا وجذّابًا، لذلك، وعلى الرغم من عدم وجود اللونين التقليديين الأسود أو الأزرق البحري، مازال التصميم مناسبًا لممارسة تقويم الأسنان، وهو الغرض الذي صممت من أجله البطاقة. 5. أعط المسافات حقها من الاهتمام إن المسافات بين العناصر النصّية في أي تصميم، سواءً كانت المسافات بين الحروف أو بين الأسطر، هي التي تصنع كل الفرق بين تصميم متوازن وسهل القراءة، وآخر مبعثر ومُربِك. لنعد إلى المثالين السابقين (عديم التسلسل، وذي التسلسل المحدود)، كلاهما لا يحتويان على مسافات بين أجزاء المقال، ممّا جعل التصميم أقل تأثيرًا وأصعب للقراءة. لا يقتصر تأثير المسافات (أو المساحات البيضاء) على الفصل بين الأجزاء المختلفة للتصميم بصريًّا، وإنّما تساعد القارئ على فهم وتصوّر كيفية عمل الأجزاء المختلفة معًا. على سبيل المثال الصورة أدناه؛ جعلت المسافات الكافية (بالإضافة إلى التعامل المُبتكر مع النصوص وخطوط التقسيم الموضوعة بشكل جيّد) نَسْق النصوص متوازنًا، حتّى وإن كان المنتج صغير المساحة كعلامة الملابس هذه. عندما تُطالع تصميمًا ذا مساحاتٍ موزّعة بصورة جيّدة، سيتضّح لك على الفور كيف تبدأ القراءة وتحصل على المعلومات من التصميم. وعلى النقيض من ذلك؛ عندما تُطالع تصميمًا ربّما لم يجد المصمّم فيه المساحات الكافية للعمل عليها، وقام بحشر جميع المحتوى فيه بدون أخذ المسافات بنظر الاعتبار، ستجد نفسك تُضيّق عينيك محاولًا قراءة النصوص الصغيرة جدّا، أو أن تجد صعوبةً في العثور بسرعة على معلومات معيّنة تبحث عنها كعنوان أو رقم هاتف. أو حتّى لا تكلّف نفسك عناء النظر إلى التصميم لأنه عبارة عن فوضى! يتّم تجنّب هذه المشكلة في شرائح العروض التقديمية باستخدام مسافاتٍ كافية بين الأسطر، والكثير من المساحات البيضاء حول النصوص والعناصر النصّية الأخرى. تساعد أيضًا مجموعات من الألوان والأشكال الهندسية في تنظيم وفصل العناصر المختلفة في التصميم. بالطبع لا تريد من القرّاء والمستخدمين أن يشعروا بالإحباط تجاه تصميمك. لذلك يستحق الأمر أن يأخذ من وقتك وأن تبذل المزيد من الجهد لتحصل على تصميم متوازن بمساحات بيضاء وافرة. 6. أعط المسافات حقها من الاهتمام: التقارب لا يقتصر عمل المسافات على فصل العناصر النصّية فقط، وإنما تُعنى بالتقارب أيضًا، أو تقريب العناصر المرتبطة ببعضها. إنّ تقليل المسافات قليلًا بين الأجزاء المرتبطة ببعضها (لتوضيح أنها مرتبطة ببعضها) هو أداة بصريّة أخرى تساعد المشاهد على مُعاينة التصميم بسهولة أكبر. يعتبر التقارب المفتاح لعمل تصاميم متوازنة وذات مظهر منطقي بصريًّا، لاسيما في التصاميم ذات المحتوى الغنيّ بالنصوص كالإنفوجرافيك Infographic. 7. تلاعب باتجاه النص قد تكون النصوص المستقيمة غير مُرضية في بعض الأحيان عندما ترغب بإضافة عبارة إلى تصميمك. في هذه الحالة يمكن إضافة القليل من الميلان، التقوّس أو الالتواء إلى النصّ، وهذا يساعد في جعل تصميمك مميّزًا وجاذبًا للمزيد من الانتباه. من المحبّذ استخدام كلّ أو جزء من هذه الطرق لإنشاء تسلسل في تنسيق النصّ في التصميم؛ كما تمّ في بطاقة الدعوة أدناه. حيث تمّ توظيف كل من حجم الخط، التباين، أنواع الخطوط، المسافات والتقارب، والاتجاه لكي تضيف تأثيرًا جيّدًا للتصميم. إن تطبيق هذه التقنيات بصورة صحيحة لا يجعل تصميمك جذّابًا فحسب، وإنما يجعله "صديقًا للمستخدم"، وكذلك من الجيّد أن يجمع التصميم بين الشكل والغرض الذي يؤديه. لذلك، عندما تعمل على تصميم يحتوي على نصوص في المرّات القادمة، جرّب تطبيق بعض هذه التقنيات. تصميم ممتع! ترجمة -وبتصرّف- للمقال: Why Every Design Needs Three Levels Of Typographic Hierarchy لصاحبته: Janie Kliever.
  4. سيكون هذا الدرس مُتابعة لدروس Boostrap الّتي قدّمتها الأكاديميّة، وفيه سيتمّ تجهيز وتخطيط صفحة عامّة تصلح لمُختلف الأغراض والاحتياجات. يعود استخدام أُطر العمل (frameworks) بالنفع الكبير على المُطوّر، حيثُ لم يَعد على المُطوّر التفكير بالمشاكل المُتكرّرة ورُبما التافهة، وهي مشاكل قد تمّ حلها بالفعل من قبل صانعي أُطر العمل، فعلى السبيل المثال، التوافقيّة بين المُتصفّحات، دعم أبعاد أو أحجام الشاشة المُختلفة (التجاوبية)، إلى آخره من المشاكل الأخرى، ويُسرّع هذا الأسلوب أو هذا النمط من التطوير كثيرًا من عمليّة تخطيط وتطوير الموقع. يتميّز إطار العمل Bootstrap بشهرته الواسعة الّتي يتمتّع بها، الأمر الّذي يجعل من صيانة وتنقيح شيفرة أي مُطوّر سهلةً في التعديل من قِبل أي مطوّرٍ آخر، مع عدم إغفال الدعم والتوثيق القويّ الّذي يملكه على الإنترنت. تبرز مساوئ استخدام أُطر العمل في حقيقة أنّ على الصّفحة تحمّل أعباء مُجمل شيفرة الإطار (مُجمل التنسيقات الزائدة)، وحتّى عند استخدام جزء صغير من الإطار، على الجهة الأُخرى، فإن أُطر العمل هي أداةٌ فعّالة في بناء نماذج أوليّة للمشاريع (prototyping)، أو في إنشاء صفحات يكون فيها جماليّة التصميم أمرًا ثانويًّا، كما هو الأمر مع صفحات إدارة الموقع (administration pages)، ولكن عند الرغبة في إنشاء تصميم مُحدّد وذو مواصفات مُعيّنة، فإن استخدام هذه الأُطر قد يُصعب من عمليّة التصميم أكثر مما هو عليه الأمر من بناء التصميم من نقطة الصفر، ومع ذلك فهو أمرٌ مُمكن وليس مُستحيلًا. سيكون المشروع النهائيّ على الشكل التّالي: ملاحظة حول استخدام Bootstrap يوجد طرقٌ عدّة للتعامل مع تنسيقات إطار العمل Bootstrap، سواءً بدون استخدام LESS أو باستخدام LESS. استخدام Bootstrap بدون LESS يُستحسن للمُبتدئين في التعامل مع Bootstrap تنزيل نسخة Bootstrap المُترجمة/المُجمّعة (compiled) وإرفاقها في المشروع، ومن ثمّ القيام بإنشاء ملفّ CSS فارغ وربطه مع المشروع بعد ملفّ bootstrap.css: <link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/styles.css" rel="stylesheet"> ولكي يتمّ التغيير من تنسيقات bootstrap الافتراضيّة، فيجب الكتابة في الملفّ style.css: a { color: #00ff00 } block { background-color: #dddddd } إن مساوئ استخدام الأسلوب السابق كما هو واضح هو أنّ على المُطوّر البحث يدويًّا عن التنسيق الصحيح عند التغيير، ولن يكون الأمر سهلًا في مُعظم الأحيان، باعتبار أنّ بعض المُعامِلات (parameters) تُطبّق على العديد من المُحدّدات (selectors) عند التعديل، مع العلم أن أداة التخصيص الخاصّة بالإطار قد تساعد المُطوّر بعض الشيء، حيثُ أنها تستطيع ترجمة جميع تغييرات المُطوّر، ولمرّة واحدة، ولكن عند رغبة المُطوّر في تغيير مُعامل جديد، فعليه إعادة تحديث جميع قيم الحقول لكي يُعاد ترجمتها مرّةً أُخرى. استخدام Bootstrap مع LESS تعمل هذه الطريقة بجعل جميع متغيّرات Bootstrap مخزّنة في ملفّات ذات اللاحقة .less، وعلى المُطوّر العمل مع هذه المتغيّرات وترجمتها إلى ملفّات ذات اللاحقة .css (يدويًّا أو آليًّا) وكما تقتضي الضرورة. مع العلم أنّ في ملفّ HTML كل ما يجب عمله هو ربط ملفّات CSS المُترجمة، ولذلك فإن هذه الطريقة هي الطريقة الأفضل والأكثر مرونةً. يوجد العديد من الطرق في تجميع أو ترجمة ملفّات LESS، وحرية الاختيار للمطوّر، مع العلم أنّ Bootstrap نفسه يستخدم Grunt في تجميع ملفّات less، ومن الخيارات المُتاحة هو WinLess لمُستخدمي ويندوز، أو SimpLESS لمُستخدمي أنظمة Mac، أو Koala لمُستخدمي لينكس، وتعمل جميع هذه الأدوات الأمر نفسه، وذلك عبر الوصول إلى ملفّات LESS والانتظار لحدوث أي تغيير فيها، وعندما يقوم المُطوّر بإجراء هذا التغيير، ستقوم الأداة بتجميع وإنشاء ملفّ CSS الموافق، ولذلك ليس على المُطوّر إجراء التجميع أو الترجمة يدويًّا بعد كل تغيير، فبكل بساطة يتم إجراء التغييرات ومن ثم الحفظ، لتظهر النتائج بشكل مُباشر على الموقع وهي بالفعل مُترجمة (compiled) ومضغوطة (compressed). إنشاء المشروع باستخدام Bootstrap سيتمّ في البداية إنشاء بُنيان وهيكليّة ملفّات المشروع وذلك عبر: إنشاء مُجلّد باسم المشروع وليكن whitesquare-bootstrap. إنشاء مجلدان فرعيان: الأول src للملفّات المصدريّة، والثّاني www لملفّات الموقع النهائيّة. إنشاء مجلد فارغ بالاسم images وملفّ فارغ بالاسم index.html داخل المُجلّد www. تنزيل Bootstrap ونسخ مُحتويات الملفّ المضغوط إلى مُجلّد www. تنزيل الملفّات المصدريّة الخاصّة بـ Bootstrap ونَسخ منها المُجلّد less، ووضعه في المُجلّد src الخاصّ بالمشروع. إنشاء ملفان بجانب المُجلّد less/bootstrap، يحمل الأوّل الاسم styles.less ويحمل الثّاني الاسم variables.less، ليتم استخدامهم في تعديل خصائص Bootstrap الأساسيّة، وهذا يُقدّم سرعة في التحديث والتعديل على التنسيق. سيتمّ في الخطوة التّالية إعداد عمليّة ترجمة ملفّات LESS إلى CSS. سيتمّ العمل على الأداة WinLess، وهي سهلة الاستخدام، فكل ما يجب عمله هو اختيار ‘Add folder’ منها، ومن ثُمّ تحديد مسار المُجلّد الّذي يحتوي ملفّات LESS: C:\whitesquare-bootstrap\src\less يحتوي المُجلد السابق على قائمة بجميع الملفّات، سيتمّ اختيار الملفين الأخيرين: styles.less و variables.less، ومن ثُمّ الضغط بالزر الأيمن واختيار من القائمة المُنسدلة الاختيار ‘Select output file’، ومن ثُم تحديد مسار ملفّات CSS. ..\..\www\css\styles.css ..\..\www\css\variables.css بعد ذلك، وعند إجراء أي تعديل على ملفّات LESS، سيتمّ إعادة الترجمة من جديد للحصول على ملفّات CSS مُترجمة وبالتعديلات الجديدة. ملاحظات أصبحت تركيبة وبنية المشروع جاهزة بعد إنشاء الملفّات السابقة، ولكن على المُطوّر الأخذ بعين الاعتبار الأمور التّالية قبل الشروع في التصميم: كيف ستقدّم الصّور، كيف سيتمّ توزيعها وتقسيمها في أرجاء الصّفحة. كيف سيتمّ استخدام المُكوّنات (components). ما هي التنسيقات الأساسيّة. ما هو المُخطّط النهائي. بعد الإجابة على الأسئلة السابقة من المُمكن المُتابعة مع التصميم. إعداد صور الموقع سيتمّ في هذه المرحلة تجهيز الصور والّتي ستستخدم في جميع الصفحات وليس لها علاقة بالمُحتوى، وستكون هذه الصور في المشروع الحالي على الشكل التّالي: الصورة الّتي تعرض عنوان الموقع (خريطة): images/map.png صور شعار الموقع: images/logo.png images/footer-logo.png صور الخلفيّة: /images/bg.png /images/h1-bg.png صور الأيقونات الاجتماعية، وهي مُقسّمة على صورتين ليتم استخدام أسلوب sprite معهم بهدف تحميل الصّفحة بشكل أسرع: /images/social.png /images/social-small.png المُكوّنات (Components) يَكمن الاختلاف بين تصميم الموقع باستخدام Bootstrap وبين التصميم باستخدام الأدوات الأصليّة (native) في أنّ Bootstrap يُقدّم مفهوم المُكوّنات (components)، وتُمثل هذه المُكوّنات أجزاءً شائعة من HTML مُعدّة بشكل مُسبق مع تنسيقها، وتَستخدم في بعض الأحيان هذه المُكوّنات جافا سكريبت، ومن المُمكن استخدام مكوّنات Bootstrap كما هي، أو يُمكن إعادة تنسيق هذه المُكوّنات، فكل ما يحتاجه الأمر هو تغيير قيم المُتغيّرات في Bootstrap لذلك، ولكن عند الرغبة في المزيد من المرونة في التغيير، فيُمكن للمُطوّر دائمًا تغيير وتعديل HTML و CSS كما يَحلو له، وفي العودة إلى المشروع، يُمكن مُلاحظة أنّه سيتمّ الحاجة إلى المُكوّنات التّالية: من أجل تصميم الأعمدة (columns) وتوزيعها، سيتمّ استخدام النّظام الشبكي (row, col). من أجل إجراء حقل البحث، والذي هو نموذج (form) من النوع "ضمن السطر" (inline) سيتمّ استخدام (form-inline - input-group - btn) من أجل التنقّل (navigation)، سيتمّ استخدام الوسم <nav> مع الصنف (navbar). من أجل القوائم الفرعيّة، سيتمّ استخدام قائمة مُجمّعة (group list) وباستخدام الصنف list-group. من أجل لوحة الظهور (panel) سيتمّ استخدام النصف panel. من أجل لوحة ظهور كبيرة سيتمّ استخدام الصنف jumbotron. من أجل إطارات الصور، سيتمّ استخدام thumbnail. تظهر جميع المُكونات السابقة في توثيق المكوّنات الخاصّ بـ Bootstrap. تنسيق أساسي يَملك Bootstrap بالفعل مُعظم التنسيقات المطلوبة للمشروع، ولكن سيتمّ الحاجة فقط إلى التعديل عليهم عند الحاجة، ويُمكن عمل ذلك بالتعديل على الملفّ src/less/variables.css. سيتمّ أوّلًا إضافة بعض المُتغيّرات والّتي لم يتمّ إعدادها افتراضيّا في Bootstrap، ولكي يتمّ استخدامها فيما بعد: يَضبط المُتغيّر التّالي الخط المُستخدم في المشروع: @brand-font: 'Oswald',sans-serif; كما سيتمّ التعديل على خيارات Bootstrap للتوافق مع رؤية المشروع، والّتي ستكون في مُعظمها تخصّ الألوان: /* gray background of the page */ @body-bg: #f8f8f8; /* blue background */ @ brand-primary: #29c5e6; /* background of panels */ @panel-bg: #f3f3f3; /* frame color of panels */ @panel-inner-border: #e7e7e7; /* remove rounding in blocks */ @border-radius-base: 0; /* primary buttons have blue background */ @btn-primary-bg: @brand-primary; /* if the screen width is more then 992px, then the container width is 960px */ @container-md: 960px; /* if the screen width is more 1200px, then the container width is 960px again */ @container-lg: @container-md; /* main font is Tahoma */ @font-family-base: Tahoma, sans-serif; /* base font size */ @font-size-base: 12px; /* main color of text */ @text-color: #8f8f8f; /* gray background of text fields */ @input-bg: @panel-bg; /* gray frame of text fields */ @input-border: @panel-inner-border; /* gray color of the text in the fields */ @input-color: #b2b2b2; سيتمّ البدء في كتابة التنسيقات الخاصّة بالمشروع، بعد أنّ تمّ الانتهاء من المُتغيّرات، وذلك في الملفّ styles.less، لكن يجب أوّلًا استيراد ملفّ Bootstrap العامّ وملفّ المُتغيّرات: @import "bootstrap/bootstrap.less"; @import "variables.less"; يَجدر الذكر هنا، أنّ ليس جميع التنسيقات (التي تكون مُعدّة من قبل الإطار نفسه) من المُمكن تغييرها باستخدام المُتغيّرات، بل يجب تغييرها يدويًّا: p { margin: 20px 0; } .form-control { box-shadow: none; } .btn { font-family: @brand-font; } body { border-top: 5px solid #7e7e7e; background-image: url(../images/bg.png); } ستقوم السطور السابقة بإزالة ظل عناصر النموذج (form elements)، وتحديد خطّ خاصّ للنصّ داخل الزر، وإضافة صورة خلفيّة لكامل الصّفحة وحدّ (border) علوي لها. لن يتمّ بعد الآن ذكر مكان وضع التنسيقات، فستكون دائمًا على الشكل التّالي: المُتغيرات في الملفّ variables.less، وجميع التنسيقات المُخصّصة ستكون في الملفّ styles.less. هيكل HTML يبدأ مُخطط الموقع عادةً بما يُسمى هيكل HTML أو HTML skeleton، وهو على الشكل التّالي: <!DOCTYPE html> <html> <head> <title>Bootstrap 3 page layout</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="css/styles.css" rel="stylesheet"> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> <![endif]--> </head> <body> </body> </html> تمّ في السطور السابقة العمل على بُنيان مُستند HTML5 الرئيسي، حيثُ تمّ في الوسم title الإشارة إلى عنوان الصّفحة، وهو ‘Bootstrap 3 page layout’، وفي الوسم <meta> تحديد عرض الصّفحة على أجهزة الهاتف المحمول ليكون مساويًا إلى عرض الشاشة، وضبط مُستوى التكبير (zoom level) في التحميل الأوّل للصفحة، ومن ثُم تمّ ربط صفحة التنسيق (stylesheet)، ومن أجل المُتصفّح Internet Explorer (قبل الإصدار التاسع) تم كتابة سكريبت يَسمح بعرض مُخطّط الصّفحة بشكل مُلائم. مُخطّط الصّفحة يتألّف مُخطّط الصّفحة من جزئيين: الحاوية الرئيسيّة للمُحتوى الرئيسي، والّتي تتمركز الشاشة وذيل الصّفحة (footer)، وتتألّف الحاوية الرئيسيّة من عمودين: المُحتوى الرئيسي، والشريط الجانبي (sidebar)، ويأتي من الجهة العلويّة رأس الصّفحة (header)، وشريط التنقل (nav)، وعنوان الصّفحة (heading). سيتمّ إضافة الشيفرة (الكود) التّالية إلى جذع الصّفحة (body): <body> <div class="wrapper container"> <header></header> <nav></nav> <div class="heading"></div> <div class="row"> <aside class="col-md-7"></aside> <section class="col-md-17"></section> </div> </div> <footer></footer> </body> تقدّم الشيفرة السابقة التقسيم العام الخاصّ بالأعمدة (columns)، وهي مُحتوات داخل الصنف (class) المُسمى صفّ (row)، وتبدأ أصناف الأعمدة بالبادئة col-، ومن ثم حجم الشاشة وهو أحد أربع (xs, sm, md, lg)، ومن ثم تنتهي بقيمة عرض العمود. يُمكن للأعمدة أنّ تُحدّد معًا وبقيم أصناف مُختلفة للشاشات، وتُعبّر هذه الأصناف عن عرض العمود لقياسات الشاشة المُختلفة، فمثلًا: class="col-xs-12 col-md-8" سيتمّ تطبيق الصنف col-xs-12 مع الشاشات كبيرة الحجم، وتطبيق الصنف col-md-8 على الشاشات الصغيرة، وتُطبّق هذه الأصناف على عرض الشاشات الأكبر والمساوي لقيمة الصنف المُحدّد، وعليه فإن تطبيق الصنف col-md-* على العنصر، سوف لن يؤثر على أجهزة الشاشات المُتوسطة فقط بل أيضًا على أجهزة الشاشات الكبيرة، وذلك في حال عدم حضور صنف من أصناف الشاشات الكبيرة (col-lg-*). تمّ في الشيفرة السابقة استخدام الأصناف col-md-7 و col-md-17 والّتي تُشير إلى أنّ كتلة <aside> ستستحوذ على عرض عمود ذو قياس 7 في الشاشات المُتوسطة، وستستحوذ الكتلة <section> على عرض عمود ذو قياس 17، وذلك نسبةً إلى الحاوية الأب (parent container)، مع العلم أنّ مجموع سعات الأعمدة في Bootstrap هو 12، ولكن تمّ زيادة العدد (إلى الضعف) وذلك بهدف الحصول على مزيد من المرونة في التوزيع، ولكن بشكل عام استخدام 12 عمود هو مناسب لمعظم التصاميم. سيتمّ في الشيفرة التّالية إضافة بعض الحشوة لمُلائمة التنسيق، وذلك إلى الصنف .wrapper، ورأس الصّفحة: body { ... .wrapper { padding: 0 0 50px 0; } header { padding: 20px 0; } } تمّ في الشيفرة السابقة الاستفادة من المعالج المُسبق (preprocessor) وذلك في صياغة التنسيق، حيثُ يَسمح لنا ذلك بكتابة تنسيقات مُتداخلة (nested) وبدون تكرار، والذي سيتمّ صياغتها بعد الترجمة إلى: body .wrapper {...} body header {...} يَسمح هذا الأسلوب من الإعداد في رؤية بُنيان HTML الصحيح داخل CSS، ويُقدّم نوعًا من الفرز والتنظيم في كتابة شيفرة CSS. الختام تمّ في هذا الجزء التعرّف على Bootstrap، وإعداد بيئة العمل، وكيفية بناء بُنيان ملفّات المشروع، في الجزء الثّاني سيتمّ الدخول في تصميم كل جزء من أجزاء الصّفحة. ترجمة – وبتصرّف – للمقال Page layout with Bootstrap 3.
  5. تعلّمنا في الدرسين السابقين كيفية إنشاء ونشر موقعنا الأوّل. في الحقيقة موقعنا حاليًّا بسيط وذو محتوى قليل وليس جذّابًا بعد. سنتعلّم في هذ الدرس كيف نستخدم تنسيقات CSS لتنسيق الصفحة. كما سنتعلّم في درس لاحق كيف نضيف المزيد من التنسيقات إلى موقعنا وذلك بمساعدة إطار عمل اسمه Bootstrap. البنية والتنسيق Structure and Style لنتذكّر معًا: يُعبّر HTML عن بنية صفحة الويب، في حين تُعرّف CSS المظهر العامّ للصفحة. يُعتبر فصل بنية الصفحة عن تنسيقها أمر في غاية الأهميّة وله الكثير من المزايا رغم أنّه ليس إلزاميًّا. لذلك سنعمل دومًا على جعل رُماز HTML وتنسيقات CSS في ملفات منفصلة. الربط مع ملف CSS ملف CSS هو ملف نص عادي له الامتداد (css.) ونربط معه من داخل ملف HTML. أنشئ ملف جديد ضمن المجلّد Portfolio وسمّه main.css. افتح الملف index.html واضف العنصر <link> ضمن العنصر <head>. سنخبر الصفحة index.html عن طريق العنصر <link> أن تُحمّل ملف CSS، أي سننشئ رابط بينهما: <link rel="stylesheet" href="main.css"> أضف العنصر السابق إلى العنصر <head>. ستبدو الشيفرة لديك مُشابهة لما يلي: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="main.css"> <title>Web Portfolio of Marco</title> </head> <body> <h1>Web Portfolio of Marco</h1> <h2>Welcome!</h2> <p>Thanks for stopping by.</p> <p>Please have a look around. In the blog section I document my experiences in programming. You may also look at my web projects. Have fun.</p> <img src="marco.jpg" alt="Picture of me"> <p>Marco :-)</p> </body> </html> ملاحظة مهمّة: لكي يكون من الممكن الوصول لملف CSS، يجب أن تحتوي السمة href على المسار الصحيح للملف. وهذا يعني بدوره أنّه إذا كان ملف CSS في مجلّد فرعي، يحب أن نضم هذا المجلّد الفرعي إلى مسار الملف كما هو واضح. يمكنك مراجعة هذا الموضوع في الدرس الأوّل في فقرة عناوين URL النسبيّة والمطلقة. الألوان إلى الآن ما يزال ملف CSS فارغًا، لنبدأ الآن بكتابة أولى تنسيقات CSS. تحوي CSS ما يُعرف بالقواعد CSS Rules. يمكننا باستخدام قاعدة CSS أن نُخبر المتصفّح كيف يُعالج جزءًا مُحدّدًا من مستند HTML. كمثال على ذلك، سنغيّر لون الخلفيّة ولون النص للعنوان من المستوى الثاني h2 ضمن الملف index.html الخاص بنا. أضف ما يلي إلى ملف CSS: الملف main.css h2 { background-color: #607d8b; color: #ffffff; } يجب أن تحصل على شكل شبيه بما يلي: أكواد الألوان Color Codes تظهر الألوان على الشاشة كمزيج من نسب متفاوتة من الأحمر والأخضر والأزرق (RGB). يمكن التعبير عن المزج بين هذه الألوان الثلاثة في CSS بطريقتين: كقيم RGB عشرية (محصورة بين 0 إلى 255 لكل لون) أو كقيم RGB ستة عشرية hex values. وفي الواقع تُستَخدم القيم الستة عشرية في الغالب. إذا نظرنا إلى مثالنا الأخير، فنجد أنّنا قد عيّنا لونًا أزرقًا مائلًا للرمادي كلون خلفية باستخدام كود اللون 607d8b# بالترميز الستة عشري. أمّا لو أردنا استخدام الترميز العشري المُكافئ له فسنكتب (rgb(96, 125, 139. في التمثيل الستة عشري، يُعبّر أوّل رمزين من اليسار عن اللون الأحمر، والرمزين في الوسط عن اللون الأخضر، ويُعبّر الرمزان الأخيران عن اللون الأزرق. العمل مع أكواد الألوان يُعتبر التعامل مع الألوان كأكواد، شائع جدًا لكنه صعب في الحقيقة. لأنّك تتعامل مع قيم ورموز وليس مع ألوان، يُنصح دوماً استخدام أداة لانتقاء الألوان color picker. إذا كنت تستخدم المحرّر Brackets عندها يمكن أن تفتح أداة انتقاء اللون الموجودة ضمن ملف CSS الذي تعمل ضمنه. فقط تحتاج لأن تنقر بزر الفأرة الأيمن على كود اللون وتختار تحرير سريع Quick Edit أو أن تضغط Ctrl+E من لوحة المفاتيح. يؤدي ذلك إلى ظهور أداة اختيار الألوان حيث يمكنك اختيار اللون الذي يناسبك بسهولة. كما يمكنك اختيار ترميز اللون بالصيغة التي ترغبها من خلال ثلاثة أزرار موجودة في الأسفل. أدوات اختيار الألوان من الانترنت إذا لم تتوفّر أداة لاختيار الألوان ضمن المحرّر لديك، فيمكنك استخدام عدد كبير جدًّا من هذه الأدوات ولكن على الانترنت، فعلى سبيل المثال لا الحصر: HTML Color Codes ColorPicker ألواح الألوان من الانترنت نحتاج في كثير من الأحيان إلى أكثر من لون واحد لاستخدامه في موقعنا. لذلك نحتاج إلى أداة تزوّدنا بمجموعة من الألوان المنسجمة، والتي تتناغم مع بعضها لإضفاء تأثير جميل على الموقع. وهذا ما تفعله ألواح الألوان color palettes. هناك بعض المواقع على الانترنت التي توفّر مثل هذه الميزة. أمثلة على مواقع بمجموعات ألوان معرّفة مسبقًا: Colour Lovers Design Seeds Google Color Palette أمثلة على مواقع تولّد مجموعات ألوان حسب رغبة المستخدم: Kuler: يُعرّف قاعدة لون (سنتكلّم عن القواعد بعد قليل)، ويسمح لنا بالحصول على خمسة ألوان منسجمة معًا. Paletton: أداة متقدّمة للحصول على مجموعات ألوان منسجمة. Colourco.de: مولّد ألواح ألوان عملي أيضًا. قواعد CSS رأينا كيف تُغيّر CSS من هيئة عناصر HTML من خلال تأثيرها على الألوان. لنلقي نظرة عن كثب حول CSS وطريقة عملها. تُعتبر القاعدة rule البنية الأساسية لـ CSS وهي تتكوّن من ثلاثة عناصر: المحدِّد Selector والخاصية Property والقيمة Value. تُشير القاعدة السابقة إلى أنّ جميع عناصر <h2> يجب أن يكون لها لون خلفية له الكود 607d8b#. محددات CSS تُقرّر المحدّدات أيّ عناصر HTML ستُطبّق عليها قاعدة CSS. ملاحظة: سنتعلّم هنا المحدّدات الأكثر أهمية. من أجل الاطلاع على أنواع المُحدّدات الأخرى ابحث في Google عن CSS Selectors. محددات النوع Type Selectors تستهدف محدّدات النوع جميع العناصر التي يكون لها وسم HTML مُحدّد. فلو أردنا مثلًا استهداف جميع عناصر الفقرة p ضمن المستند بتنسيقات معيّنة، فسنكتب شبيه بما يلي: CSS p { ... } HTML <p>...</p> <p>...</p> محددات الصنف Class Selectors تُستخدم هذه المحدّدات بشكل متكرّر، وتُعتبر أنّها مُخصّصة أكثر قليلًا من مُحدّدات النوع، كما أنّه بإمكانها استهداف مجموعة مخصّصة من العناصر بدلًا من عناصر النوع الواحد فقط. لاستخدام محدّدات الصنف نضيف السمة class إلى العنصر المراد استهدافه، ونسند إليها قيمة مُعبّرة من اختيارنا. عند استخدام محدّد الصنف فإنّنا نستخدم نقطة عادية يليها قيمة السمة class التي أضفناها إلى العنصر. سيستهدف محدّد الصنف في المثال التالي، جميع العناصر التي لها سمة class تحمل القيمة highlight: CSS .highlight { ... } HTML <p class="highlight">...</p> <p>...</p> <p class="highlight new">...</p> لاحظ من شيفرة HTML في الأعلى، أنّ التنسيق سيُطبّق على عنصر p الأوّل والثالث فحسب، لأنّ عنصر p الثاني لا يمتلك سمة class لها القيمة highlight. كما نلاحظ أنّ عنصر p الثالث له أكثر من قيمة ضمن سمة class الخاصة به (highlight وnew). في الحقيقة يمكن استخدام عدة قيم لعنصر واحد بشرط أن نفصل بينها بفراغات. محددات معرف العنصر ID Selectors تشبه هذه المحدّدات محدّدات الصنف. فهي تستهدف جميع عناصر HTML التي تملك السمة id بقيمة مُعيّنة. من المهم أن نوضّح أنّ السمة id عبارة عن مُعرّف العنصر ضمن شيفرة HTML ورغم أنّه ليس من الملزم وضعها مع كل عنصر، إلّا أنّه في حال وجودها يجب أن تكون القيمة التي تحملها فريدةً ضمن كامل مستند HTML. نستنتج إذًا أنّ أي محدّد معرّف عنصر سيستهدف في الواقع عنصر واحد فقط ضمن مستند HTML. عند استخدام محدّد معرّف العنصر فإننا نكتب الرمز # يليه معرّف العنصر (قيمة السمة id). سيستهدف محدّد معرّف العنصر في المثال التالي عنصر واحد فقط ضمن مستند HTML بحيث تكون قيمة السمة id له هي navigation: CSS #navigation { ... } HTML <p id="navigation">...</p> <p>...</p> محددات الفروع Descendant Selectors يمكنك باستخدام هذا النوع من المحدّدات استهداف العناصر الأبناء لعنصر مُعيّن. ونقصد بالعناصر الأبناء لعنصر معيّن، تلك العناصر التي تقع ضمن هذا العنصر بصرف النظر عن المستوى الذي تقع فيه. انظر المثال التالي: <p id="level1"> <p id="level2"> <a href="myfile.html">My File</a> </p> </p> نلاحظ بأنّ كلًّا من العنصر <p> (ذو المعرّف level2) والعنصر <a> هما ابنان للعنصر <p> (ذو المعرّف level1). لأنّهما يقعان ضمنه بصرف النظر عن المستوى. في حين يُعتبر العنصر (ذو المعرّف level2) ابنًا مباشرًا للعنصر <p> (ذو المعرّف level1). أمّا بالنسبة لمحدّدات الفروع فنلق نظرة خاطفة على هذ المثال البسيط قبل أن نبدأ بالشرح: CSS p a { ... } HTML <p> <a href="http://code.makery.ch">My Website</a> </p> <a href="http://www.example.com">Example Website</a> نلاحظ بأنّ محدّد الفروع p a يستهدف جميع عناصر <a> أينما وُجدَت داخل عنصر <p>. وبناءً عليه نجد أنّ التنسيق سيُطبّق على My Website وليس على Example Website لأنّ الأخيرة موجودة ضمن عنصر <a> لا يقع ضمن أي عنصر <p> كما هو واضح. ملاحظة: ليس من الضروري أن يكون العنصر <a> في المثال في الأعلى ابنًا مباشرًا للعنصر<p>. فمحدّد الفروع السابق يستهدف أي عنصر <a> موجود ضمن أي مستوى ضمن العنصر <p>. إذا أردنا استهداف الابن المباشر فحسب، فيمكننا استخدام مُحدّد الابن ( > ). خصائص CSS تُقرّر قواعد CSS كيف يجب أن تظهر عناصر HTML. هناك العديد من الخصائص التي يمكن تعريفها في CSS. في الواقع لقد صادفنا اثنتان منهم: background-color وcolor. لن نتوسّع في الحديث عن خصائص CSS المختلفة، لأنّ هذا الدرس ليس مرجعًا لهذه الخصائص، لكن سنتعلّم كيف نجد المزيد من المعلومات عنها بأنفسنا. سنستفيد بشكل أكبر عندما نتعلّم هذه الخصائص عندما نحتاج إليهم فعليّا. توجد حالتان مختلفتان يمكن أن نصادفهما لنتعلُّم المزيد عن CSS. الحالة الأولى: عندما نصادف خاصية CSS لا نعرفها في هذه الحالة نبحث عن معلومات عنها في الانترنت، اكتب اسم الخاصية متبوعًا بكلمة css ضمن محرّك البحث. يمكنك أن تجرّب هذه الطريقة الآن لتحصل على معلومات حول خاصية CSS جديدة وهي: padding: 5px; استخدم css padding كعبارة بحث. لا تكتفي بالاطلاع على نتيجة البحث الأولى، بل اطّلع على النتائج الخمس الأولى أو أكثر إن أحببت. بعد ذلك قرّر أيُّ المواقع ستوفّر المعلومات المناسبة لك. جرّب تطبيق قاعدة CSS السابقة (أي القاعدة padding: 5px) على عنصر h2 في مشروعنا. الحالة الثانية: نريد تغيير أسلوب عرض أحد العناصر ولكن لا نعرف خاصية CSS المناسبة ابحث في الانترنت عن الشيء الذي ترغب أن تقوم به، متبوعًا بكلمة css. ربما تحتاج إلى إجراء عدة عمليات بحث قبل أن تجد ضالّتك. فإذا أردنا مثلًا تغيير حجم النص. في هذه الحالة استخدم الكلمات التالية text size css في محرّك البحث. ومرّة أخرى لا تكتفي بالنتيجة الأولى فقط من نتائج البحث. قيم CSS لقد صادفنا قبل قليل بعضًا من قيم CSS، فمثلًا القيم الست عشرية مثل ffffff# أو تلك القيم المتعلّقة بتعيين قياسات الأحجام مثل 5px. يتوجّب علينا أحيانًا وبحسب خاصية CSS المستخدمة استخدام كلمات مُعيّنة مثل left أو right لمحاذاة النصوص على سبيل المثال. أكثر قيم CSS المستخدمة هي القيم المتعلّقة بتعيين قياسات الأحجام. لذلك سنتناولها بشيء من التفصيل. غالبًا ما يُعرّف الحجم باستخدام البيكسل Pixel، ونرمز له اختصارًا بالرمز px. p { font-size: 16px; } توجد إمكانية أخرى وهي تعيين الأحجام باستخدام النسبة المئوية Percentage. دائمًا ما تكون النسب المئوية نسبيّةً بالنسبة للعنصر الأب. في المثال التالي سيشغل العنصر p ما مقداره 60% من عرض width العنصر الأب الذي يقع ضمنه، في حين سيشغل العنصر الأب عرض النافذة كاملًا. p { width: 60%; } توجد وحدة قياس مشهورة أخرى للأحجام وهي em. والـ em ترتبط دومًا بحجم الخط. ويعني ذلك أنّنا إذا غيّرنا حجم الخط فإنّ حجم العنصر المُقاس بالوحدة em سيتغيّر أيضًا. كمثال على ذلك إذا كان لعنصر ما حجم خط مقداره 20px وعرض 5em، فسيكون عرض العنصر الفعلي في هذه الحالة 100px (أي 20 مضروبة بـ 5). انظر إلى الشيفرة التالية: p { font-size: 20px; width: 5em; } محددات الصنف في مشروعنا إذا أردنا تكبير العنوان الرئيسي في موقعنا: "Web Portfolio of Marco". فسيكون ذلك ممكنًا بتعريف قاعدة CSS للعنصر h1 كما يلي: h1 { font-size: 65px; } المشكلة التي ستصادفنا هنا أنّ جميع عناصر h1 الموجودة في المستند ستكبُر بتأثير هذه القاعدة. لذلك فإذا أردنا أن نُكبّر عنوان h1 الأوّل الموجود في المستند فسنستخدم لهذا الغرض مُحدّد صنف class selector. سنضيف السمة class إلى عنصر h1 المراد استهدافه، ويمكننا بالطبع إسناد أي قيمة لهذه السمة، سنختار القيمة title: <h1 class="title">Web Portfolio of Marco</h1> يمكننا الآن استهداف عنصر h1 هذا بكتابة قاعدة CSS بالشكل التالي: .title { font-size: 65px; } إذا جرت الأمور على ما يرام فستحصل على شكل شبيه بما يلي: سننتقل الآن إلى الدرس الرابع، والذي يتحدّث عن أدوات التطوير البرمجية المتاحة ضمن متصفّح الانترنت. ترجمة -وبتصرّف- للمقال HTML & CSS Tutorial - Part 3: Introduction to CSS لصاحبه Marco Jakob.
  6. يشرح هذا الجزء من سلسلة تعليم CSS كيف تعمل CSS في المتصفّحات وما الهدف من وجود DOM. سنتعلّم أيضًا كيف نُحلّل مستندًا بسيطًا. فهرس السلسلة: مدخل إلى أوراق الأنماط المتتالية (CSS). آلية عمل تعليمات CSS داخل المتصفحات. (هذا الدرس) المحددات (Selectors) في CSS. كيفية كتابة تعليمات CSS يسهل قراءتها. تنسيق نصوص صفحات الويب باستخدام CSS. التعامل مع الألوان في CSS. إضافة محتوى إلى صفحة ويب باستخدام CSS. تنسيق القوائم (Lists) في CSS. تعرف على الصناديق (Boxes) في CSS. رصف العناصر (Layout) في CSS. الجداول (Tables) في CSS. التعامل مع أجهزة العرض المختلفة والمطبوعات في CSS. كيفية عمل CSS عندما يعرض المتصفّح المستند، فإنّه يجمع محتواه مع معلومات التنسيق، ويُعالج المستند على مرحلتين: يحوّل المتصفّح لغة الرّماز وCSS إلى DOM (اختصارًا لـDocument Object Model). يُمثّل DOM المستند في ذاكرة الحاسوب، ويجمع محتوى المستند مع تنسيقه. يعرض المتصفّح محتويات DOM. تستخدم لغات الرّماز عناصر (elements) لتعريف هيكل المستند. يُحدّد العنصر بوسم (tag)، وهو نص يبدأ بالرّمز ‎<‎ وينتهي بالرّمز ‎>‎. معظم العناصر لها زوجان من الوسوم، وسم في البداية وآخر في النهاية. لكتابة وسم البداية أدرج اسم العنصر بين ‎<>‎، أما وسم النّهاية فيكتب بإضافة ‎/‎ بعد ‎<‎ وقبل اسم العنصر. قد يكون لبعض العناصر وسم بادئ فقط، أو وسم وحيد فيه تأتي ‎/‎ بعد اسم العنصر، وذلك تبعًا للغة الرّماز. قد يكون العنصر أيضًا حاويًا على عناصر آخرى ضمن وسْمَيه الأول والأخير. عليك التأكد من إغلاق الوسوم ضمن العنصر الحاوي. لـDOM بنية تشبه الشجرة، حيث يصبح كل عنصر أو خاصّة أو سلسلة من النصوص في لغة الرماز عقدة (node) في البنية الشجريّة. تُحدّد العُقد بعلاقتها بالعقد الأخرى، فبعض العناصر هي آباء (parent nodes) لعناصر آخرى (children nodes)، وقد يكون للأبناء إخوة (sibling nodes). يُعينك فهم DOM على تصميم وتنقيح وصيانة CSS، لأنّه يمثّل نقطة التقاء CSS مع محتوى المستند. مثال يُنشئ الوسم ‎<p>‎ ونظيره ‎</p>‎ عنصرًا حاويًا: <p> <strong>C</strong>ascading <strong>S</strong>tyle <strong>S</strong>heets </p> في هيكل DOM، تُعتير العقدة P أبًا، أبناؤه هي العقد STRONG والعقد النصيّة، وبالمثل فإنّ العقد STRONG آباء للعقد النّصيّة. ├─STRONG │ └─"C" ├─"ascading" ├─STRONG │ └─"S" ├─"tyle" ├─STRONG │ └─"S" └─"heets" تدريب: تحليل DOM باستخدام أداة فحص DOM لتحليل هيكل DOM، نحتاج إلى برنامج خاصّ، بإمكانك استخدام إضافة DOM Inspector من Mozilla لتحقيق ذلك. ما عليك إلا تثبيت الإضافة (المزيد من التفاصيل أدناه). استخدم متصفح Mozilla لفتح مستند HTML الذي أنشأته. من قائمة المتصفّح اختر: أدوات > DOM Inspector أو أدوات > تطوير الويب > DOM Inspector. تفاصيل أكثر إن لم يحوِ متصفح Mozilla عندك على أداة فحص DOM، فبإمكانك تثبيت الإضافة من موقع الإضافات وإعادة تشغيل المتصفح ثم العودة لهذا الدّرس. إن لم ترغب بتثبيت هذه الإضافة (أو لم تكن تستعمل متصفح من Mozilla)، بإمكانك استخدام Web X-Ray Goggles كما هو مشروح في القسم التالي. بإمكانك أيضًا تجاوز هذا القسم والمتابعة. في أداة فحص DOM، وسّع عقد المستند بالنقر على الأسهم. ملاحظة: قد تؤدي المسافات في ملف HTML إلى عرض عقد نصية فارغة، يمكنك تجاهلها. يبدو جزء من النتيجة مشابهًا لما يلي، تبعًا للعقد الّتي وسّعتها: │ ▼╴P │ │ │ ▼╴STRONG │ │ └#text │ ├╴#text │ ►╴STRONG │ │ عندما تختار أيّة عقدة، بإمكانك استخدام اللوحة على يمين DOM Inspector للاطّلاع على معلومات إضافية عنها، فمثلًا: يعرض DOM Inspector النص في اللوحة على اليمين عندما تحتار عقدة نصيّة. عندما تختار عقدة تمثّل عنصرًا، تُحلّل الأداة هذه العقدة وتقدّم معلومات كثيرة في اللّوحة على اليمين، يكون من ضمنها معلومات التنسيق. تمرين انقر على عقدة من نوع STRONG في أداة فحص DOM، ثم استخدم اللوحة على اليمين لإيجاد الموضع الّذي يُعيّن فيه لون العقدة إلى أحمر، والموضع الّذي يُجعل فيه خطّها أعرض من النصّ العاديّ. شاهد الحل في القائمة فوق اللوحة على اليمين، اختر CSS Rules، سترى عنصرين مُدرجين، أحدهما هو المصدر الداخلي الّذي ي يُعرّف font-width على أنّها bolder، والآخر آتٍ من ورقة الأنماط الّتي تُحرّرها والّذي يُعرّف color على أنّه red. استخدام Web X-Ray Goggles تعرض الأداة Web X-Ray Goggles معلومات أقل من DOM Inspector، ولكنّها أبسط في التثبيت والاستعمال: اذهب إلى الصّفحة الرئيسيّة للأداة. اسحب رابط العلامة المرجعيّة إلى شريط المتصفّح. افتح مستند HTML الّذي أنشأته. فعّل الأداة بالنقر على العلامة المرجعيّة في الشّريط. اسحب مؤشّر الفأرة فوق العناصر المختلفة في المستند. تتالي الأنماط ووراثتها سنتعلّم الآن كيف تتفاعل الأنماط المتتالية، وكيف ترث العناصر الأنماط عن آبائها، وكيف تضيف الأنماط إلى ورقة الأنماط مستفيدًا من فكرة الوراثة بحيث تغيّر تنسيق عدة أجزاء من المستند مرّة واحدة. قد يُحدّد النّمط النّهائي للعنصر في عدّة مواضع، تتفاعل فيما بينها بطريقة مُعقّدة، وهذا التّفاعل المعقّد يُعطي CSS قدراتها المُميّزة، ولكنّه قد يُعقّد الأمور ويجعل تتبّع الأخطاء عمليّة صعبة. تجتمع المصادر الثلاثة الأساسية لمعلومات التنسيق مشكّلة ما نسمّيه تعاقب الأنماط (cascade)، وهذه الأنماط هي: التنسيقات المبدئيّة الّتي يحدّدها المتصفّح للعناصر في لغة الرّماز. التنسيقات الّتي يحدّدها المستخدم الّذي يقرأ المستند. التنسيقات المرتبطة بالمستند الّتي يحدّدها مؤلّفه، والّتي قد تعيّن في ثلاثة مواضع: في ملفّ خارجيّ: وهذا الموضوع الأساسيّ لهذه الدّروس. في تعريف في بداية المستند: للتنسيقات الخاصّة بصفحة واحدة فقط. في عنصر معيّن ضمن متن المستند: وهي الطريقة الأقل سهولة في الصيانة، ويمكن استخدامها على سبيل التّجربة. تُغيّر أنماط المستخدم الأنماط الّتي يعيّنها المتصفّح، ثمّ تغيّر أنماط مؤلّف المستند تلك الّتي عيّنها المستخدم. في هذه السّلسلة أنت مؤلّف المستند، ولن نتعامل إلّا مع هذا النّوع من الأنماط. مثال عندما تقرأ هذا المستند في متصفّح، يأتي جزء من التنسيق الّذي تراه من الإعدادات المبدئيّة لـHTML في المتصفّح. وقد يأتي جزء آخر من الإعدادات المخصّصة للمتصفّح، إذ يمكن تخصيصها في مربع التفضيلات في Firefox مثلًا، أو يمكن تعيينها في ملف userContent.css في ملفّ المتصفّح الشّخصيّ. ويأتي الجزء الأخير من التنسيق من خادوم موقع الأكاديميّة. عندما تفتح المستند الّذي تتدرّب عليه في المتصفّح، تكون العناصر <strong> أعرض خطًّا من بقيّة النّصّ، هذا التنسيق يأتي من إعدادات المتصفّح المبدئيّة. كما أن العناصر نفسها ذات لون أحمر، وهذا التنسيق يأتي من ورقة الأنماط الّتي كتبناها بأنفسنا. ترث عناصر <strong> أيضًا معظم تنسيقها عن عناصر <p> لأنّها أبناؤها، وبالمثل ترث العناصر <p> معظم تنسيق عنصر <body>. يكون للتنسيقات الّتي يحدّدها مؤلّف المستند الأولويّة في تعاقب الأنماط على تلك الّتي يحدّدها القارئ، وتكون الأولويّة الأقل لتنسيقات المتصفّح المبدئيّة. بالنّسبة للتنسيقات الموروثة، يكون للتنسيقات المعرّفة على العقدة ذاتها الأولويّة على تلك الّتي ترثها عن آبائها. هناك قواعد أخرى لهذه الأولويّات، سنتعرّف عليها لاحقًا. تفاصيل أكثر توفّر CSS أيضًا طريقة للقارئ لحجب التنسيق الّذي يحدّده مؤلّف المستند باستخدام الكلمة !important. وهذا يعني أنّه لا يمكن توقّع الشّكل الّذي سيكون عليه المستند لكلّ قارئ. إذا أردت معرفة المزيد عن موضوع التعاقب والوراثة، انظر فقرة Assigning property values, Cascading and inheritance في تعريف CSS. تمرين: استخدام الوراثة حرّر ملفّ CSS الّذي تتدرّب عليه. أضف هذا السّطر بنسخه ولصقه. لا يهمّ إن كان فوق أو تحت السّطر الّذي أضفته من قبل. إلّا أن إضافته فوقه أكثر منطقيّة لأن العنصر <p> أب للعنصر <strong> في مستندك. p {color: blue; text-decoration: underline;} احفظ الملفّ وحدّث متصفّحك لتشاهد تأثير ذلك على المستند. يؤدّي ذلك إلى تسطير النّص في كامل الفقرة، بما في ذلك الحروف الأولى من كلّ كلمة، وهذا يعني أن العناصر <strong> ورثت عن أبيها نمط تسطير النّصّ. ولكّن هذه العناصر ما تزال حمراء اللّون، لأنّ اللون الأحمر هو نمطها الخاص، ولذا يكون له الأولويّة على اللّون الأزرق لأبيها العنصر <p>. قبل <p> <strong>C</strong>ascading <strong>S</strong>tyle <strong>S</strong>heets </p> strong {color:red} بعد <p> <strong>C</strong>ascading <strong>S</strong>tyle <strong>S</strong>heets </p> p {color:blue; text-decoration:underline} strong {color:red} تمرين عدّل ورقة الأنماط بحيث تكون الحروف الأولى فقط مُسطَّرة: شاهد الحل انقل التصريح الذي يُعنى بتسطير النّص من قاعدة <p> إلى <strong>، كما يلي: p {color: blue; } strong {color: orange; text-decoration: underline;} ما التالي؟ سنتعرّف في الدّرس التالي كيف نستهدف العناصر بطريقة أكثر انتقائيّة. ترجمة -وبتصرف- للمقال How CSS works من سلسلة Getting started with CSS على شبكة مطوّري Mozilla.
  7. القواعد الأساسية لا تضع إلا مكوِّن React واحدًا فقط في كل ملف. مع ذلك، يُسمح بوضع أكثر من مكوّن من الدوال عديمة الحالة (Stateless functions) في ملف واحد. استعن بقاعدة react/no-multi-comp في ESLint. استخدم دائمًا أسلوب الصياغة JSX. لا تستخدم التابع React.createElement إلا إذا كنت تهيئ التطبيق من ملف لا يستخدم صياغة JSX. Class مقابل React.createClass مقابل stateless استخدم class extends React.Component بدلًا من React.createClass إذا كانت لديك حالة أو مراجع (Refs) داخلية أو هما معًا. // سيّئ const Listing = React.createClass({ // ... render() { return <div>{this.state.hello}</div>; } }); // جيّد class Listing extends React.Component { // ... render() { return <div>{this.state.hello}</div>; } } أما إذا لم تكن لديك حالة داخلية أو مرجعية، فمن الأفضل استخدام الدوال العادية (وليس الدوال السهمية) بدلًا من استخدام الأصناف. // سيّئ class Listing extends React.Component { render() { return <div>{this.props.hello}</div>; } } // سيّئ (يُنصَح بعدم الاعتماد على استنباط اسم الدالة) const Listing = ({ hello }) => ( <div>{hello}</div> ); // جيّد function Listing({ hello }) { return <div>{hello}</div>; } الخلائط (Mixins) تجنب استخدام الخلائط. لماذا؟ لأنها تنطوي على اعتمادات (Dependencies) ضمنية، كما قد تتسبب في اشتباك الأسماء، وترفع درجة التعقيد. يمكن استبدال الخلائط في معظم الحالات بطرق أفضل عبر المكوّنات (Components)، أو المكوّنات ذات المستوى العالي (Higher-order components) أو الوحدات المساعدة. التسمية الامتدادات: استخدم الامتداد jsx. لمكوّنات React . اسم الملف: استخدم أسلوب التسمية PascalCase لأسماء الملفات. على سبيل المثال، ReservationCard.jsx. تسمية المراجع: استخدم أسلوب التسمية PascalCase لمكوّنات React وأسلوب camelCase لنسخ الكائنات (Instances). // سيّئ import reservationCard from './ReservationCard'; // جيّد import ReservationCard from './ReservationCard'; // سيّئ const ReservationItem = <ReservationCard />; // جيّد const reservationItem = <ReservationCard />; تسمية المكوّنات: استخدم اسم الملف كاسم للمكوّن. على سبيل المثال، ReservationCard.jsx ينبغي أن يكون اسم مرجعها ReservationCard. بالنسبة للمكوّنات الجذرية للمجلد (Root components)، استخدم index.jsx لاسم للملف واستخدم اسم المجلد لاسم المكوّن: // سيّئ import Footer from './Footer/Footer'; // سيّئ import Footer from './Footer/index'; // جيّد import Footer from './Footer'; تسمية المكوّنات ذات المستوى العالي (Higher-order Componen): استخدم مزيجًا من اسم المكوّن ذي المستوى العالي واسم المكوِّن المُمرَّر ليكون قيمة الخاصيّة displayName في المكوّن المُولَّد.على سبيل المثال، إذا مُرّر للمكوّن ذي المستوى العالي ()withFoo المكوّن Bar فإن الناتج ستكون قيمة الخاصيّة displayName لديه هي withFoo(Bar). لماذا ا؟ يمكن استخدام الخاصيّةdisplayName في أدوات المطوّرين أو في رسائل الخطأ، وعندما تعكس قيمتها تلك العلاقة بوضوح، فسيساعد ذلك على فهم ما يحدث. // سيّئ export default function withFoo(WrappedComponent) { return function WithFoo(props) { return <WrappedComponent {...props} foo />; } } // جيّد export default function withFoo(WrappedComponent) { function WithFoo(props) { return <WrappedComponent {...props} foo />; } const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component'; WithFoo.displayName = `withFoo(${wrappedComponentName})`; return WithFoo; } تسمية الخاصيّات (Props) : تجنب استعمال أسماء مكوّنات DOM لأغراض مختلفة. لماذا؟ يتوقع المطوّرون أنّ خاصيّات مثل style وclassName تعني أشياء محددة. تغيير الواجهة البرمجية هذه في جزء من تطبيقك يجعل الشفرة البرمجية أقل قابلية للقراءة والصيانة، ويمكن أن يتسبب في أعطاب. // سيّئ <MyComponent style="fancy" /> // جيّد <MyComponent className="fancy" /> // جيّد <MyComponent variant="fancy" /> التصريح Declaration لا تستخدم displayName لتسمية المكوّنات. بدلًا من ذلك، سمّ المكوّنات بمراجعها. // سيّئ export default React.createClass({ displayName: 'ReservationCard', // stuff goes here }); // جيّد export default class ReservationCard extends React.Component { } المحاذاة Alignment اتبع الأساليب التالية للمحاذاة في صياغة JSX. استعن بقاعدتيْ react/jsx-closing-bracket-location وreact/jsx-closing-tag-location في ESLint. // سيّئ <Foo superLongParam="bar" anotherSuperLongParam="baz" /> // جيّد <Foo superLongParam="bar" anotherSuperLongParam="baz" /> // if props fit in one line then keep it on the same line <Foo bar="bar" /> // children get indented normally <Foo superLongParam="bar" anotherSuperLongParam="baz" > <Quux /> </Foo> الاقتباس Quotes استخدم دائمًا علامات الاقتباس المزدوجة (") لخاصيّات JSX، وعلامات الاقتباس المفردة (') لبقية عناصر جافاسكريبت. استعن بقاعدة jsx-quotes في ESLint. لماذا؟ تستخدم خاصيّات HTML عادةً علامات الاقتباس المزدوجة بدلًا من المفردة، لذا فخاصيّات JSX تتبع هذا الاصطلاح. // سيّئ <Foo bar='bar' /> // جيّد <Foo bar="bar" /> // سيّئ <Foo style={{ left: "20px" }} /> // جيّد <Foo style={{ left: '20px' }} /> إدراج المسافات Spacing أضف دائمًا مسافةً واحدةً في الوسوم المنغلقة على ذاتها (Self-closing tags). استعن بالقاعدتين no-multi-spaces وreact/jsx-tag-spacing. // سيّئ <Foo/> // سيّئ جدًّا <Foo /> // سيّئ <Foo /> // جيّد <Foo /> لا تحش أقواس JSX المعقوصة بمسافات. استعن بالقاعدة react/jsx-curly-spacing. // سيّئ <Foo bar={ baz } /> // جيّد <Foo bar={baz} /> الخاصيات Props استخدم دائمًا أسلوب التسمية camelCase لتسمية الخاصيّات. // سيّئ <Foo UserName="hello" phone_number={12345678} /> // جيّد <Foo userName="hello" phoneNumber={12345678} /> احذف قيمة الخاصيّة عندما تكون قيمتها تساوي true على نحو صريح. استعن بالقاعدة react/jsx-boolean-value. // سيّئ <Foo hidden={true} /> // جيّد <Foo hidden /> // جيّد <Foo hidden /> أضف دومًا الخاصيّة alt في وسوم الصور(<img>). إذا كانت الصورة تقديمية (Presentational)، فيمكن للخاصيّة alt أن تكون نصًّا فارغًا وإلّا فيجب أن يحتوي الوسم <img> على الخاصيّة ‎role="presentation". // سيّئ <img src="hello.jpg" /> // جيّد <img src="hello.jpg" alt="Me waving hello" /> // جيّد <img src="hello.jpg" alt="" /> // جيّد <img src="hello.jpg" role="presentation" /> لا تستخدم كلمات مثل "image" أو "photo " أو "picture" أو "صورة" في خاصيّات alt الخاصة بوسوم <img>. استعن بالقاعدة jsx-a11y/img-redundant-alt. لماذا؟ تعلم برامج قراءة الشاشة أن <img> تعني صورة، لذلك لا توجد حاجة لإدراج هذه المعلومة في النص البديل (alt text). // سيّئ <img src="hello.jpg" alt="صورة مني وأنا أشير بيدي للترحيب" /> // جيّد <img src="hello.jpg" alt="أشير بيدي للترحيب" /> لا تستخدم إلّا أدوار ARIA الصالحة وغير المجردة. استعن بالقاعدة jsx-a11y/aria-role. // سيّئ، ليس من أدوار ARIA <div role="datepicker" /> // سيّئ، دور ARIA مجرّد <div role="range" /> // جيّد <div role="button" /> لا تستخدم الخاصيّة accesskey على العناصر. استعن بالقاعدة jsx-a11y/no-access-key. لماذا؟ تعقّد التناقضات بين اختصارات لوحة المفاتيح وأوامر لوحة المفاتيح التي يستعملها مَن يستخدمون برامج قراءة الشاشة ولوحة المفاتيح، تعقّد قابلية الوصول (Accessibility). // سيّئ <div accessKey="h" /> // جيّد <div /> تجنب استخدام فهرس مصفوفة (Array index) ليكون خاصيّة key. استخدم معرّفًا فريدًا بدلًا من ذلك. (لماذا؟). // سيّئ {todos.map((todo, index) => <Todo {...todo} key={index} /> )} // جيّد {todos.map(todo => ( <Todo {...todo} key={todo.id} /> ))} عرّف دائمًا قيمًا افتراضيّة (defaultProps) للخاصيّات غير المطلوبة. لماذا؟ تعدّ القيم الافتراضيّة وسيلة للتوثيق، وتوفيرها سيجنّب قارئ الشفرة البرمجية كثيرًا من التخمينات. علاوةً على ذلك، قد يعني تعيين القيم الافتراضية أنك تستطيع الاستغناء عن التحقق في نوع البيانات أحيانا. // سيّئ function SFC({ foo, bar, children }) { return <div>{foo}{bar}{children}</div>; } SFC.propTypes = { foo: PropTypes.number.isRequired, bar: PropTypes.string, children: PropTypes.node, }; // جيّد function SFC({ foo, bar, children }) { return <div>{foo}{bar}{children}</div>; } SFC.propTypes = { foo: PropTypes.number.isRequired, bar: PropTypes.string, children: PropTypes.node, }; SFC.defaultProps = { bar: '', children: null, }; لا تُسرف في استخدام الخاصيّات الممدَّدة (Spread props). لماذا؟ لكي تتجنب قدر الإمكان تمرير الخاصيّات التي لا داعي لها إلى المكوّنات. بالنسبة للإصدار React v15.6.1 والإصدارت الأقدم، ستتجنب كذلك تمرير سمات HTML غير صالحة إلى نموذج DOM. استثناءات: المكوّنات ذات المستوى العالي التي تغلّف الخاصيّات وترفع الخاصيّة propTypes إلى أعلى النطاق (Hoist): function HOC(WrappedComponent) { return class Proxy extends React.Component { Proxy.propTypes = { text: PropTypes.string, isLoading: PropTypes.bool }; render() { return <WrappedComponent {...this.props} /> } } } تمديد الكائنات بخاصيّات معروفة وواضحة يمكن أن يكون مفيدًا خصوصًا عند اختبار مكوّنات React بالتركيب forEach في Mocha. export default function Foo { const props = { text: '', isPublished: false } return (<div {...props} />); } ملحوظة: حاول تصفية الخاصيّات التي لا داعي لها، واستخدم prop-types-exact لمساعدتك على تجنب العلل. // جيّد render() { const { irrelevantProp, ...relevantProps } = this.props; return <WrappedComponent {...relevantProps} /> } // سيّئ render() { const { irrelevantProp, ...relevantProps } = this.props; return <WrappedComponent {...this.props} /> } المرجعيّات Refs استخدم دائمًا رد نداء (Callback) للمراجع (Refs). استعن بالقاعدة react/no-string-refs. // سيّئ <Foo ref="myRef" /> // جيّد <Foo ref={(ref) => { this.myRef = ref; }} /> الأقواس ضع وسوم JSX بين أقواس إذا امتدت على أكثر من سطر واحد. استعن بالقاعدة react/jsx-wrap-multilines. // سيّئ render() { return <MyComponent variant="long body" foo="bar"> <MyChild /> </MyComponent>; } // جيّد render() { return ( <MyComponent variant="long body" foo="bar"> <MyChild /> </MyComponent> ); } // جيّد، بالنسبة لسطر واحد render() { const body = <div>hello</div>; return <MyComponent>{body}</MyComponent>; } الوسوم Tags استخدم دائمًا الإغلاق الذاتي (Self-close) للوسوم التي لا أبناء لها. استعن بالقاعدة react/self-closing-comp. // سيّئ <Foo variant="stuff"></Foo> // جيّد <Foo variant="stuff" /> اجعل إغلاق الوسوم في سطر جديد إذا كان للمكوّن خاصيّات متعددة الأسطر. استعن بالقاعدة react/jsx-closing-bracket-location. // سيّئ <Foo bar="bar" baz="baz" /> // جيّد <Foo bar="bar" baz="baz" /> التوابع Methods استخدم الدوال السهمية في المتغيرات المحلية. function ItemList(props) { return ( <ul> {props.items.map((item, index) => ( <Item key={item.key} onClick={() => doSomethingWith(item.name, index)} /> ))} </ul> ); } اربط معالجات الأحداث الخاصّة بتابع التصيير (Render methode) داخل المنشئ. استعن بالقاعدة react/jsx-no-bind. لماذا؟ استدعاء bind في مسار التصيير (Render path) يُنشئ دالة جديدة لكل تابع تصيير. // سيّئ class extends React.Component { onClickDiv() { // do stuff } render() { return <div onClick={this.onClickDiv.bind(this)} />; } } // جيّد class extends React.Component { constructor(props) { super(props); this.onClickDiv = this.onClickDiv.bind(this); } onClickDiv() { // do stuff } render() { return <div onClick={this.onClickDiv} />; } } لا تستخدم الشرطة السفلية (_) في بداية أسماء التوابع الداخلية لمكوّنات React . لماذا؟ تُستخدَم الشرطات السفلية في بداية أسماء المتغيّرات في لغات أخرى للدلالة على الخصوصية. ولكن، خلافًا لتلك اللغات، لا يوجد دعم أصيل للخصوصية في جافاسكريبت، فكل شيء فيها عام. إضافة شرطة سفلية في بداية أسماء الخاصيات، بغض النظرعن نواياك، لا يجعلها خاصة، ويجب أن تُعامَل كل الخاصيات (مسبوقة بالشرطة السفلية أو لا) على أنها عامة. انظر إلى النقاش حول 1024# وenter link description here للتعمّق. // سيّئ React.createClass({ _onClickSubmit() { // do stuff }, // other stuff }); // جيّد class extends React.Component { onClickSubmit() { // do stuff } // other stuff } تأكد من إرجاع قيمة في توابع التصيير. استعن بالقاعدة react/require-render-return. // سيّئ render() { (<div />); } // جيّد render() { return (<div />); } الترتيب Ordering الترتيب عند تمديد الصنف React.Component لإنشاء مكوّن React جديد (class extends React.Component): التوابع الثابتة (static) الاختيارية، constructor getChildContext componentWillMount componentDidMount componentWillReceiveProps shouldComponentUpdate componentWillUpdate componentDidUpdate componentWillUnmount معالجات الأحداث والنقر مثل ‎onClickSubmit‎()‎ أو ‎onChangeDescription‎()‎ توابع الوصول الخاصة بـ render مثل getSelectReason()‎ أو getFooterContent()‎ توابع render الاختيارية مثل renderNavigation()‎ أو renderProfilePicture()‎. render. كيفية تعريف propTypes وdefaultProps وcontextTypes import React from 'react'; import PropTypes from 'prop-types'; const propTypes = { id: PropTypes.number.isRequired, url: PropTypes.string.isRequired, text: PropTypes.string, }; const defaultProps = { text: 'Hello World', }; class Link extends React.Component { static methodsAreOk() { return true; } render() { return <a href={this.props.url} data-id={this.props.id}>{this.props.text}</a>; } } Link.propTypes = propTypes; Link.defaultProps = defaultProps; export default Link; • الترتيب الخاص بـ React.createClass. استعن بالقاعدة react/sort-comp. displayName propTypes contextTypes childContextTypes mixins statics defaultProps getDefaultProps getInitialState getChildContext componentWillMount componentDidMount componentWillReceiveProps shouldComponentUpdate componentWillUpdate componentDidUpdate componentWillUnmount معالجات الأحداث والنقر مثل ‎onClickSubmit‎()‎ أو ‎onChangeDescription‎()‎ توابع الوصول الخاصة بـ render مثل getSelectReason()‎ أو getFooterContent()‎ توابع render الاختيارية مثل renderNavigation()‎ أو renderProfilePicture()‎. render لا تستخدم isMounted. استعن بالقاعدة react/no-is-mounted لماذا؟ استخدام isMounted غير مجدٍ (Anti-pattern)، وهو غير متوفر عند استخدام أصناف ES6، كما أنه سيُلغى رسميًّا قريبا. ترجمة - وبتصرّف - للمقال Airbnb React/JSX Style Guide.
  8. إعداد الصفحة لا يحتوي هذا التطبيق على تلك الإعدادات المتقدمة عند إنشاء مستند جديد أسوة ببرامج مايكروسوفت وورد أو ليبر أوفيس رايتر، إذ أنه بمجرد فتح مستند جديد من خلال جوجل درايف أو من خلال التطبيق نفسه بالذهاب إلى القائمة File > New > Document فإن صفحة مستند جديد ستظهر بكل بساطة بدون أية نوافذ أخرى لتحديد حجم الصفحة أو اتجاهها أو الهوامش أو أية تفاصيل أخرى، ولدى التطبيق مجموعة ضئيلة من أدوات تنسيق الصفحة نجدها في القائمة File > Page Setup حيث ستظهر لنا نافذة منبثقة صغيرة تحوي مجموعة بسيطة من خيارات الصفحة وهي: اتجاه الصفحة Orientation بحيث نستطيع أن نختار إما الخيار الطولي Portrait (الافتراضي) أو العرضي Landscape. حجم الصفحة Paper Size حيث توجد في القائمة 11 حجمًا مختلفًا تعتبر الأحجام القياسية لمعظم المستندات. لون الصفحة Page Color حيث يمكننا اختيار لون أرضية مختلف عن اللون الأبيض الافتراضي حيث تتضمن قائمة الألوان 80 لونًا محدّدًا سلفًا للاختيار منها ويمكن اختيار لون آخر من ملايين الألوان عبر الخيار Custom. الهوامش Margins من الجهات الأربع. زر تحديد كافتراضي Set As Default حيث إن نقرنا عليه ستصبح جميع المستندات الجديدة التي ننشئها لاحقًا بهذه الخصائص التي عدلناها. وبعد إنشاء المستند الجديد وتجهيز إعدادات الصفحة الخاصة به فإن أول أمر علينا القيام به هو تحديد اسم المستند، ويتم ذلك بالنقر على عنوان المستند في أعلى نافذة التطبيق حيث أن الاسم الافتراضي الممنوح لكل مستند جديد هو (بلا اسم) ثم كتابة اسم المستند ويكفي النقر خارج خانة الاسم ليتم حفظ هذا المستند بهذا الاسم ضمن سحابة جوجل درايف آليًا وبشكل مباشر. تنسيق الفقرات يحوي كل مقال أو كتاب أو درس على أنواع معينة من التنسيقات والفقرات كالعناوين بمختلف مستوياتها والفقرات الاعتيادية، ولتحديد نوع الفقرة يتوجب علينا تحديد الفقرة ومن ثم النقر على خيار تنسيق الفقرات في شريط الأدوات العلوي ولفهم الأمر بطريقة أبسط سنكتب في مستند التجربة الذي أنشأناه للتو ما يلي: ثم نحدد فقرة (عنوان رئيسي) وننقر على خيار تنسيق الفقرات في شريط الأدوات العلوي. ثم نختار خيار (العنوان) ليصبح تنسيق الفقرة بحجم خط أكبر. وسنتابع لبقية الفقرات بذات الطريقة لنختار خيار (عنوان فرعي) و(عنوان3) و (نص عادي) لبقية الفقرات بالتسلسل. ولتغيير هذا النمط من تنسيقات الفقرات يمكننا مثلًا تغيير نوع الخط للعنوان وحجمه ولونه وليكون هذا النمط الجديد متبعًا بشكل دائم ضمن المستند كتنسيق عنوان افتراضي نحدد العنوان وننقر على خيار تنسيق الفقرات في شريط الأدوات العلوي ثم ننقر على السهم الصغير بجانب العنوان ونختار الخيار (تحديث “العنوان” للتوافق). الآن في حال طبقنا هذا التنسيق على فقرة أخرى فإنها ستكون بنفس التنسيق المحدد من قبلنا هنا. والأمر ذاته ينطبق على بقية الفقرات المختلفة. وفي حال أردنا أن تكون التنسيقات التي قمنا بتعديلها دائمة لجميع المستندات المستقبلية فيمكننا من ذات القائمة اختيار (حفظ كأنماطي الافتراضية) من (خيارات) ويمكننا إيجاد جميع هذه الخيارات من قائمة (تنسيق). نستطيع تطبيق تنسيقات النصوص المختلفة أسوة ببقية برامج تحرير النصوص تمامًا، حيث سنجد في قائمة (تنسيق) خيار الكتابة من اليمين إلى اليسار وبالعكس ومما يميز تطبيق مستندات جوجل أنه عند تغيير اللغة التي سنكتب فيها فإنه يقوم تلقائيًا بتعديل اتجاه الكتابة بحسب اللغة المستخدمة. وكذلك الخيارات الاعتيادية الموجودة في شريط الأدوات العلوي والموجودة بدورها في قائمة (تنسيق) يمكننا تطبيق الخط العريض (غامق) والمائل والتسطير تحت وخلال النص وباقي الخيارات كما في هذا المثال. كما نستطيع تغيير لون النص وكذلك لون التمييز المحيط بالنص عبر الأداة الموجودة في شريط الأدوات. وللقيام بتطبيق محاذاة النص لليمين، اليسار أو الوسط وكذلك حتى الضبط عبر الخيارات في شريط الأدوات العلوي. ولتخصيص مستوى تباعد الأسطر ضمن الفقرة يمكننا جعله مفرد أو مزدوج أو بأرقام مخصصة أو من اختيارنا كما نستطيع إضافة مسافة قبل الفقرة وبعدها. وضع مسافة بادئة للفقرة بزيادة أو نقصان موجودة أيضًا ضمن شريط الأدوات العلوي. كما نستطيع تحديد هذه المسافة البادئة يدويًا عبر تحريك مزلاج المسافة البادئة (ضمن الدائرة الحمراء في الصورة). إدراج رابط في مستندات جوجل يتم بتحديد النص المطلوب وضع الرابط عليه ثم النقر على خيار إدراج الرباط من شريط الأدوات العلوي ثم وضع الرابط ضمن النافذة المنبثقة. كما نستطيع تنسيق القوائم المنقطة والمرقمة عبر مجموعة من التنسيقات الجاهزة والموجودة ضمن شريط الأدوات العلوي. للحصول على قوائم كهذه: الخلاصة تعلمنا في هذا الدرس أهم الأدوات ضمن شريط الأدوات العلوي وكيفية إعداد الصفحة وتنسيق الفقرات ضمن تطبيق مستندات جوجل.
  9. تعلمنا في الدرس السابق (إنشاء جدول لعلامات الطلاب) كيفيَّة إنشاء جدول وتنسيقه كاملًا بدءًا من رأس الجدول وجسمه وحتى تذييله، وإدراج الحدود وتنسيقها، وتطرَّقنا إلى موضوع التوابع حيث أدرجنا وشرحنا بعضًا منها. سنكمل في هذا الدرس موضوع تنسيق الخلايا ولكن من حيث المحتوى وسنتطرَّق إلى إدراج الروابط وكيفيَّة الاستفادة منها بالتنقل بين أوراق العمل ثمَّ سننشئ قائمة منسدلة بتحديد عدد معين من البيانات لإدخالها في الخليَّة وذلك بالتطبيق العملي عبر إنشاء تقرير مبيعات يومي. إنشاء جدول المبيعات ننشئ جدولًا جديدًا ونسميه "تقرير المبيعات اليومية" وننشئ ورقتي عمل الأولى هي بيانات المبيعات لإدخال بيانات المواد التي تُباع والثانية هي المخزون لإدخال بيانات المواد المتوافرة؛ نضيف أسماء الحقول اللازمة وهي البيانات التي نحتاج إدخالها أو استنتاجها عند كل عملية بيع نقدية، ونُنسِّق للخلايا ونخفي خطوط الشبكة من عرض ← خطوط الشبكة لإعطاء مظهر جمالي للورقة. يظهر جدول بيانات المبيعات كما موضح في الصورة. بعد تنسيق جدول بيانات المبيعات نضغط على خصائص ورقة بيانات المبيعات ثمَّ نختار "تكرار" لتكرار الورقة وذلك لتوفير عناء إعادة تنسيق الخلايا من جديد ويبقى لدينا تعديل حقول الجدول فقط ليوافق جدول المخزون. سيظهر جدول المخزون النهائي كما هو موضح في الصورة. يمكن إضافة حقول أخرى في هذا الجدول متعلِّقة بالمُنتج مثل السعر الإفرادي والكميَّة المتوافرة وغيرها من المعلومات. إدراج رابط قد تتساءل عن الهدف من كتابة عبارة "بيانات المبيعات" وعبارة "المخزون" أعلى الجدولين السابقين إذ سنجعلها زرين ننتقَّل بالضغط على أحدهما إلى ورقة العمل المقابلة وذلك لتسهيل التنقُّل بين أوراق العمل. نحدِّد خليَّة "بيانات المبيعات" ثمَّ نختار من قائمة إدراج ← رابط أو من شريط الأدوات نختار "رابط" أو باستعمال الاختصار Ctrl +K ونختار من قائمة "الأوراق" ورقة بيانات المبيعات؛ نفعل الأمر ذاته مع خليَّة "المخزون". نستطيع بالضغط على الخليَّة أو الرابط الأزرق الذي يظهر فوقها التنقُّل بسهولة بين أوراق العمل في الجدول. يمكن باستعمال إدراج رابط الإشارة إلى خلايا ذات نطاق محدَّد أيضًا أو إدراج رابط خارجي. تنسيق محتوى الخلايا يتألف الجدول من صفوف (أسطر) وحقول (أعمدة) وتكون الحقول ذات نوع واحد من البيانات أي يحتوي الحقل على تواريخ ميلاد أو أسماء طلاب أو منتجات أي نصوص أو نسب مئوية ...إلخ. بينما يضم السطر حقولًا عدَّة وبذلك يجمع بيانات ذات أنواع مختلفة وتعطي بمجملها معلومة مفيدة عن شخص أو مُنتج ...إلخ. قد نحتاج إلى تنسيق محتوى الحقول بما أنَّها تضم نوع واحد من البيانات بطريقة تناسب الجدول مثل تحديد عدد الفواصل العشرية إن كانت بيانات الحقل هي أرقام أو تحديد صيغة معيَّنة لإدخال التاريخ ضمن الحقل الذي يحتوي على تواريخ ميلاد أو يمكن اختيار تنسيق النسبة المئوية أو تنسيق العملة للحقل الذي يحتوي على نسبة مئوية أو عملة معيَّنة إلى ما هنالك من تنسيقات سنستعرضها كاملًا. نبدأ بتنسيق محتوى العمود الأول من جدول المبيعات وهو حقل "التاريخ" حيث نحدِّد العمود بأكمله بالضغط على الخليَّة A أو نحدِّد نطاق الخلايا بدءًا من الخليَّة أسفل التاريخ وحتى آخر الجدول ثمَّ نختار من قائمة التنسيق ← رقم ← التاريخ أو نضغط على "مزيد من التنسيقات" من شريط الأدوات في قسم التنسيقات ونختار "التاريخ" وبذلك تصبح الخلايا مخصَّصة لإدخال التاريخ مع عدم الاعتراض على إدخال بيانات مخالفة في الخليَّة. نغيِّر تنسيق محتوى حقل الوقت بالطريقة ذاتها إلى نوع "الوقت"؛ يوجد الكثير من تنسيقات التاريخ والوقت بالإضافة إلى إمكانيَّة تصميم التنسيق الذي نريده؛ نجد ذلك في قائمة تنسيق ← رقم ← المزيد من التنسيقات ← المزيد من تنسيقات التاريخ والوقت. يمكن اختيار أحد التنسيقات الموجودة والتعديل عليها بالضغط على "اليوم" واختيار "إضافة صفر" مثلًا أو وضع اختصار للشهر بدلًا من الاسم الكامل أو وضع رقمين للدلالة على العام، ويمكن تصميم التنسيق الذي ترغب به بالضغط على السهم الصغير الموجود على يسار مربع الصيغة واختيار الصيغة المناسبة والتعديل عليها أيضًا. بعد اختيار التنسيق المناسب جرِّب إدخال تاريخ أو وقت ما وسوف يتغير تنسيقه مباشرةً إلى التنسيق الذي اخترناه للخليَّة وسيظهر بالضغط على الخليَّة مرتين رزنامة تسهِّل علينا تحديد التاريخ. ماذا لو أردنا من البرنامج الاعتراض وعدم قبول تاريخ غير صحيح أو عدم قبول أي قيمة سوى التاريخ؟ يوفِّر تطبيق جداول بيانات جوجل ذلك حيث نحدِّد خلايا حقل التاريخ ونضغط زر الفأرة الأيمن ونختار من أسفل القائمة خيار "التحقق من صحة البيانات" فتظهر نافذة شبيهة بالنافذة الموضحة بالصورة التالية. حدَّدنا مسبقًا نطاق البيانات؛ نختار من المعايير "التاريخ" ونحدِّد الخيار المناسب من القائمة اللاحقة. اخترنا في حالتنا "يعد تاريخًا صالحًا" كما توجد خيارات كثيرة يمكنك استكشافها لاحقًا. يوجد خياران يلجأ إليهما التطبيق إن كانت البيانات المدخلة غير صالحة أولهما هو عرض تحذير للمستخدم ينبهه أنَّ البيانات المدخلة غير صالحة مع إمكانيَّة إدخال تلك البيانات في الخليَّة، وثانيهما هو رفض إدخال القيمة غير الصالحة في الخليَّة إذ لا يمكن للمستخدم الانتقال إلى الخليَّة التالية حتى يُدخل قيمة صالحة في الخليَّة الحالية. يمكن إظهار رسالة مساعدة للمستخدم ترشده حول كيفيَّة إدخال قيمة صالحة في الخليَّة. نعرِّف بقيَّة حقول الجدول بالطريقة ذاتها بحث يكون نوع محتوى الخلايا "رقم" لحقل رقم العمليَّة وحقل "رقم المنتج" مع إزالة الفاصلة من التنسيق بالضغط على زر "تقليل المنازل العشرية" في قسم تنسيق محتوى الخليَّة في شريط الأدوات، ونوع "نسبة مئوية" لحقل نسبة الضريبة، ونوع "عملة" لحقول مقدار المبيعات ومقدار الضريبة والإجمالي؛ يظهر تنسيق الحقول كما هو موضح بالصورة التالية. إنشاء قائمة منسدلة سننشئ قائمة منسدلة لحقل الوصف ورقم المنتج لنتمكن من إضافة المواد بسهولة وسرعة؛ ننتقل أولًا إلى ورقة المخزون ونملأ جدول المخزون بالمواد المتوافرة للبيع أي نضيف رقم المادة واسمها أو وصف عنها لنتمكن من معرفة المواد المتوافرة لدينا عند البيع. نعود إلى ورقة بيانات المبيعات ونحدِّد حقل الوصف ثمَّ نضغط بزر الفأرة الأيمن ونختار "التحقق من صحة البيانات"؛ نختار من قائمة المعايير خيار "قائمة من النطاق" لتحديد البيانات من خلايا موجودة مسبقًا؛ نضغط على مربع صغير يشبه الجدول الموجود في مربع الإدخال لتحديد نطاق البيانات ثمَّ نذهب إلى ورقة المخزون ونحدِّد نطاق البيانات الموجودة في حقل الوصف ونضغط "موافق". نحدِّد بعد ذلك على خيار "إظهار القائمة المنسدلة في الخليَّة" ونحدِّد على خيار "رفض الإدخال" لمنع إدخال المواد غير المتوافرة في الخليَّة. نضغط على "حفظ" فيظهر سهمٌ صغيرٌ بجانب الخلايا؛ نضغط على السهم فتظهر قائمة بالمواد المتوافرة وتُحدَّث تلقائيًّا كلما حُدِّثت البيانات في ورقة المخزون. يمكن إنشاء قائمة منسدلة عبر خيار "قائمة العناصر" في معايير التحقق من صحة البيانات ولكن هذه العناصر ستكون دائمة ويمكن تعديلها يدويًا بينما ترتبط القائمة السابقة بنطاق من البيانات وتُحدَّث تلقائيًّا. بقيَّة المعايير هي مهمتك للتعرُّف عليها وتجريبها واحدة تلو الأخرى. الخاتمة أنشأنا جدولا مميزًا خاصًّا بنا لإدارة عملية البيع وتعلمنا بوساطته كيفيَّة تنسيق محتوى الخلايا وإدراج الروابط وكيفيَّة التحقق من صحة إدخال البيانات وإنشاء قائمة منسدلة. لم ننتهِ بعد من إنشاء هذا الجدول إذ سنتعلم في الدرس القادم الكثير من الأمور المفيدة والجديدة حول هذا التطبيق منها كيفيَّة حماية أوراق العمل والنطاقات عند مشاركة الملف وإضافة توابع جديدة.
  10. لقد تعرّفنا في الدرس السابق على جداول وورد وتعلّمنا كيفية إنشائها وبعدة طرق، بالإضافة إلى طريقة تحويل النصوص إلى جداول وبالعكس. في هذا الدرس سنتعلّم كيفية تخصيص الجداول أكثر بتعديل تخطيطاتها وتنسيقاتها. تخطيط الجدول توجد جميع الأوامر الخاصة بتخطيط الجدول في تبويب تخطيط Layout الذي يظهر عند تحديد الجدول أو وضع مؤشر الكتابة داخل إحدى خلاياه: إدراج/حذف الصفوف أو الأعمدة لإضافة عمود إلى الجدول، ضع المؤشر داخل العمود الذي تريد إضافة عمود إضافي بجانبه، ثم انقر على Insert Left لإدراج عمود على يسار العمود المحدد، أو Insert Right لإدراج عمود على يمين العمود المحدد: أو، إذا كنت تستخدم إصدار 2013 فما فوق من البرنامج، مرّر مؤشر الفأرة فوق الحد على يمين أو يسار العمود الذي تريد إضافة عمود آخر بجانبه، ثم انقر على أيقونة + التي ستظهر: وبنفس الطريقة تقوم بإضافة الصفوف. ضع المؤشر داخل الصف الذي تريد إضافة صف فوقه أو تحته، ثم انقر على Insert Above لإدراج صف أعلى الصف المحدد، أو Insert Below لإدراج صف أسفل الصف المحدد: أو مرر مؤشر الفأرة فوق حد الصف الذي تريد إضافة صف أعلاه أو أسفله، ثم انقر على أيقونة + التي ستظهر: أما لحذف صف، ضع مؤشر الكتابة داخل إحدى خلايا ذلك الصف، ثم اذهب إلى تبويب: تخطيط Layout > حذف Delete > حذف صفوف Delete Rows ولحذف مجموعة من الصفوف، قم بتحديد خلايا داخل تلك الصفوف (لا يشترط تحديد الصف بالكامل وإنّما خلية واحدة من كل صف) ثم انقر على Delete Rows من قائمة Delete: والأمر نفسه ينطبق على الأعمدة. حدّد خلية داخل العمود (أو مجموعة الأعمدة)، ثم انقر على Delete Columns من قائمة Delete: يمكنك أيضًا الوصول إلى أوامر الإدراج والحذف بالنقر على إحدى خلايا الصف/العمود بزر الفأرة الأيمن: تعديل حجم الخلايا يمكنك التحكم بحجم الخلايا بواسطة الأوامر والخيارات الموجودة في مجموعة حجم الخلية Cell Size في تبويب تخطيط Layout: من قائمة الاحتواء التلقائي AutoFit حدّد الخيار AutoFit Contents لمطابقة حجم الخلايا مع حجم النصوص (أي يصبح عرض العمود وارتفاع الصف أصغر ما يمكن): أو حدّد الخيار AutoFit Window لجعل عرض الجدول ككل يتناسب مع عرض الصفحة (أي ما بين الهوامش) ومن ثم تعديل أبعاد الصفوف والأعمدة وفقًا لذلك: أو الخيار Fixed Column Width لجعل عرض العمود ثابتًا مهما كان حجم النصوص التي يتم إدخالها: لاحظ في الصورة أعلاه كيف يتم إضافة سطر جديد لاحتواء النص كلما قمنا بإضافة نص جديد، وذلك لأننا حدّدنا الخيار Fixed Column Width. إذا كنت ترغب في استخدام عرض محدد للصفوف أو ارتفاع محدد للأعمدة، قم بإدخال قيم الأبعاد في حقولها المخصصة، Height و Width (أو استخدم السهم العلوي لزيادة البعد أو السفلي لتقليله): كذلك يمكنك تغيير أحجام الخلايا يدويًا. ضع المؤشر على حد الصف أو العمود إلى أن يتحول شكله إلى متجهين صغيرين، انقر على الحد (ستلاحظ ظهور خط منقط عبر الصفحة) ثم اسحب إلى الأعلى أو الأسفل لتغيير ارتفاع الصف، أو إلى اليمين أو إلى اليسار لتغيير عرض العمود: لديك أيضًا خيار توزيع الحجم بالتساوي على الأعمدة أو الصفوف المحددة. وهذا الخيار مفيد في توفير الوقت، بدلًا من محاولة تعديل كل صف أو كل عمود على حدة ليصبح حجمها متساوِ. حدّد مجموعة الصفوف/الأعمدة، ثم انقر على Distribute Rows/Distribute Columns: دمج/تقسيم الخلايا في بعض الأحيان تحتاج إلى تحويل مجموعة من الخلايا إلى خلية واحدة، لإدخال عنوان رئيسي لمجموعة من الأعمدة الفرعية مثلًا. للقيام بذلك، حدد مجموعة الخلايا التي تريد دمجها ثم انقر على أمر دمج الخلايا Merge Cells في مجموعة Merge: وبذلك ستتحول مجموعة الخلايا إلى خلية واحدة: أما للقيام بالعملية المعكوسة، أي تحويل الخلية الواحدة إلى مجموعة خلايا، حدد الخلية، ثم انقر على أمر تقسيم الخلايا Split Cells في مجموعة Merge: في مربع الحوار Split Cells قم بتحديد عدد الصفوف وعدد الأعمدة التي تريد تقسيم الخلية إليها ثم انقر على OK: محاذاة النصوص في الخلايا يمكنك التحكم بمحاذاة النصوص بواسطة الأوامر الموجودة ضمن مجموعة Alignment. يمكنك أن تجعل النص يتوسط مركز الخلية، أعلاها، أو أسفلها. وكذلك محاذاته إلى أسفل/أعلى اليمين، أو أسفل/أعلى اليسار. مرر الفأرة فوق كل أمر لمعرفة وظيفته، ثم انقر عليه لتطبيقه (لا يُشترط تحديد النص قبل تطبيق الأمر، يكفي أن تضع المؤشر داخل الخلية التي تحتوي النص): من خيارات المحاذاة الأخرى هو تغيير اتجاه النص وجعله عموديًا. ضع المؤشر داخل الخلية التي تحتوي النص الذي تريد تغيير اتجاهه ثم انقر على أمر اتجاه النص Text Direction: تنسيق الجدول توجد جميع خيارات وأوامر تنسيق الجداول ضمن تبويب تصميم Design السياقي. تعديل نمط الجدول توجد في معرض أنماط الجدول Table Style مجموعة متنوعة من الأنماط الجاهزة التي يمكن الاختيار من بينها، وهي من الطرق السريعة لتغيير تنسيق الجدول. بعض الأنماط بسيطة وبألوان فاتحة، وبعضها تحتوي على تفاصيل أكثر وألوان أكثر. ضع المؤشر داخل إحدى خلايا الجدول، ثم قم بتمرير الفأرة فوق الأنماط في المعرض لمعاينتها على الصفحة بشكل مباشرة، وعندما تحدد النمط المناسب لك، انقر عليه لاختياره: قد تختلف الأنماط باختلاف هيكلية الجدول، إذ يقوم البرنامج بعرض الأنماط التي تتناسب مع تخطيط الجدول المحدد. لاحظ كيف تختلف الأنماط في الصورة أدناه عن الأنماط الموضحة في الصورة أعلاه، وذلك بسبب اختلاف تخطيط الجدول: في مجموعة خيارات أنماط الجدول Table Style Options، ستلاحظ وجود مجموعة من الخيارات، بعضها مؤشر بشكل افتراضي. تختلف الخيارات المؤشرة حسب النمط المطبّق. تستطيع تأشير/إلغاء تأشير هذه الخيارات حسب ما تراه ملائمًا لجدولك. يمكنك مثلًا تأشير الخيار Total Row إذا احتوى جدولك على صف أخير لعرض الإجمالي، أو الخيار Last Column إذا كان الإجمالي في آخر عمودي في الجدول. وسيكون خيار Bended Rows مفيدًا إذا كان عدد الصفوف في جدولك كبيرًا، مما يساعد على سهولة القراءة وتمييز البيانات بسبب تلوين الصفوف الفردية بلون مختلف عن الصفوف الزوجية: تطبيق حدود وتظليل للخلايا إذا لم تكن ترغب في استخدام الأنماط الجاهزة، وتريد أن يكون جدولك بمظهر مخصص أكثر، يمكنك استخدام أوامر الحدود والتظليل Borders & Shading. من مجموعة Borders يمكنك اختيار نمط، سمك ولون الحد، ومن ثم رسمها يدويًا: وكذلك لديك خيار إضافة حدود لجميع جوانب الخلية المحددة، أو لجانب واحد فقط من قائمة Borders: يمكنك استكشاف المزيد من الخيارات والتحكم بها بالنقر على Borders & Shading (أو على أيقونة مشغل Border & Shading الموجدة عند زاوية مجموعة Borders). وفي الحالتين سيُفتح نفس مربع الحوار: من قسم Custom، اختر نمط الحد من قائمة Style، لونه من قائمة Color وعرضه من قائمة Width، واستخدم الأزرار في حقل المعاينة Preview لتطبيق الحدود. ومن قائمة Apply To حدد فيما إذا كنت تريد تطبيق الحدود على الجدول Table، على الخلايا Cell، أو على الفقرة Paragraph. انقر على OK بعد تخصيص جميع خياراتك. ولإضافة لون تعبئة للخلايا استخدم أمر Shading. قم أولا بتحديد الخلية (أو مجموعة الخلايا) التي تريد تعبئتها ثم انقر على تظليل Shading لاختيار أحد الألوان في القائمة (أو غيرها من الألوان بالنقر على More Colors): استكشف خيارات الحدود والتظليل وخصص جداولك ونسّقها بالشكل الذي تريده: من الخيارات المفيدة عند العمل على المستندات بصورة عامة هو إنشاء الجداول بدون حدود. إذ تحتاج في بعض الأحيان إلى إدراج قائمة من النصوص بهيكلية جدول، لكنك لا تريد لها أن تبدو كالجدول. وهذا الأمر يمكن تحقيقه ببساطة بإزالة الحدود. ضع المؤشر داخل أحد خلايا الجدول، ثم انقر على مسح Clear من معرض الأنماط: ستختفي حدود الجدول، لكن ستبقى الخطوط المنقطة ظاهرة، وهذه هي خطوط الشبكة التي يمكنك جعلها مخفية أيضًا بإلغاء تفعيل أمر عرض خطوط الشبكة View Gridlines في تبويب تخطيط Layout: عند إخفاء الحدود وخطوط الشبكة، سيتحول الجدول ليبدو كالنصوص العادية. ولكنّنا قلنا "إخفاء" وليس "إزالة"، أي أنّه في النهاية سيبقى محافظًا على هيكلية وخصائص الجدول. وفي هذه الحالة ما زال بإمكانك تغيير تخطيطه وتغيير تنسيقه من تبويبي Design و Layout، وكما وضّحنا في الفقرات السابقة:
  11. أنهينا الجزء الأكبر من العمل على تقرير المبيعات في الدرس السابق وستكون مهمتنا في هذا الدرس إضافة بعض اللمسات السحرية والتشطيبات النهائيَّة لبدء استعمال التقرير. سنتعلم في هذا الدرس بعض التوابع الجديدة التي سنضيفها إلى تقرير المبيعات وسنعرِّج على موضوع حماية أوراق العمل والنطاقات أثناء مشاركة الملف مع الآخرين ثمَّ سنتعرَّف على كيفيَّة استعمال التنسيق الشرطي. دمج مجموعة من التوابع استعملنا في الدرس السابق القائمة المنسدلة لإدراج المنتج المُباع (حقل رقم المنتج والوصف) ولكن توجد حقيقةً طريقة أخرى متقدمة نستعمل فيها التوابع لاختيار وصف المنتج بالبحث عنه في جدول المخزون. التوابع التي سنستخدمها هي: التابع طريقة الاستعمال الوصف IFERROR IFERROR(value, [value_if_error]) يُرجع هذا التابع القيمة الأولى إن لم تكن خطأً، وإن كانت خطأ فيرجع القيمة الثانية إن كانت موجودة أو يرجع قيمة فارغة. يُستعمل للتحكم في ظهور الأخطاء في الخلايا. IF IF(logical_expression, value_if_true, value_if_false) يُرجع القيمة الأولى (value if true) إن تحقَّق التعبير المنطقي (logical expression) ويرجع القيمة الثانية إن لم يتحقق. ISNA ISNA(value) يُستعمل للتحقُّق إن كانت القيمة (value) هي خطأ ذو الرمز "#N/A" أي غير متاح أو متوافر (not available) أو لا يتوافر جواب للعمليَّة، ويُرجع العبارة "true" إن كانت القيمة هي خطأ من النوع السابق أو يُرجع العبارة "false" إن لم تكن خطأ. VLOOKUP VLOOKUP(search_key, range, index, [is_sorted]) يُستخدم للبحث العمودي، ومُدخلات هذا التابع هي: search_key: القيمة التي نبحث عنها. Range: المجال الذي نبحث فيه. Index: رقم الحقل الذي نريد جلب القيمة المقابلة للقيمة التي نبحث عنها في العمود الأول من المجال المحدَّد. is_sorted: إن كانت القيم في المجال المحدَّد مرتَّبة نضع "true" وإن لم تكن مرتَّبة نضع "false". قبل استعمال التابع دعنا نفعل شيئًا يسِّهل عملنا؛ سننتقل إلى ورق المخزون ونحدِّد جدول المخزون أي عمود رقم المنتج والوصف ثمَّ نضغط بزر الفأرة الأيمن ونختار “تعريف النطاق المحدَّد” ونعطي للنطاق المحدَّد عنوان “المنتجات” ثمَّ نضغط على “تم“؛ إن أردنا استعمال النطاق السابق في التوابع أو أي مكان فما علينا سوى كتابة اسمه. مزيَّة عنونة النطاق هي بقاء النطاق ثابت مهما تحركت الخليَّة أو نُسخت إلى مكان آخر في الجدول إذ إن لم يُثبَّت النطاق فسيتغير نسبة إلى تغير عنوان الخليَّة. نُدرج التوابع السابقة في الخليَّة E8 للبحث عن الوصف المقابل لرقم المنتج المُدخل في الخليَّة D8 في جدول المخزون وذلك كما موضح في الصورة. استعملنا أولًا التابع IFERROR لإظهار الرسالة التي نريدها إن وُجد خطأٌ ما لتجنب ظهور رموز لا نرغب بها؛ وضعنا في الدخل الأول التابع IF والدخل الثاني الرسالة “لم يُعثر على المنتج” لإظهارها في حال وجود أي خطأ. القيمة المنطقية للتابع IF هي التابع ISNA مع التابع VLOOKUP للتأكد من وجود القيمة التي نبحث عنا؛ إذا لم يجد التابع VLOOKUP ما يبحث عنه فسيُرجع الخطأ ‎#N/A وحينئذٍ سيُرجع التابع ISNA العبارة true أي يوجد خطأ وبالتالي يأخذ التابع IF القيمة الأولى وهي “لم يُعثر على المنتج”. أمَّا إن وجد التابع VLOOKUP القيمة التي يبحث عنها فسيرجع التابع ISNA القيمة false أي لا يوجد خطأ وبالتالي سيختار التابع IF القيمة الثانية وهي التابع VLOOKUP أي القيمة التي يرجعها هذا التابع وهي التي نبحث عنها في جدول المخزون. لاحظ أنَّنا استعملنا عبارة “المنتجات” للدلالة على عنوان جدول المخزون الذي نودُّ البحث فيه ويمكن استعمال النطاق مباشرةً مع الضغط على F4 لتثبيت عنوان النطاق. نسحب الخليَّة E8 إلى الخلايا السفليَّة لنسخ العلاقة وستكون النتيجة كما موضح بالصورة. إن وَجدت للوهلة الأولى أنَّ الأمر معقدٌ فجرِّب كتابة العلاقة السابقة بنفسك وأعد قراءة الشرح مرةً أخرى وستفهمها بالتأكيد. حماية الأوراق والخلايا انتهينا من إنشاء تقرير المبيعات وأصبح جاهزًا للاستخدام. سنشارك هذا الجدول مع العامل ليُدخل بيانات المنتجات التي يبيعها ولكن ماذا لو غيَّر قيم خلايا لا يحق له تغييرها مثل تغيير قيم جدول المخزون أو تغيير محتوى خليَّة الوصف التي تعذبنا كثيرًا حتى أنشأناها أو في محتوى الخلايا الأخرى بقصد أو بغير قصد؟! سنضطر هنا إلى حماية الأوراق أو الخلايا من عبث الأشخاص الذين نشاركهم ملفاتنا وسنعطي كلَّ شخص الصلاحيات المناسبة للتعديل على الخلايا والأوراق. نضغط على السهم الموجود بجانب ورقة المخزون ونختار “حماية الورقة” أو نختار من قائمة البيانات ← الأوراق والنطاقات المحميَّة وستظهر قائمة في الطرف الأيسر. نضع وصفًا لحماية الورقة ثمَّ نحدِّد إن كنا نريد حماية الورقة بأكملها أو نطاق محدَّد ضمن الورقة ثمَّ نحدِّد اسم الورقة وإن كنا نريد أن نستثني بعض الخلايا ليتاح تعديلها ثمَّ نضغط على “تعيين الأذونات“. يظهر لدينا خيارين؛ الخيار الأول هو إظهار تحذير عند تعديل النطاق أو الورقة المحميَّة إذ تظهر رسالة تنبهك إلى أنَّه لا يفترض تعديل هذا النطاق وإن كنت واثقًا من التعديل فاضغط موافق سواءً لك أو لمن تشاركهم الملف. الخيار الثاني هو تقييد من يمكنه تعديل النطاق أو الورقة ومنع جميع الأشخاص من التعديل باختيار “أنت فقط” أو اختيار “مخصص” للسماح لبعض الأشخاص من التعديل على الورقة أو النطاق بوضع إشارة بجانب أسمائهم. عند حماية الورقة أو الخلايا لن يتمكن الآخرون من التعديل عليها ولكن يستطيعون رؤيتها بحسب الإذن المعطى لهم. يمكن حماية حقول الوصف ونسبة ومقدار الضريبة والإجمالي في جدول بيانات المبيعات حتى لا يعبث أحدٌ بها فنحصل على معلومات خاطئة بالطريقة نفسها ولكن نختار “حماية نطاق” بدلًا من ورقة. فكرة إضافية: يمكن في جدول المخزون وضع سعر لكل قطعة وعندما نختار رقم المنتج يوضع سعرها في حقل بيانات المبيعات مباشرةً مثل حقل الوصف وهنا نحتاج إلى حقل يصف عدد المنتجات المُباعة وبذلك نحمي سعر المنتج ويتبقى إدخال التاريخ والوقت ورقم المنتج وعدد القطع المُباعة فقط. التنسيق الشرطي يُستعمل التنسيق الشرطي لتنسيق الخلايا اعتمادًا على مجموعة من القواعد يحدِّدها المستخدم والتي توازن محتوى الخليَّة مع تلك القواعد وتنسِّقها بناءً على ذلك. نستعمله في جعل لون الخليَّة أحمر مثلًا إن كانت تحوي عبارة “راسب” ليسهل علينا تحديد الطلاب الراسبين أو إن كانت قيمة الخليَّة أقل أو أكبر من قيمة معيَّنة؛ توجد الكثير من القواعد لتنسيق النصوص والتواريخ والأرقام ويمكن تخصيص قاعدة جديدة غير موجودة. يوفر تطبيق جداول بيانات google نوعين من التنسيق هما: لون فردي وتدرج ألوان؛ سنُنسق حقل مقدار الضريبة باللون الفردي لتحديد قيمة الضريبة الأقل من 200 ليرة. نحدِّد حقل مقدار الضريبة ونضغط بزر الفأرة الأيمن ونختار “تنسيق شرطي” أو من قائمة التنسيق ← تنسيق شرطي ثمَّ نختار قاعدة “أصغر من أو يساوي” ثمَّ نضع القيمة 200 ونحدِّد تنسيق الخليَّة ونضغط “تم“. سنُنسق حقل الإجمالي وفق تنسيق التدرج اللوني لمعرفة القيمة العظمى والقيمة الصغرى المباعة في اليوم. نضغط على إضافة قاعدة جديدة ونختار “تدرج اللون” ثمَّ نحدِّد خلايا الحقل في مربع “ينطبق على نطاق”؛ نختار التدرج اللوني المناسب ثمَّ نختار “الحد الأدنى” من خيارات القيمة الدنيا وخيار “الحد الأقصى” من خيارات القيمة العظمى. يظهر تنسيق الحقل كما موضح في الصورة. توجد قواعد كثيرة في التنسيق الشرطي تنتظرك لاستكشافها والتي تسهِّل عليك تنسيق جدولك وتحليل البيانات وقراءتها بسرعة. الخاتمة انتهينا من إنشاء تقرير المبيعات وأصبح جاهزًا لملء البيانات فيه وآمنًا لمشاركته مع الآخرين. إنَّ ما تعلمته إلى الآن يمكِّنك من إنشاء أغلب الجداول التي ستلزمك في جميع أمور حياتك اليوميَّة وبأفضل تصميم؛ كل ما عليك هو فتح تطبيق جداول بيانات جوجل والبدء بتصميم جدولك.
  12. في هذا الجزء من سلسلة تعلّم CSS، سنطّلع على أمثلة أكثر عن تنسيق الخطوط، ثم نطبّق ما تعلّمناه على ورقة أنماطنا. فهرس السلسلة: مدخل إلى أوراق الأنماط المتتالية (CSS). آلية عمل تعليمات CSS داخل المتصفحات. المحددات (Selectors) في CSS. كيفية كتابة تعليمات CSS يسهل قراءتها. تنسيق نصوص صفحات الويب باستخدام CSS. (هذا الدرس) التعامل مع الألوان في CSS. إضافة محتوى إلى صفحة ويب باستخدام CSS. تنسيق القوائم (Lists) في CSS. تعرف على الصناديق (Boxes) في CSS. رصف العناصر (Layout) في CSS. الجداول (Tables) في CSS. التعامل مع أجهزة العرض المختلفة والمطبوعات في CSS. تنسيق الخطوط هناك عدّة خواصّ يمكن استخدامها في CSS لتنسيق النّصوص، منها الخاصّة المُختصرة font التي يمكنك استخدامها لتعيين عدّة خواصّ مرّة واحدة، مثلاً: عريض، مائل أو بحروف كبيرة مُصغّرة (small capitals) الحجم ارتفاع السّطر اسم عائلة الخط (typeface) مثال p { font: italic 75%/125% "Comic Sans MS", cursive; } تُعيّن هذه القاعدة عدّة خواصّ متعلّقة بالخطّ، جاعلةً كل الفقرات بخطّ مائل. يُعيّن حجم الخطّ إلى ما يساوي ثلاثة أرباع حجم الخطّ في العنصر الأب لكلّ فقرة، ثمّ يُعيّن ارتفاع الخطّ إلى 125% (أكبر قليلًا من العاديّ). تعيّن عائلة الخطّ إلى Comic Sans MS، فإنّ لم يكن متوفّرًا سيستخدم المتصفّح الخطّ المبدئيّ من نوع "الكتابة اليدويّة (cursive)" المُعيّن في إعداداته. تؤدّي هذه القاعدة ضمنيًّا إلى إزالة الخطوط العريضة والحروف الكبيرة المُصغّرة إن كانت مُعيّنة من قبل على الأهداف. عائلات الخطوط لا يمكن توقّع الخطوط الّتي ستكون على جهاز المستخدم الّذي يقرأ مستندك، لذا يُنصح دائمًا بإسناد قائمة من البدائل بترتيب أفضليّتها. أنهِ هذه القائمة بواحد من الخطوط المبدئية: serif (المُذيّل) أو sans-serif (غير المُذيّل) أو cursive (اليدويّ) أو fantasy (الخيالي) أو monospace (ثابت العرض). إن لم يدعم الخطّ كل الميّزات في المستند، فبإمكان المتصفّح استخدام خطّ بديل، فمثلاً: قد يحتوي المُستند حروفًا خاصّة غير موجودة في الخطّ المُعيّن، وعندها سيبحث المتصفّح عن خطّ بديل فيه هذه الحروف. لتعيين اسم الخطّ بصورة منفصلة عن بقيّة الخواصّ، استخدم الخاصّة font-family. أحجام الخطوط بإمكان المتصفّحات تجاوز الأحجام المبدئيّة للخطوط أو تغيير حجم الخطّ أثناء قراءة المستخدم للصفحة، لذا يُفضّل استخدام أحجام نسبيّة حيث أمكن. باستطاعتك مثلًا استخدام قيم مُعيّنة مسبقًا للخطوط مثل small و medium و large؛ أو قيم منسوبة إلى حجم خطّ العنصر الأب مثل smaller و larger و 150% و 1.5em. الوحدة em تساوي عرض الحرف "m" إذا كُتب باستخدام حجم خطّ العنصر الأب؛ وهذا يعني أن 1.5em تساوي حجم خطّ العنصر الأب مضروبًا بواحد ونصف. يمكن أيضًا عند الضرورة استخدام قيمة ثابتة مثل 14px (أي 14 بكسلًا) على الشّاشة أو 14pt (أي 14 نقطةً) للطّابعة؛ على أنّ هذه القيم غير ملائمة للأشخاص الذين يعانون من ضعف البصر لأنها لا تسمح لهم بزيادة حجم الخطّ؛ لذا يُفضّل استخدام قيمة مُعيّنة مسبقًا مثل medium على العناصر الرئيسيّة ثمّ قيم نسبيّة على أبناءها. لتعيين حجم الخطّ بصورة منفصلة عن بقيّة الخواص، استخدم الخاصّة font-size. ارتفاع الخط يُعيّن ارتفاع الخطّ المسافة الشّاقوليّة بين السّطور، وقد تكون زيادته محبّذة في المستندات ذات الفقرات الطّويلة الّتي تمتدّ على عدّة سطور، خصوصًا إن كان حجم الخطّ صغيرًا. لتعيين ارتفاع الخطّ بصورة منفصلة عن بقيّة الخواص، استخدم الخاصّة line-height. تنسيقات خاصة يمكن استخدام الخاصّة المنفردة text-decoration لتعيين تنسيقات أخرى على النّص مثل تسطيره underline أوحجبه بخطّ يتوسّطه line-through (هكذا)، أو مسح كل التنسيقات الخاصّة باستخدام none. خواص أخرى لجعل الخطّ مائلًا فقط: استخدم: ‎font-style: italic;‎ لجعل الخطّ عريضًا فقط استخدم: ‎font-style: bold;‎ لتصغير الحروف الكبيرة باللاتنينية استخدم: ‎font-variant: small-caps;‎ لإزالة أيّ من الخواصّ السابقة على انفراد، استخدام normal أو inherit كقيمة. تفاصيل أكثر يمكن تعيين تنسيقات النّصوص بطرق عديدة. مثلًا: بعض الخواصّ المذكورة آنفًا لها قيم أخرى. حاول تجنّب استخدام الخواصّ المختصرة في أوراق الأنماط المُعقّدة لأنّها قد تؤثّر على خواصّ منفردة أخرى لم تكن بالحُسبان. للاطّلاع على كامل تفاصيل الخطوط في CSS، راجع صفحة الخطوط في معيار CSS، وللاطّلاع على كامل تفاصيل تنسيقات النّصوص راجع صفحة النّصوص. إن لم ترغب بالاعتماد على الخطوط المُثبّتة على جهاز المستخدم، يمكن استخدام خطوط الويب بالخاصّة ‎@font-face‎، إلّا أنّها غير مدعومة في جميع المتصفّحات. تمرين: تعيين الخطوط حرّر ملفّ CSS الذي تتدرّب عليه. أضف القاعدة التّالية لتغيير الخط في كامل المستند، من المنطقيّ إضافة هذه القاعدة في رأس الملفّ، لكنّ ذلك لا يؤثّر على النّتيجة. body { font: 16px "Comic Sans MS", cursive; } أضف تعليقًا يشرح القاعدة، وأضف مسافات فارغة بما تراه مناسبًا. احفظ الملفّ وحدّث الصّفحة لمشاهدة النّتيجة. إن كان الخطّ Comic Sans MS مُثبّتًا على جهازك، أو خطّ يدويّ آخر لا يدعم ميلان الحروف، سيختار متصفّحك خطًّا آخر للنّصوص المائلة في السّطر الأوّل: اذهب إلى قائمة المتصفّح واختر: عرض > حجم الخطّ > تكبير (أو ما يشابهه)، على الرّغم من أنك حدّدت حجم الخطّ بـ16 بكسلًا، فإنّ المستخدم باستطاعته تغييره. تمرين اجعل الحروف الأولى من كلّ كلمة في المستند أكبر مرّتين من الحجم المبدئيّ للخطوط المُذيّلة في المتصفّح: شاهد الحل أضفّ التّصريح التّالي إلى قاعدة strong: font: 200% serif; إن كنت تستخدم تصاريح منفصلة للخاصّتين font-size وfont-family فإنّ الخاصّة font-style على الفقرة الأولى تبقى سارية المفعول. ما التالي؟ استخدمنا أسماء الألوان القياسيّة لتعيين لون بعض الحروف والكلمات في مستندنا، سنتعلّم في الدّرس التالي التعامل مع الألوان بقيّة أسماء الألوان القياسيّة وكيف نستعمل ألوانًا أخرى. ترجمة -وبتصرف- للمقال Text Styles من سلسلة Getting started with CSS على شبكة مطوّري Mozilla.
  13. تتألف جميع العروض التقديميَّة من مجموعة من الشرائح؛ يضيف المستخدم شريحة معيَّنة ويختار نوعها ثمَّ يبدأ بكتابة المحتوى الذي يريد عرضه في تلك الشريحة ثمَّ ينتقل إلى الشريحة التالية وهكذا. بعبارة أخرى، إنَّ كل شريحة تحمل فكرة جزئيَّة من موضوع ما يرغب العارض بإيصالها إلى الفئة المستهدفة من العرض. سنتعلَّم في هذا الدرس كيفيَّة إدراج الشرائح بمختلف تخطيطاتها، وتنسيق الشرائح وعناصرها، وإنشاء مظهر مخصَّص بنا بالاستعانة بالشريحة الرئيسيَّة (Master Slide)، وسنختم درسنا بإضافة التأثيرات الحركيَّة للشرائح وعناصرها تمهيدًا لعرضها. إدراج شريحة وتغيير تخطيطها يحتوي العرض التقديمي عند إنشائه على شريحة عنوان واحدة نكتب فيها العنوان الرئيسي للعرض مع إمكانيَّة إضافة عنوان فرعي، ويتغير اسم الملف تلقائيًّا إلى الاسم المدخل في حقل العنوان في هذه الشريحة؛ نضيف شريحة ثانية من قائمة إدراج ← شريحة جديدة أو نختار "شريحة جديدة" من شريط الأدوات أو نستعمل الاختصار Ctrl + M فتضاف شريحة جديدة ذات تخطيط عنوان ونص. إن أردنا إدراج شريحة ذات تخطيط مختلف، نضغط على سهم صغير بجانب أيقونة إدراج شريحة جديدة في شريط الأدوات فتظهر جميع تخطيطات الشرائح؛ نضغط على "عنوان وعمودان" فتُدرج هذه الشريحة إذ يمكن استخدام العمودين السابقين للموازنة بين شيئين؛ نُدرج أيضًا شريحة ذات تخطيط "رأس قسم" نستخدمها عند الانتقال إلى فقرة أو فكرة جديدة في العرض أو يمكن استخدام تخطيط "نقطة رئيسيَّة" عوضًا عن التخطيط السابق. يمكنك إدراج شرائح بجميع التخطيطات المتوافرة والموازنة بينها لمعرفة التخطيط المناسب الذي تود إستعماله في عرضك. إن أردنا تغيير تخطيط شريحة مضافة مسبقًا، نحدِّدها ثمَّ نضغط على "تخطيط" من شريط الأدوات ونختار التخطيط الجديد. يمكن تكرار شريحة موجودة مسبقًا بطريقتين: الطريقة الأولى هي تحديد الشريحة التي نريد تكراراها ثمَّ الضغط على "شريحة جديدة" في شريط الأدوات أو استعمال الاختصار Ctrl + M الطريقة الثانية هي تحديد الشريحة المراد تكرارها ثمَّ الضغط على زر الفأرة الأيمن واختيار "شريحة مكررة" وحينئذٍ تتكرر الشريحة مع كامل محتواها بينما لا يتكرر محتوى الشريحة بالطريقة الأولى. نقل شريحة وحذفها يمكن تغيير توضُّع الشرائح وترتيبها بالشكل الذي تريد وذلك بالضغط المستمر على زر الفأرة الأيسر فوق الشريحة المراد تغيير مكانها ثمَّ نقلها إلى الموضع الجديد. ويمكن نقل الشريحة لبداية العرض أو نهايته بتحديد الشريحة والضغط على زر الفأرة الأيمن واختيار "نقل الشريحة للبداية أو للنهاية" أو تحريكها للأعلى أو الأسفل مقدار منزلة واحدة وذلك من قائمة شريحة ← نقل الشريحة. نحذف الشريحة بتحديدها ثمَّ الضغط على زر الفأرة الأيمن واختيار "حذف الشريحة" أو من قائمة الشريحة ← حذف الشريحة أو بالضغط على رز Delete أو Backspace ببساطة. تنسيق الشرائح تنسيق شريحة معيَّنة تظهر نافذة المظاهر في الطرف الأيسر عند إنشاء عرض تقديمي جديد نختار منها تنسيق جاهز للشرائح من المظاهر المتوافرة ويُطبَّق المظهر على جميع الشرائح؛ يمكن فتح هذه القائمة من شريط الأدوات باختيار "المظهر" أو من قائمة الشريحة ← تغيير المظهر. يمكن استيراد مظهر من عرض تقديمي سابق سواءً موجود في Drive أو في حاسوبك عبر الضغط على خيار "استيراد مظهر" أسفل قائمة المظاهر وتحديد العرض التقديمي؛ سنُحمِّل عرضًا تقدميًّا موجودًا على الحاسوب لاستيراد المظهر منه. من جهة أخرى، يمكن تغيير لون خلفيَّة الشريحة أو إضافة صورة معيَّنة إليها وذلك من خيار "الخلفيَّة" الموجود في شريط الأدوات أو من قائمة الشريحة ← تغيير الخلفيَّة. يتغير لون خلفيَّة الشريحة المحدَّدة بالضغط على "تم" بعد تحديد اللون أو الصورة، بينما تُطبَّق التغييرات على كل الشرائح بالضغط على "إضافة إلى المظهر" أي التعديل على كامل المظهر المحدَّد. الشريحة الرئيسيَّة الشريحة الرئيسيَّة هي الشريحة العليا في التسلسل الهيكلي للشرائح والتي تخزن معلومات عن تنسيق وتخطيط كل شرائح العرض التقديمي بما في ذلك الخلفيَّة واللون والخطوط والتأثيرات وأحجام العناصر وموقع كل منها. إنَّ الميِّزة الأساسيَّة من الشريحة الرئيسيَّة هي إمكانيَّة التعديل على كل الشرائح بمختلف تخطيطاتها في العرض التقديمي بما في ذلك الشرائح التي تضاف لاحقًا وهذا مفيد جدًا في التحكم بتنسيق العروض التقديميَّة ذات العدد الكبير من الشرائح وبذلك توفر الوقت والجهد الذي سنبذله لتنسيق كل شريحة وعناصرها على حدة. ننتقل إلى الشريحة الرئيسيَّة من قائمة الشريحة ← تعديل الشريحة الرئيسيَّة فتظهر نافذة تشبه النافذة الموضحة بالصورة التالية. تظهر الشريحة الرئيسيَّة في أعلى الشرائح في القسم الأيمن ويندرج أسفلها كل تخطيطات الشرائح. لاحظ عند الضغط على الشريحة الرئيسيَّة فإنَّ كل الشرائح الموجودة أسفلها تحُدد معها وبذلك يكون التعديل على هذه الشريحة بمثابة التعديل على كل الشرائح كما ذكرنا. دعنا نُجري بعض التعديلات على الشريحة الرئيسيَّة مثل تغير نوع خط العنوان وتعديل اتجاه النصوص بجميع مستوياتها لتصبح من اليمين إلى اليسار؛ إذا أردنا إظهار رقم الشريحة في كل الشرائح نضيف في الشريحة الرئيسيَّة أرقام الصفحات عبر إدراج ← أرقام الشرائح ونختار موقع مناسب لها، ويمكن إدراج رسم أو صورة صغيرة لتظهر في كل الشرائح. يمكن التعديل على أحد تخطيطات الشريحة وتغيير تنسيقها وتنسيق عناصرها بصورة منفردة. يمكن إضافة تخطيط جديد أيضًا بالضغط على زر الفأرة الأيمن في موضع التنسيقات واختيار "تنسيق جديد" أو اختيار "تنسيق مكرر" لتكرار أحد التنسيقات الموجودة والتعديل عليه. نضيف عناصر نائبة عن النصوص بالضغط على "إدراج عنصر نائب" من شريط الأدوات أو من قائمة إدراج ← عنصر نائب واختيار العنصر المطلوب. نعيد تسمية التخطيط إلى "موازنة ثلاثة أعمدة" بالضغط عليه بزر الفأرة الأيمن واختيار "إعادة تسمية" ليظهر هذا التنسيق ضمن قائمة التخطيطات ويصبح جاهزًا للاستخدام. يمكنك الآن إنشاء قالب مخصَّص بالشكل الذي تريد وحفظه واستيراده متى شئت بالطريقة التي تعلمتها آنفًا. حقيقةً، جميع المظاهر الجاهزة المعروضة في قائمة المظاهر أنشئت بالطريقة ذاتها. التأثيرات الحركيَّة تأتي التأثيرات الحركيَّة التي تضاف إلى العرض التقديمي في المرتبة الثانية في رأيي بعد تنسيق عناصر الشريحة ومظهرها من حيث جودة العرض التقديمي؛ تُزيل هذه التأثيرات الجمود من العرض وتساعدك على ترتيب ظهور عناصر الشريحة بالطريقة التي تريد تفاديًا لظهور كامل محتوى الشريحة الذي يقتل حس الغموض والتشويق عند الجمهور. نضيف تأثيرات حركيَّة للشريحة بتحديديها ثمَّ الضغط على "انتقال" في شريط الأدوات أو من قائمة الشريحة ← تغيير الانتقال فتظهر قائمة الحركات في الطرف الأيسر؛ تُظهر هذه القائمة جميع الحركات مع خياراتها. نختار نوع انتقال "التقليب" للشريحة من الحركات المتوافرة ونحدِّد سرعة الحركة. نعطي جميع العناصر الموجودة في الشريحة حركة للتحكم بتسلسل ظهورها أثناء العرض؛ نحدِّد كل عنصر على حدة ثمَّ نضغط على "إضافة رسوم متحركة" من قائمة الحركات السابقة ثمَّ نختار نوع الحركة ومتى تبدأ حركة العنصر ونحدِّد سرعة الحركة. نضيف تأثيرات حركيَّة بالطريقة ذاتها لجميع شرائح وعناصر العرض التقديمي ليصبح جاهزًا للعرض على الفئة المستهدفة. خاتمة وجدنا أنَّ الشرائح هي اللبنة الأساسيَّة التي يتكون منها العرض التقديمي؛ تعلمنا في هذا الدرس الكثير من الأشياء التي تساعدنا على تحضير عرض جيد وجذَّاب نستعمله لإيصال الأفكار التي نريدها للجمهور بسلاسة. كان أهم الأشياء التي تعلمناها والتي تساعد على جذب انتباه الجمهور هي تنسيق الشرائح وإضافة التأثيرات الحركيَّة لها. حان دورك الآن لبدء استعمال تطبيق عروض جوجل التقديميَّة وإنشاء عرض تقديمي رائع.
  14. سنتعرّف في هذا الدرس على الجداول في تطبيق مستندات جوجل ولنتعّرف عليها بشكل أفضل سنقوم بتطبيق عملي عبر إنشاء سيرة ذاتية باستخدام الجداول. لإدراج جدول في المستند إذهب إلى القائمة إدراج > جدول أو من القائمة جدول > إدراج جدول وبذات الطريقة المتبعة في برامج الوورد والرايتر يمكنك سحب مؤشر الفأرة فوق شكل الجدول المُصغّر ضمن القائمة لاختيار عدد الصفوف والأعمدة المراد إدراجها ضمن الجدول. في تطبيقنا العملي هذا سنقوم مبدئيًّا بإدراج جدول مؤلف من أربعة أعمدة وعشرة صفوف. سيظهر لنا الجدول بعرض صفوف يصل كامل عرض المستند وارتفاع أعمدة افتراضي يعادل سطرًا كتابيًا واحدًا. وللجدول حدود داخلية وخارجية متماثلة بحجم 1 نقطة. سنكتب الآن اسم صاحب السيرة الذاتية في الخلية الأولى وسيكون على سبيل المثال محمد محمد. يمكننا تطبيق تنسيقات النص المختلفة على الإسم وبما أنه محور هذا المستند فيجب أن يكون عريضًا (غامق) وبحجم أكبر قليلًا. وفي الخلية التي تحتها سندرج صورة صاحب السيرة الذاتية عبر القائمة إدراج > صورة ثم حمّل الصورة التي في حاسوبك أو الموجودة ضمن سحابة جوجل الخاصة بك أو من أي من الطرق المتوفرة لإدراج الصور. في مثالنا هذا سنقوم لاحقًا بتعديل لون خلفية الخلية لذلك من الأفضل استخدام صورة بتنسيق PNG ذات الخلفية الشفافة. يمكننا تعديل حجم الصورة في حال كانت أكبر من اللازم عبر تحديدها واستخدام أدوات تعديل الحجم في إطار الصورة. سننتقل إلى فقرة تحديد المعلومات الشخصية، وسنترك الصف الأول فارغًا وننتقل إلى الصف الثاني من العمود الثاني. سنكتب جملة المعلومات الشخصية. كما نشاهد في الصورة السابقة فإن ارتفاع الصف الثاني كبير وذلك لوجود الصورة الشخصية في الخلية الأولى من هذا الصف ولحل هذه المسألة سنقوم بدمج مجموعة خلايا لتتسع لمساحة الصورة وتُبقي على ارتفاع خلية المعلومات الشخصية طبيعيًا. حدّد خلية الصورة مع ثلاث خلايا تحتها ثم انقر بالزر الأيمن للفأرة عليها واختر دمج الخلايا ليتم دمج هذه الخلايا الأربعة في خلية واحدة، وهكذا تتم عملية دمج الخلايا حيث يتوجب علينا أولًا تحديد الخلايا الواجب دمجها ثم النقر عليها بالزر الأيمن للفأرة ومن ثم اختيار الخيار دمج الخلايا. أصبح ارتفاع خلية المعلومات الشخصية طبيعيًا وسنتابع الآن. سنضع المعلومات الشخصية في الخلية التي تحت خلية عنوان الفقرة. بعد أن كتبنا المعلومات الشخصية في الخلية نلاحظ أن ارتفاع الخلية يزداد بازدياد عدد الأسطر ولكن عرض الخلية ثابت وهو ليس كافيًا لهذه المعلومات لذلك سنقوم بدمج هذه الخلية مع الخلية التي بجوارها إلى الجهة اليسرى من ذات الصف. سنضيف باقي المعلومات بذات الطريقة في الخلايا التالية بحيث نضع عنوان الفقرة في خلية منفصلة والتفاصيل في الخلية التي تحتها مباشرة. في حال أردنا إضافة معلومات أخرى فيمكننا إضافة صفوف إضافية أو حتى أعمدة إضافية عبر النقر على الجدول بالزر الأيمن للفأرة واختيار الخيارات الخاصة بالإضافة. في درسنا هذا سنكتفي بهذه المعلومات وسنقوم بحذف الصفوف الأخيرة مع ترك صف واحد فقط في الأسفل. حدّد الصفوف المراد حذفها وانقر بالزر الأيمن واختر حذف صفين . سنقوم بتنسيق الخلايا لإنهاء تصميم السيرة الذاتية. حدّد العمود الأول كاملًا ثم انقر على أيقونة لون الخلفية في شريط الأدوات واختر لونًا لخلفية هذه الخلايا. الآن حدّد خلايا عناوين الفقرات مع الخلايا المجاورة لها من جهة اليسار ثم امنحها نفس لون الخلفية. حدّد الآن النصوص ضمن الخلايا التي عدلنا لون خلفيتها واحدًا تلو الآخر، وطبّق عليه تنسيق ألوان بحيث يكون لون التمييز مطابقًا للون خلفية الخلية، وبما أننا اخترنا لونًا داكنًا للخلفية سيتوجب علينا اختيار لون فاتح للنص. قم بتنسيق النصوص كما يجب، بحيث تكون عناوين الفقرات غامقة وأكبر حجمًا وكذلك عناوين المسمّيات ضمن التفاصيل. سنقوم الآن بإلقاء نظرة على خصائص الجدول حيث سنقوم بإزالة الحدود والأطر للجدول. انقر بالزر الأيمن على الجدول واختر خصائص الجدول. أول خيار في الخصائص هو إطار الجدول حيث نستطيع تغيير لونه وحجمه، وفي تصميمنا لا نحتاج لهذا الإطار، لذلك سننقر على أيقونة الحجم ونختار القيمة صفر. وباقي الخيارات هي للون خلفية الخلية حيث يمكنك تحديده من هنا ايضًا و تحديد المحاذاة الرأسية للخلية إن كانت للأعلى أو الوسط أو الأسفل وترتيب العمود من اليمين لليسار أو العكس وأبعاد الصف أو العمود بوحدة القياس الافتراضية أو يمكنك تركها بدون تفعيل لتحصل على أبعاد افتراضية بحسب حجم البيانات بداخل الخلايا كما نستطيع تحديد محاذاة الجدول وتحديد المسافة البادئة.بعد إلغاء (الإطار) سنحصل على الصفحة التالية. يبدو تصميم السيرة الذاتية جيدًا. طبعًا ستحتاج في الحالة الواقعية إلى إضافة معلومات أكثر، كوسائل الاتصال المتوفرة ومستوى القدرات والإمكانات واللغات وغيرها، ويمكنكم القيام بذلك واختبار قدراتكم في إنشاء وتخصيص وتعديل الجداول في تطبيق مستندات جوجل. وبما أن هذه سيرة ذاتية سيتم طباعتها أو إرسالها إلى جهة معينة فمن الأفضل حفظها بهيئة PDF من خلال القائمة ملف > تنزيل بتنسيق > مستند PDF (بتنسيق .pdf) وبذلك سيتم تحميل ملف PDF جاهز إلى حاسوبك لطباعته أو إرساله إلى الجهة المعنية. الصورة الشخصية للسيرة الذاتية (الأفتار) محفوظة الحقوق لـ Freepik
  15. تعرفنا في الدرس السابق على واجهة تطبيق جداول بيانات جوجل وسنتابع في هذا الدرس مبادئ العمل عىل التطبيق. يمكننا تحديد الخلية التي سندخل ضمنها البيانات باستخدام الفأرة أو مفاتيح الأسهم ثم أدخل البيانات بداخلها، سنقوم على سبيل المثال بإنشاء جدول عناوين وهواتف. بعد إدخال بيانات عناوين الأعمدة لما سيتم إدخاله ضمن الجدول سنقوم بإدخال الأرقام المتسلسلة تحت عمود (مسلسل). في حال أدخلنا الرقم 1 في الخلية الأولى ثم حدّدنا هذه الخلية بالفأرة ثم نقرنا على المربع الأزرق الصغير في الركن السفلي الأيسر من الخلية وسحبنا للأسفل عدة خلايا فإن النتيجة ستكون نسخ بيانات هذه الخلية ذاتها على جميع الخلايا المحددة كما في الصورة. وفي حال إدخال القيمة 1 في الخلية الأولى و2 في الخلية التالية فسيكون من السهل الحصول على تعبئة تسلسلية حيث يقوم التطبيق بملء الخلايا التالية بتسلسل الأرقام المتتالي كما في الصورة. ثم نقوم بإدخال الأسماء وأرقام الهواتف والعناوين قدتكون أرقام الهواتف عادة تبدأ بالصفر كرمز نداء خارجي ولكن التنسيق التلقائي للتطبيق سيقوم بحذف الصفر الذي في بداية الرقم باعتبار أن لا قيمة له في العمليات الحسابية وستظهر الأرقام كما في الشكل السابق بدون أصفار في البداية. لتغيير هذا التنسيق حدّد الخلايا التي سنقوم بتغيير تنسيقها ثم اذهب إلى القائمة التنسيق > رقم > نص عادي ثم أعد كتابة الأرقام لتحصل على النتيجة المثالية. بما أن العنوان في الأعلى هو عنوان الجدول كله فسنقوم بجعل جميع الخلايا في الصف الأول خلية واحدة لنضع العنوان في الوسط بسهولة بعدها. حدد جميع خلايا الصف الأول من الجدول ثم انقر على الأداة من لدمج الخلايا من شريط الأدوات ثم قم بتوسيط النص في الخلية الجديدة الكبيرة. وسنجد هذه الأدوات في شريط الأدوات لنستخدمها في تنسيق الخلايا. حدد الخلية الكبيرة في الأعلى (العنوان) واجعل لون الخلفية أحمر داكن ولون الخط أبيض. عدّل أيضًا لون خلفية الصف الثاني بالكامل ليكون باللون البرتقالي والنص باللون الأبيض. اجعل لون خلفية الصف الرابع باللون الرمادي الفاتح جدًّا وأبقِ على اللون الأسود للنص. الفكرة هنا هي جعل تمييز الصفوف أسهل عبر جعل الصفوف بلونين أبيض ورمادي فاتح بشكل متتالي وهناك طريقتين لفعل ذلك. الطريقة الأولى هي بتحديد الصفوف التي نريدها باللون الرمادي الفاتح صفًا صفًا ثم نقوم بتغيير لون الخلفية إلى اللون الرمادي الفاتح. ويتم تحديد الصفوف المختلفة والمتباعدة عبر تحديد الصف الأول ثم نستمر بالضغط على مفتاح Ctrl ثم نحدد الصف الثالث والخامس وهكذا مع الاستمرار بالضغط على مفتاح Ctrl أثناء التحديد حتى الانتهاء. والطريقة الثانية هي بتطبيق هذا التنسيق على صف واحد ومن ثم استخدام أداة نسق التنسيق الموجودة في شريط الأدوات وتحديد الصف الذي سيتم لصق التنسيق ضمنه ولكن الطريقة الأولى أسرع وأفضل. وسيظهر الجدول حتى هذه اللحظة بهذا الشكل. قم بتنسيق النصوص بجعل العناوين بالخط العريض (الغامق) وبحجم أكبر وفي الوسط ونسّق أيضًا نصوص البيانات المدخلة. قد نحتاج إلى إدراج صف إضافي وسط صفوف الجدول. يمكن القيام بذلك عبر تحديد الصف بالكامل (انقر على رقم الصف) ثم انقر عليه بالزر الأيمن واختر من القائمة إمّا إدراج 1 صف من الصفوف أعلاه أو إدراج 1 صف من الصفوف أدناه لإدراج صف جديد أعلى الصف المحدد أو أسفله. وبذلك سيتم إدراج صف جديد كما في الشكل. الأمر ذاته ينطبق عند الرغبة بإضافة عمود إضافي حيث نحدد العمود عبر النقر على حرف العمود من شريط حروف الأعمدة وننقر عليه بالزر الأيمن ونختار من القائمة إمّا إدراج 1 من الأعمدة لليمين أو إدراج 1 من الأعمدة لليسار . يمكن القيام بإضافة صفوف أو أعمدة عبر تحديد الصف أو العمود والذهاب إلى قائمة إدراج ومن ثم نختار أحد خيارات الإضافة المتوفرة أعلى هذه القائمة ولحذف صف كامل نقوم بتحديد هذا الصف عبر النقر على رقم الصف من شريط أرقام الصفوف والضغط بالزر الأيمن عليه ثم اختيار أحد الخيارات التالية: حذف الصف: وسيقوم هذا الخيار بحذف الصف بالكامل وسحب بقية الصفوف الموجودة أسفل ذلك الصف لتحل مكانه. محو الصف: وسيقوم هذا الخيار بمسح جميع البيانات بداخل الصف مع الإبقاء عليه وعدم حذفه. إخفاء الصف: وسيقوم هذا الخيار بإخفاء الصف ولكن بدون محوه أو حذفه وسيظهر مكانه أسهم صغيرة تدل على وجود صف مخفي يمكن إظهارها عبر النقر على تلك الأسهم الصغيرة. والأمر ذاته ينطبق على حذف ومحو وإخفاء الأعمدة. تعلمنا كيفية إنشاء جدول هواتف وعناوين وتنسيقه وتعديله بشكل بسيط وسهل. يوجد العديد من المزايا والأدوات الإضافية التي يمكن تطبيقها على الجدول وتعديله وسنتطرق لها في الدروس المتقدمة من هذا التطبيق.
  16. لا يخلو تعاملنا مع جداول البيانات من عمليات التنسيق التي نطبقها على الخلايا أو محتواها، أو كليهما معًا، لكي نحصل على جداول تفاعلية وسهلة الفهم. لذا يتيح كالك طرقًا مختلفة لتنسيق البيانات، حيث يمكن تعريف التنسيق على أنّه جزء من نمط الخلية لكي يتم تطبيقه تلقائيًا، أو يطبق يدويًا على الخلية. إدخال البيانات في سطور متعددة في بعض الأحيان نحتاج إلى إدخال البيانات في سطور متعددة في نفس الخلية للحفاظ على عرض موحّد لجميع الأعمدة، أو لمجرد أغراض ترتيبية. في هذه الحالة يمكننا إنشاء فواصل السطور يدويًا، أو تفعيل خاصية التفاف النص التلقائي. إدراج فواصل السطور يدويًا لإدراج فاصل سطور يدويًا أثناء إدخال البيانات في الخلية، اضغط على مفتاحي الاختصار Ctrl+ Enter للانتقال إلى السطر التالي: لن يتغير عرض الخلية عند إدراج فاصل سطور يدويًا، ويمكن أن يحدث تداخل بين نهاية الخلية والنص إذا كان النص في السطر طويلًا. لذا يجب أن تغير عرض الخلية يدويًا أو تغير موضع فاصل السطور لكي تمنع تداخل النص مع نهاية الخلية. الالتفاف التلقائي تتيح خاصية الالتفاف التلقائي نقل جزء من النص إلى السطر التالي تلقائيًا عندما يتجاوز طوله عرض الخلية/العمود. ولتفعيل هذه الخاصية قم أولًا بتحديد الخلية أو نطاق الخلايا وانقر على التحديد بزر الفأرة الأيمن ثم اختر نسق الخلايا Format Cells: من مربع الحوار تنسيق الخلايا، اذهب إلى تبويب محاذاة Alignment ثم قم بتأشير الخيار لف النص تلقائيًا Wrap text automatically (تحت مجموعة الخصائص Properties) وانقر على حسنًا OK: وبذلك سيتم بدء سطر جديد بشكل تلقائي عند إدخال نصوص طويلة ويُمنع التداخل بين حدود الخلية ومحتواها: تقليص حجم النص إذا لم تكن ترغب في إدخال البيانات في سطور متعددة، مع الحفاظ على حجم الخلية في نفس الوقت، بإمكانك تفعيل خاصية تعديل حجم النص تلقائيًا وملائمته مع حجم الخلية. للقيام بذلك، انقر بزر الفأرة الأيمن على الخلية واختر نسق الخلايا. من مربع الحوار تنسيق الخلايا، اذهب إلى تبويب محاذاة وقم بتأشير الخيار تقليص لملائمة حجم الخلية Shrink to fit cell size ثم انقر على زر حسنًا: في المرة القادمة التي تقوم فيها بإدخال البيانات في الخلية، سيتم تقليل حجمها تلقائيًا لاحتوائها داخل حدود الخلية إذا كان حجم البيانات كبيرًا (كما نلاحظ في الصورة أدناه): ملاحظة: لا يمكن تفعيل هذه الخاصية قبل إلغاء تفعيل خاصية الالتفاف التلقائي. تنسيق الأرقام تتوفر العديد من تنسيقات الأرقام المختلفة التي يمكن تطبيقها على الخلايا باستخدام شريط أدوات التنسيق: قم أولًا بتحديد الخلية التي تحتوي على رقم، ثم انقر على الأيقونة ذات الصلة بالتنسيق المرغوب. يمكنك مثلا تنسيق الرقم كعملة، نسبة مئوية، أو كتاريخ، كما يمكنك زيادة وإنقاص المراتب العشرية: ويمكنك الوصول إلى المزيد من تنسيقات الأرقام أو التحكم في خيارات كل تنسيق بواسطة مربع الحوار تنسيق الخلايا (تنسيق Format> خلايا Cells)، وبالتحديد تبويب الأرقام Numbers: على سبيل المثال، بإمكانك عرض التاريخ بشكل مختلف باختيار أحد التنسيقات من مجموعة التاريخ Date، أو التحكّم في عدد المنازل العشرية والأصفار البادئة، أو تمييز الأرقام السالبة باللون الأحمر من مجموعة الرقم Number...إلخ. يمكنك استكشاف الخيارات التي يمكن تخصيصها لكل نوع من البيانات من هذا التبويب. ملاحظة: تتحكم إعدادات اللغة بالإعدادات المحلية لمختلف التنسيقات كتنسيق الوقت أو رمز العملة: تنسيق الخطوط من شريط أدوات التنسيق يمكن أيضًا تنسيق نوع الخط، لونه، وحجمه وغيرها من خصائص الخط المعروفة. وكما اعتدنا عند تطبيق أي أمر أو إجراء أي تغيير على محتواها، يجب أولًا أن نقوم بتحديد الخلية/نطاق الخلايا ثم نجري التعديلات من مجموعة أدوات تنسيق الخط: ويمكنك الوصول إلى المزيد من تأثيرات الخطوط من خلال مربع الحوار تنسيق الخلايا، وبالتحديد من تبويب تأثيرات الخطوط Font Effects. إذ تستطيع إضافة ظل أو حدود للنص، جعل النص بارز أو محفور، إضافة سطر بلون معين فوق أو تحت النص... إلخ. ويمكنك معاينة التغييرات التي تجريها على النص قبل تطبيقها من مربع المعاينة في الجزء السفلي من مربع الحوار: بالإضافة إلى ذلك، يمكنك تغيير اتجاه النص وتدويره من نفس مربع الحوار من تبويب محاذاة، وهي الخاصية التي يمكن أن تكون مفيدة عند تنسيق عناوين الأعمدة والصفوف في جداول البيانات. قم بإدخال زاوية التدوير في حقل Degrees، ومن قسم Reference edge حدّد فيما إذا كنت ترغب في تدوير النص نسبة إلى الحافة العليا أو السفلى للخلية، أو تدوير النص داخل الخلية فقط. تنسيق الخلايا يمكن تنسيق لون خلفية الخلية، ولون، سُمك، ونمط حدودها إما من شريط أدوات التنسيق: أو من تبويب الحدود Borders والخلفية Background في مربع الحوار تنسيق الخلايا، علمًا أن مربع الحوار يتيح خيارات أوسع، كإضافة ظل للخلية Shadow Style، أو تحديد أبعاد هوامش الخلية Spacing of Content: قبل تطبيق أي تغيير على الخلية أو نطاق الخلايا، قم بتحديدها أولًا ثم طبّق التنسيقات المرغوبة. التنسيق التلقائي للخلايا AutoFormat إذا لم تكن ترغب في تنسيق بياناتك في كل مرة تنشئ فيها جداول البيانات، بإمكانك استخدام خاصية التنسيق التلقائي التي توفر مجموعة تنسيقات معرّفة مسبقًا يمكنك تطبيقها بسرعة على البيانات. لكي تتمكن من تطبيق هذه الخاصية، يجب أن تحدد على الأقل 3 أعمدة و3 صفوف مع عناوينها، كما موضح في المثال أدناه، وإلّا ستكون غير فعّالة: بعد أن تحدد الأعمدة والصفوف، اذهب إلى تنسيق Format> أنماط التنسيق التلقائي AutoFormat: اختر نمط الجدول الذي تريد استخدامه من قائمة النسق Format، وبإمكانك إلغاء تأشير خيارات التنسيق غير المرغوبة من مجموعة التنسيق في مربع الحوار التنسيق الآلي. انقر على حسنًا لتطبيق التغيرات وإغلاق مربع الحوار: إن لم تعثر على النمط المناسب لك، بإمكانك تعريف النمط الخاص بك وإضافته إلى قائمة أنماط التنسيق التلقائي لاستخدامه. قم أولًا بتنسيق جدول بياناتك بتخصيص نوع الخط ولونه، حدود الخلايا، محاذاة النص، تنسيقات الأرقام...إلخ، ثم اذهب إلى تحرير Edit> حدّد الكل Select All لتحديد جدول البيانات برمّته: بعد ذلك اذهب إلى تنسيق> أنماط التنسيق التلقائي لفتح مربع الحوار التنسيق الآلي، ثم اضغط على زر أضف Add: أدخل اسمًا مناسبًا للنمط في حقل الاسم ثم انقر على حسنًا: سيُضاف نمط التنسيق التلقائي الجديد إلى قائمة النسق، وسيكون متاحًا للاستخدام عند تنسيق الجداول. التنسيق الشرطي Conditional Formatting التنسيق الشرطي يعني تغيير تنسيق الخلية تلقائيًا بناءً على شروط تحددها بنفسك. إذ يتم تلوين الخلية أو إضافة أيقونات ذات دلالة معينة عندما يحقق محتوى الخلية الشرط الذي حدّدته، وبذلك تساعدنا على فهم البيانات بشكل أفضل. غالبًا ما تستخدم هذه الخاصية لتمييز البيانات التي لا تطابق مواصفات معينة نحددها مسبقًا. ويُنصح بعدم المبالغة في استخدام التنسيق الشريطي، لأن ذلك يمكن أن يقلل من بروز البيانات الأخرى التي لا تطابق تلك المواصفات. أنواع التنسيق الشرطي يمكن تنسيق الخلايا بأنماط مختلفة: الشرط Condition: وهو نوع أساسي من التنسيق الشرطي، وباستخدامه يمكنك تحديد التنسيق المستخدم لتمييز البيانات التي لا تطابق المواصفات التي قمت بتحديدها. مقياس الألوان Color Scale: يستخدم هذا النوع لتنسيق لون خلفية الخلية بلون معين بناءً على قيم البيانات في جدول البيانات. ويمكن أن نحدد لونين أو ثلاثة ألوان لمقياس الألوان. أشرطة البيانات Data Bar: يوفر هذا الخيار تمثيل بصري للبيانات، ويتم ذلك بناء على القيم في جدول البيانات، وهذه الخاصية تشبه إلى حد كبير تمثيل البيانات بالمخططات الشريطية. مجموعة الأيقونات Icon Set: يعرض هذا الخيار أيقونات ذات دلالة معينة بجانب البيانات، وهي بذللك توفر تمثيلًا بصريًا لموقع قيمة معينة نسبة إلى القيم الأخرى في نطاق الخلايا. التاريخ Date: هذا الخيار مشابه للخيار الأول، فهو يعمل على تنسيق البيانات بنمط معين إذا كانت تحقق شرطًا معينًا، الفرق هو أنّ البيانات هنا هي بيانات تاريخ. مثال1: لدينا جدول لدرجات مجموعة من الطلاب، والمطلوب هو تمييز الدرجات التي تقل عن 60%؛ نتبع الخطوات التالية: نحدد نطاق الخلايا الذي يحتوي على درجات الطلاب، ثم نذهب إلى تنسيق Format> تنسيق شرطي Conditional Formatting> الشرط Condition: سيُفتح مربع الحوار التنسيق الشرطي، ومنه نحدد الشرط less than (أصغر من) من قائمة الشروط لأننا نرغب في تمييز البيانات التي تقل عن 60%، ثم نضع القيمة 60% في الحقل المقابل للشرط. وأخيرًا نحدّد نمط التمييز المرغوب من قائمة الأنماط الافتراضية: سيتم تمييز البيانات التي تحقق الشرط بالنمط الذي حددناه: وطالما بقي التنسيق الشرطي مطبقًا على الخلايا، سيتم تمييز البيانات التي تحقق الشرط حتّى إذا قمنا بتغيير القيم في الجدول. فإذا قمت بحذف إحدى القيم وإدخال قيمة أصغر من 60% في المثال أعلاه، سيتم تمييزها باللون الأحمر تلقائيًا: مثال2: الجدول أدناه يعرض بيانات المبيعات في تواريخ معينة، والمطلوب هو تنسيق البيانات بحيث تُعرض أعلى قيمة للمبيعات باللون الأخضر، وأقل قيمة باللون الأحمر، والقيم التي تقع بينها يتم تحديدها ألوانها تلقائيًا اعتمادًا على تلك القيمة: نحدد نطاق الخلايا B2:B9 ثم ننقر على زر التنسيق الشرطي من شريط أدوات التنسيق ونختار مقياس الألوان Color Scale (وهذه طريقة أخرى لتطبيق التنسيق الشرطي): نحدد عدد الألوان 2 من القائمة العلوية الثانية، ثم نحدد الخيار Min ونختار اللون الأحمر له، ونحدد الخيار Max ونختار اللون الأخضر له، ثم ننقر على حسنًا: تم تمييز أعلى قيمة باللون الأخضر، وأقل قيمة باللون الأحمر. أما القيم التي تقع بين القيمتين العليا والدنيا فتم تمييزها بتدرجات الأخضر أو الأحمر حسب قربها من القيمة العليا أو الدنيا على التوالي: مثال3: إذا رغبنا في تنسيق البيانات في الجدول السابق باستخدام أشرطة البيانات، نحدد نطاق الخلايا B2:B9 ثم ننقر على زر التنسيق الشرطي من شريط أدوات التنسيق ونختار شريط البيانات Data Bar: نبقي الخيارات الافتراضية كما هي في مربع الحوار تنسيق شرطي ثم ننقر على حسنًا: سيتم تمثيل البيانات في كل خلية بشريط يختلف طوله حسب قيمة البيانات فيه نسبة إلى القيمة العليا والدنيا في نطاق الخلايا: يمكنك تخصيص أشرطة البيانات بالنقر على زر خيارات أخرى، إذ يمكن تحديد أطوال الأشرطة، ألوانها، أو غيرها من الخيارات. مثال4: يعرض الجدول أدناه المبيعات في تواريخ معينة، والمطلوب هو تمييز تواريخ السنة الماضية بنمط معين: نحدد نطاق الخلايا A2:A9 ثم ننقر على زر التنسيق الشرطي ونختار التاريخ Date: نحدد الشرط Last Year (السنة الماضية) من مربع الحوار تنسيق شرطي، ثم نختار النمط المرغوب من قائمة الأنماط وننقر على حسنًا: سيتم تمييز تواريخ السنة الماضية فقط بالنمط الذي حددناه: حذف التنسيق الشرطي إذا كنت ترغب في حذف التنسيق الشرطي من الخلية أو نطاق الخلايا، قم بتحديدها أولًا ثم انقر على زر التنسيق الشرطي في شريط أدوات التنسيق واختر أدر Manage: من مربع الحوار أدر التنسيقات الشرطية، حدد التنسيق الذي ترغب في حذفه ثم انقر على زر إزالة Remove: خاتمة كما تعرفنا في هذا الدرس، توجد العديد من الطرق لتنسيق جداول البيانات، بعضها تطبق على الخلايا فقط، كإضافة خلفية وحدود للخلية، وبعضها تطبق على البيانات في الخلية، كتنسيق الأرقام والنصوص والخطوط. بالإضافة إلى التنسيق الشرطي الذي يتيح لنا تمييز البيانات التي تطابق مواصفات معينة نحددها مسبقًا، وبذلك يساعدنا على تحليل جداول البيانات بشكل سريع. ترجمة- وبتصرّف- لدليل المستخدم الخاص بالحزمة المكتبية LibreOffice.
  17. تعرفنا في الدرس السابق على القوالب في LibreOffice وتعلّمنا كيفية استخدام القوالب المضمّنة لإنشاء المستندات، بالإضافة إلى طريقة تنصيب قوالب من مصادر أخرى. في هذا الدرس سنغطي طريقتين لإنشاء القوالب وتعديلها، ونتعرف على بعض الإجراءات لتنظيم تلك القوالب، كإنشاء المجلدات، الحذف، النقل، الاستيراد، والتصدير. إنشاء القوالب يمكنك إنشاء القوالب بطريقتين: إمّا عن طريق حفظ المستند الاعتيادي كقالب، أو باستخدام المُرشدات Wizards. إنشاء قالب من مستند بالإضافة إلى التنسيقات، يمكن أن نحفظ ضمن القالب أيّة إعدادات يمكن إضافتها أو تعديلها في المستند. على سبيل المثال، يمكنك أن تحفظ إعدادات الطباعة وأيّة إعدادات أخرى تعيّنها من أدوات > الخيارات، مثل المسارات Paths والألوان. يمكن أن تحتوي القوالب التي تنشئها على نصوص معرّفة مسبقًا، مما يجنّبك إعادة كتابتها في كل مرة. على سبيل المثال، يمكن أن تنشئ قالبًا للرسائل التي ترسلها باستمرار، وتضيف إلى القالب اسمك، عنوانك، خاتمة الرسالة، وتوقيعك. كما بإمكانك أن تحفظ في القالب تخصيصات أشرطة القوائم والأدوات. لإنشاء قالب من مستند وحفظه في مجلد قوالبك، ابدأ بفتح مستند جديد أو مستند أنشئ سلفا وترغب في حفظه كقالب، ثم عدّل المستند وأضف أي محتوى ترغب في ظهوره في كل المستندات التي ستنشئها بناء على القالب الجديد، كشعار الشركة مثلًا، حقوق الطبع والنشر، رأس وتذييل الصفحات، وغيرها من العناصر. بعد ذلك، أنشئ الأنماط التي تريد استخدامها في القالب الجديد وعدّلها بما يلائم احتياجاتك. يوضح المستند أدناه مثالًا على قالب رسالة بسيط، استخدمنا فيه عناصر كالنصوص والإطار التي نريد تكرارها في كل الرسائل التي ننشئها من هذا القالب، وطبّقنا التنسيقات المرغوبة على العناصر. لحفظ القالب، اذهب إلى ملف File > القوالب Templates > احفظ كقالب Save As Template: أدخل في من مربع الحوار احفظ كقالب اسمًا مناسبًا للقالب، حدد الخيار قوالبي My Templates، وهو الفئة التي سيحفظ ضمنها القالب، ثم انقر على زر حفظ Save. بذلك تكون قد انتهيت من حفظ القالب، وبإمكانك الوصول إليها واستخدامه لإنشاء المستندات (راجع درس كيفية استخدام القوالب لإنشاء المستندات) من مربع الحوار القوالب (ملف > جديد > القوالب). إنشاء قالب باستخدام المرشدات بإمكانك استخدام المرشدات لإنشاء القوالب للرسائل، الفاكسات، جداول الأعمال، أو لإنشاء العروض التقديمية وصفحات الويب. لإنشاء قالب باستخدام أحد المرشدات، اذهب إلى ملف File > المرشدات Wizards > اختر نوع القالب. اتبع التعليمات في صفحات المرشد لإنشاء القالب، علمًا أنّ خطوات الإنشاء تختلف لكل نوع من القوالب، لكن تتبع نمطًا متشابهًا جدّا. على سبيل المثال، يمكنك من خلال المرشد لإنشاء قالب جدول أعمال أن تتحكم في تصميم الصفحة، أسماء حضور الاجتماع، بنود الاجتماع، وغيرها. ويمكنك معاينة التغييرات التي تجريها على تصميم القالب من نافذة المعاينة خلف مربع الحوار. بإمكانك أن تحدد في القسم الأخير من المرشد الاسمَ الذي سيظهر في مربع الحوار القوالب بالإضافة إلى تحديد الموقع الذي ستحفظ عليه القالب. أدخل اسم القالب في الحقل المخصص له، ثم انقر على النقاط الثلاثة بجانب حقل الموقع لإدخال اسم ملف القالب وتحديد مجلد الحفظ (الموقع المبدئي هو مجلد template، لكن يمكنك اختيار موقع مختلف). بعد تحديد اسم ملف القالب وموقعه انقر على زر احفظ Save لإغلاق مربع الحوار حفظ باسم Save As. وبالعودة إلى المرشد، يمكنك أن تحدد ما إذا كنت تريد إنشاء مستند جديد من القالب مباشرة، أو إجراء تعديلات يدوية على القالب، حدد أحد الخيارين تحت عبارة ما الذي تريد عمله بعد ذلك ثم انقر على زر أنه Finish. سيُضاف القالب الجديد إلى فئة قوالبي وبإمكانك الوصول إليه واستخدامه لإنشاء المستندات عبر مربع الحوار القوالب. ملاحظة: إذا لم يظهر القالب، حاول أن تُحدّث القائمة بالنقر على أيقونة الترس ثم الخيار أنعش (حدّث) Refresh لكي يظهر القالب الجديد. تحرير القوالب بإمكانك تحرير أنماط القالب ومحتواه، ومن ثم إعادة تطبيق أنماط القالب على المستندات التي أنشِئت اعتمادًا على ذلك القالب، لكن لا يمكنك إعادة تطبيق المحتوى. لتحرير قالب معيّن، افتح مربع الحوار القوالب (ملف > القوالب > أدر القوالب أو اضغط على Ctrl + Shift + N). بعد ذلك انقر بزر الفأرة الأيمن على الصورة المصغرة للقالب الذي تريد تعدليه واختر حرّر Edit. سيُفتح القالب في LibreOffice، ويمكنك بعدها أن تجري أي تعديل تريده على المستند. ولحفظ التغييرات اذهب إلى ملف File > احفظ Save من شريط القوائم. تحديث المستندات من قالب مُعدَّل إذا قمت بتحرير القالب وأنماطه، فإنه في المرة القادمة التي تفتح فيها أحد المستندات التي أنشئت اعتمادا على ذلك القالب قبل تعديله ستظهر لك رسالة تأكيد لتحديث المستند. يمكنك من خلالها القيام بأحد الإجراءين التاليين: تحديث الأنماط: لتطبيق الأنماط المعدّلة في القالب على المستند. الاحتفاظ بالأنماط القديمة: لعدم تطبيق الأنماط المعدلة في القالب على المستند. لكن في هذه الحالة سيتم فك ارتباط القالب بالمستند، حتّى وإن كان اسم القالب ما زال ظاهرًا في خصائص المستند (ملف > خصائص > عام). مع ذلك، ما زال بإمكانك استيراد الأنماط يدويًا من القالب، لكن في حال رغبت في إعادة ربط المستند بالقالب، يجب أن تنسخ محتويات المستند وتلصقها في مستند فارغ يستند على ذلك القالب. تعيين قالب افتراضي (مبدئي) Default إذا كنت تنشئ المستندات عبر المسار ملف > جديد، فسيُستخدَم القالب الافتراضي لذلك النوع من المستندات (نص، جدول بيانات، عرض تقديمي…إلخ). مع ذلك، بإمكانك أن تحدد القالب الافتراضي الذي تريد استخدامه في كل مرة تنشئ مستندًا جديدا. تعيين القالب كـ “افتراضي” أغلب الإعدادات الافتراضية، كحجم الصفحة وهوامش الصفحة، تكون قابلة للتغيير عبر المسار أداوت > الخيارات، لكن هذه التغييرات تُطبّق على المستند الذي تعمل عليه فقط. لجعل هذه التغييرات هي الإعدادات الافتراضية لذلك النوع من المستندات، يجب أن تستبدل القالب الافتراضي بآخر جديد. بإمكانك تعيين أيّ من القوالب المعروضة في مربع الحوار القوالب كـ افتراضي لنوع معين من المستندات بالذهاب إلى ملف > القوالب > أدر القوالب. بعد ذلك انقر بزر الفأرة الأيمن على القالب المرغوب واختر اجعله المبدئي. في المرة القادمة التي تريد فيها إنشاء مستند جديد عبر المسار ملف > جديد، سيُنشَأ ذلك المستند من هذا القالب الذي عيّنته كافتراضي. إعادة تعيين القالب الافتراضي لإعادة تعيين القالب الافتراضي الأصلي للمستندات، واستخدامه من جديد كقالب افتراضي، انقر على أيقونة الترس في الجزء السفلي من مدير القوالب، مرر مؤشر الفأرة فوق صفّر القالب المبدئي Reset Default Template واختر مستند نصي Text Document. لن تظهر هذه الخيارات مالم تعيّن قالبًا مخصّصًا كـ افتراضي مسبقًا، وكما وضحنا في الفقرة السابقة. بعد إعادة تعيين القالب الافتراضي، ستُنشَأ كل المستندات الجديدة بناءً على القالب الافتراضي الأصلي لذلك النوع من المستندات. تنظيم القوالب يمكن أن يستخدم LibreOffice القوالب المضافة إلى مجلدات القوالب الخاصة به فقط. وبإمكانك إنشاء مجلدات القوالب واستخدامها لتنظيم قوالبك. على سبيل المثال، يمكنك إنشاء مجلد لقوالب التقارير، وآخر لقوالب الرسائل، وهكذا. كما بإمكانك تصدير القوالب من تلك المجلدات أو استيرادها إليها. للبدء، افتح مدير القوالب عبر المسار ملف > القوالب > أدر القوالب. إنشاء مجلد قوالب لإنشاء مجلد قوالب، انقر على أيقونة الترس في الجزء السفلي من مربع الحوار القوالب واختر فئة جديدة New Folder. في مربع الحوار الذي سيظهر، أدخل اسمًا مناسبًا لمجلد القوالب وانقر على حسنًا OK. ملاحظة: لا يمكن إنشاء مجلد فرعي ضمن مجلد قوالب في LibreOffice. حذف مجلد قوالب لا يمكن حذف مجلدات القوالب التي تأتي مبدئيا مع LibreOffice، ولا يمكن حذف أي مجلد مضاف بواسطة مدير الامتدادات، إلّا إذا قمت بحذف الملحق الذي قام بتنصيب ذلك المجلد أولًا. مع ذلك بإمكانك حذف مجلدات القوالب التي أنشأتها بنفسك، ويتم ذلك بالنقر على أيقونة الترس في الجزء السفلي من مربع الحوار القوالب واختيار احذف الفئة Delete Folder. من مربع الحوار الذي سيظهر، حدد مجلد القوالب الذي تريد حذفه وانقر على زر حسنًا. بعد ذلك أكّد الحذف بالنقر على زر نعم. نقل القوالب لنقل قالب معين من مجلد قوالب إلى آخر، حدد هذا القالب ثم انقر على زر انقل Move في الجزء السفلي من مربع الحوار القوالب. بعد ذلك حدد مجلد القوالب الذي تريد نقل القالب إليه من مربع الحوار الذي سيظهر، ثم انقر على زر حسنا. حذف القوالب لا يمكنك حذف القوالب التي تتوفر بشكل افتراضي مع LibreOffice. كما لا يمكنك حذف أي قوالب تم تنصيبها بواسط مدير الامتدادات مالم تقم بحذف الملحق الذي قام بتنصيب تلك القوالب. مع ذلك، بإمكانك حذف القوالب التي أنشأتها أو استوردتها بنفسك. لحذف قالب معين، انقر عليه بزر الفأرة الأيمن من مربع الحوار القوالب، ثم اختر احذف Delete. بعد ذلك أكّد عملية الحذف بالنقر على زر نعم من مربع الحوار الذي سيظهر لك. استيراد القوالب لقد تطرقنا إلى كيفية استيراد القوالب ومجلدات القوالب إلى LibreOffice بالتفصيل في الدرس السابق (كيفية استخدام القوالب لإنشاء المستندات) لذا سنكتفي بشرح الخطوات بشكل سريع في هذا الدرس. لاستيراد قالب قمت بحفظه على أحد المجلدات في جهازك، انقر على زر استورد Import من مربع الحوار القوالب. بعد ذلك حدد مجلد القوالب الذي تريد استيراد القالب إليه. وأخيرًا اذهب إلى المجلد الذي تحفظ القالب عليه من متصفح الملفات، حدد القالب، ثم انقر على زر فتح Open. ستتم إضافة القالب إلى مجلد القوالب الذي حددته، وسيكون بإمكانك استخدامه لإنشاء المستندات. تصدير القوالب لتصدير قالب ما من مجلد القوالب إلى مكان آخر على جهازك، حدّد القالب من مربع الحوار القوالب ثم انقر على زر صدّر Export. من مربع الحوار اختيار مسار الذي سيظهر، حدد المجلد الذي تريد حفظ القالب عليه ثم انقر على حسنًا OK. ترجمة- وبتصرّف - لدليل المستخدم الخاص بالحزمة المكتبية LibreOffice.
  18. القالب هو عبارة عن مستند نموذجي يُستخدَم لإنشاء مستندات أخرى. على سبيل المثال، يمكنك إنشاء قالب لتقارير العمل بحيث يحتوي على شعار شركتك في الصفحة الأولى. وبالنتيجة ستحتوي كل المستندات الجديدة التي تنشئها من هذا القالب على شعار الشركة في الصفحة الأولى أيضًا. يمكن أن تتضمن القوالب جميعَ العناصر التي يمكن أن يتضمنها المستند الاعتيادي، كالنصوص، العناصر الجرافيكية، والأنماط، بالإضافة إلى الإعدادات المخصصة من قبل المستخدم، كالقياسات، اللغة، الطابعة المبدئية (الافتراضية)، وتخصيصات قوائم وأشرطة الأدوات. تُبنى جميع مستندات LibreOffice على أساس القوالب، وبإمكانك إنشاء قالب محدد لأي نوع من المستندات (النصوص، جداول البيانات، العروض التقديمية…إلخ). إذا لم تحدد قالبًا معيّنًا عند إنشاء المستند، فسيُنشَأ باستخدام القالب المبدئي لذلك النوع من المستندات. وإذا لم تحدّد قالبًا مبدئيًّا، سيستخدم LibreOffice القالب الفارغ لذلك النوع من المستندات والذي نُصِّب مع البرنامج. سنتعلم في هذا الدرس كيفية استخدام القوالب التي يوفرها LibreOffice لإنشاء المستندات بطرق مختلفة، كيفية إضافة قوالب من مصادر أخرى، وكيفية ربط المستند بقالب مختلف. إنشاء مستند من مربع الحوار القوالب Template Manager لاستخدام أحد قوالب LibreOffice لإنشاء مستند، قم أولًا بفتح مربع الحوار القوالب عن طريق المسار ملف File > جديد New > القوالب Templates (أو باستخدام مفاتيح الاختصار Ctrl + Shift + N). من مربع الحوار القوالب، بإمكانك إمّا إدخال كلمة مفتاحية معينة في حقل البحث للعثور على القالب المرغوب، أو تصفية القوالب المعروضة حسب نوع الملف (مستندات، عروض تقديمية، رسومات…إلخ)، ثم اختيار إحدى الفئات المتوفرة. وبما أننا نعمل على برنامج Writer، سنحدد الخيار مستندات من قائمة رشّح والخيار كل الفئات من القائمة المجاورة لها. من القوالب المتوفرة لمستندات LibreOffice Writer، قوالب للسيرة الذاتية، قوالب الرسائل الرسمية/المهنية، وغيرها. عندما تعثر على القالب المناسب، انقر عليه نقرة مزدوجة وسيُفتح في مستند جديد مستقل. يمكنك بعد ذلك أن تبدأ بتحرير القالب وإجراء التخصيصات المرغوبة ومن ثم حفظه. إنشاء مستند من قالب في صفحة البداية Start Center بإمكانك إنشاء مستند من القوالب في صفحة البداية لحزمة LibreOffice، ويمكن عرض هذه الصفحة عندما تكون جميع مستندات LibreOffice مغلقة، وعندما تكون بيئة التطوير المتكاملة (IDE) للماكرو مغلقة أيضًا. لفتح نافذة القوالب (Template Manager) من صفحة البداية، انقر على زر القوالب من الجزء الجانبي. يرافق هذا الزر أيضًا قائمة منسدلة لعرض القوالب الخاصة بنوع معين من المستندات (رايتر، كالك، إمبريس…إلخ)، بالإضافة إلى الخيار أدر القوالب الذي يفتح نفس مربع الحوار القوالب الذي استخدمته في الطريقة السابقة. عند اختيار أحد أنواع المستندات، ستُعرض القوالب المتاحة لذلك النوع فقط، بعدها انقر نقرة مزدوجة على الصورة المصغرة للقالب المرغوب لإنشاء مستند جديد مبني على هذا القالب، ومن ثم البدء بتحرير القالب وتخصيصه. إضافة قوالب من مصادر أخرى بالإضافة إلى مجموعة القوالب آنفة الذكر التي تتوفر مع تنصيب الحزمة، بإمكانك استخدام قوالب من مصادر أخرى لإنشاء مستنداتك، كأن يكون المصدر محليًّا (مجلد على جهازك قمت بتنزيل القوالب عليه)، أو بعيدًا (رابط يمكنك تنزيل القوالب منه). بإمكانك الوصول إلى مصدر القوالب الرسمي الخاص بالحزمة LibreOffice بالنقر على زر الكرة الأرضية في الجزء السفلي من مربع الحوار القوالب (جديد > القوالب)، أو بزيارة هذا الرابط بواسطة المتصفح. في الحالتين سيتم توجيهك إلى الصفحة الرسمية لقوالب حزمة LibreOffice، يمكنك تصفح القوالب المتوفرة وتحميل القالب المرغوب. عند تحميل القوالب، ربما تلاحظ أن بعضها متوفر بشكل حزمة ومجموعة في ملف بامتداد OXT. وطريقة تنصيب القوالب المنفردة تختلف قليلًا عن طريقة تنصيب حزمة القوالب، كما سنوضّح أدناه. ### تنصيب قالب مفرد افتح مربع الحوار القوالب، ثم انقر على زر استورد Import في الزاوية السفلى اليسرى منه. بعد ذلك حدد الفئة التي تريد نقل القالب إليها وانقر على زر حسنًا: بعد فتح مستعرض المجلدات، اذهب إلى المجلد الذي قمت بحفظ القالب فيه عند التنزيل، حدد ملف القالب، ثم انقر على زر فتح Open. سيُضاف القالب إلى الفئة المحددة، وسيكون بإمكانك استخدامه لإنشاء المستندات. تنصيب حزمة قوالب يوفر مدير الامتدادات Extension Manager طريقة سهلة لتنصيب حزم القوالب التي تم تجميعها بصيغة امتداد، ويتم ذلك باتباع الخطوات أدناه. بعد أن تُنزّل حزمة القوالب (ملف OXT) وتحفظها في مجلد ما على جهازك، افتح مربع الحوار مدير الامتدادات عبر المسار أدوات Tools > مدير الامتدادات Extension Manager. انقر على زر أضف Add لاستيراد الامتداد/الملحق (حزمة القوالب): من مستعرض المجلدات، اذهب إلى المجلد الذي قمت بحفظ حزمة القوالب عليه، حدد الملف، ثم انقر على زر فتح Open. سيبدأ تنصيب الحزمة، وسيُطلب منك قراءة اتفاقية الترخيص والموافقة عليها قبل التنصيب، انقر على زر اقبل للمواصلة. أغلق مربع الحوار بعد اكتمال التنصيب وأعد فتح المستند لكي يعمل الامتداد بشكل صحيح. وسيصبح بإمكانك الوصول إلى مجموعة القوالب التي قمت بتنصيبها واستخدامها لإنشاء المستندات عبر مربع الحوار القوالب. ربط المستند بقالب مختلف إذا رغبت في ربط المستند بقالب آخر غير القالب الأصلي الذي بنيت عليه المستند في البداية يمكنك استخدام إحدى الطريقتين التاليتين. الطريقة الأولى يُربَط المستند بقالب مختلف يدويًا على النحو التالي: افتح مربع الحوار القوالب ثم افتح القالب المرغوب بالنقر نقرة مزدوجة على الصورة المصغرة الخاصة به. سيُفتح مستند جديد مبني على هذا القالب يحتوي على النصوص أو الصور التي يمكن أن يتضمنها القالب. احذف العناصر غير المرغوبة من المستند الجديد. افتح المستند الذي تريد تغيير قالبه وحدّد جميع محتوياته (Ctrl + A) ونسخها (Ctrl + C). انقر داخل المستند الفارغ الذي أنشأته في الخطوة الأولى، ثم ألصق المحتوى الذي قمت بنسخه (Ctrl+ V).حدّث الفهرس (جدول المحتويات) إن وُجد، ثم احفظ المستند الجديد. الطريقة الثانية تعتمد هذه الطريقة على استخدام الملحق Template Changer، كالتالي: نزّل الملحق Template Changer من هذا الرابط ثم نصّبه من خلال مربع الحوار مدير الامتدادات (أدوات > مدير الامتدادات) كما قمنا بتنصيب حزمة القوالب. سيُضاف خياران جديدان إلى القائمة ملف > قوالب هما: Assign Template (current document) لتعيين قالب للمستند الحالي، وAssign Template (folder) لتعيين قالب لمستند آخر. افتح المستند الذي تريد تغيير قالبه، ثم اذهب إلى ملف > القوالب > Assign Template (current document). من نافذة Select Template، اذهب إلى المجلد الذي تحفظ عليه القالب الجديد، حدد القالب، ثم افتحه بالنقر على زر Open. احفظ المستند بعد تغيير القالب. ويمكنك الآن أن تلاحظ أن القالب الجديد قد تم تعيينه للمستند الحالي إذا نظرت إلى خصائص المستند العامة (ملف > الخصائص > عام > القالب). يُفضَّل للحصول على أفضل نتيجة عند تغيير القالب في كلتا الحالتين أن تكون أسماء الأنماط هي نفسها في المستند الحالي والقالب الجديد. فبخلاف ذلك سيتوجب عليك استخدام البحث والاستبدال لاستبدال الأنماط القديمة بالأنماط الجديدة. خاتمة يمكن أن تكون القوالب من الأدوات المفيدة جدًا لاختصار الوقت إذا كنت تنشئ مستندات متشابهة باستمرا؛ ففي هذه الحالة تستطيع استخدام نفس القالب في كل مرّة بتعديله وتخصيصه بدلًا من إنشاء مستند من الصفر. بالإضافة إلى ذلك، تكون بعض القوالب ذات مظهر متسق وجميل، يمكنك استخدامها لإنشاء مستندات منسقة مسبقًا بتحرير القالب وتخصيص محتواه فقط. سنتعرف في الدرس القادم على كيفية إنشاء القوالب وتعديلها. ترجمة- وبتصرّف - لدليل المستخدم الخاص بالحزمة المكتبية LibreOffice.
  19. نواصل معكم ما بدأناه في الجزء السّابق من هذا المقال، وسنستعرض المزيد من النّصائح المُتعلّقة بتنسيق محتوياتك (مقالات، تدوينات، منشورات على الشّبكات الاجتماعية) لتحصل على أكبر قدر من المُشاركات. إذا لم تقرأ الجزء الأول فاطّلع عليه أولا. استعمل الصور بشكل صحيح ومناسب يحتفظ عقلنا بالمعلومات البصريّة أكثر من النصيّة. في الواقع، وجدت إحدى الدراسات أن الإنسان يحتفظ فقط بـ10-20% من المعلومات المكتوبة/المسموعة لكنه يحتفظ تقريبًا بـ65% من المعلومات التي يحصل عليها بصريًّا. نحن أيضًا نقوم بمعالجة المعلومات البصريّة بفعاليّة أكبر من معالجتنا للمعلومات النصيّة. يمكنك رؤية هذا بنفسك من خلال هذا المثال الرائع من Uberflip: دعم النص بالصور والبصريّات (visuals) يُساعد القارئ في عملية القراءة الاستطلاعيّة السريعة ويساعده على التقاط المعلومات المهمّة التي يحتاجها بسهولة. الصور أيضًا تحصد عددًا كبيرًا من المشاركات. وتحصد التدوينات التي تحتوي على صور على تويتر ارتفاعًا في معدل إعادة التغريد متوسطُه 35%. ما أفضل أنواع الصور وأكثرها فائدة؟ قام موقع QuickSprout ببحثٍ عن أنواع الصور التي تجعل التدوينات تحصد أكبر عدد من المشاركات عبر مواقع التواصل الاجتماعي. وجدت البيانات التي حصلوا عليها أن الصور المتحركة كانت أفضل أنواع الصور التي يمكن استخدامها في مقالاتك إذا كنت تريد أن تحصد المزيد من المشاركات، كما يمكنك أن ترى من الرسم البياني التالي الذي أعدّه موقع Socialfresh باستعمال البيانات المبنية على دراسة موقع Quicksprout. إليك مثالًا عظيمًا على كيفية استخدام الصور المتحركة لإثراء التدوينة: أمّا في المرتبة الثانية بعد الصور الرسوميّة المتحركة، فقد وجدت دراسة Quicksprout أن الصور الرسوميّة (مثل صور موقع The Oatmeal) تزيد معدّل المشاركات. تأتي الانفوجرافيكس في المرتبة الثالثة. والرسوم البيانيّة والجداول في الرابعة. كما أنّ التدوينات التي تحتوي على الرسوم البيانية والجداول تحصد trackbacks (نوع من أنواع الرّوابط الخلفية) أكثر بنسبة 258% من التدوينات التي لا تحتوي على هذا النوع من الصور. استعمل الاقتباسات اقتباس أقوال الخبراء والرّواد في المجال طريقةٌ عظيمة لزيادة مصداقية محتواك ولبناء الثقة بينك وبين جمهورك. ومن الميّزات الأخرى لاستخدام الاقتباسات والتي يتم التغاضي عنها أنها تزيد عدد المشاركات التي يحصدها محتواك. وجدت دراسة أجريت على تويتر أنّ الاقتباسات تزيد نسبة إعادة التغريد بمقدار 19%. هذه الدراسة تم دعمها أيضًا بواسطة Dan Zarella الذي وجد أن التغريدات التي تحتوي على علامات اقتباس يكون احتمالية إعادة تغريدها أكبر بنسبة 30% من تلك التي ليس بها علامات اقتباس. كيف تستخدم علامات الاقتباس في محتواك هناك العديد من الطرق المتنوعّة التي يمكنك من خلالها تضمين الاقتباسات في محتواك: في بداية المقال: تستفتح الكثيرٌ من الكتب فصولها باقتباسٍ ما، يمكنك اتباع هذا النهج أيضًا بإضافة اقتباس مناسب لبدء مقالك بشكلٍ جيّد. لدعم فكرة أو وجهة نظر تطرحها: استخدام اقتباساتٍ لمشاهير أو خبراء طريقةٌ جيّدة لتدعيم الأفكار التي تطرحها. لإبراز فكرة ما: ويمكنك الاستلهام من موقع Baremetrics في هذا الشأن، حيث يحوّلون الفكرة الأساسية للمقال كاقتباس جاهز للنّشر. تنسيق الاقتباسات بشكل صحيح إذا كنت تستخدم الاقتباسات فمن الجيّد أن تفصلها عن باقي النص. إذا اقتبست فقط القليل من الكلمات، فمن الأفضل استخدام علامات اقتباس " " ونمط الخط المائل بهذا الشكل: "هذا اقتباسٌ قصير." أما إذا كانت الاقتباسات طويلة، يمكنك تنسيقها باستعمال وسم <blockquote>. وإليك كيف يظهر هذا التنسيق في أكاديمية حسوب: توفّر CoSchedule إضافة رائعة لووردبرس لجعل الاقتباسات سهلة التغريد والنشر على تويتر: تواصل مع الأشخاص الذين تقتبس منهم التواصل مع الأشخاص الذين تستعمل اقتباساتهم في مقالك طريقةٌ ممتازة لزيادة عدد المشاركات التي يحصدها محتواك ويساعدك هذا الأمر أيضًا على الاتصال مع المزيد من الجمهور. إليك بعض النصائح المتعلّقة بمراسلة الأشخاص الذين تقوم بالاقتباس لهم عبر البريد الإلكتروني: المختصر المفيد: اجعل رسالتك موجزة وادخل في الموضوع مباشرةً؛ فصندوق بريدهم الإلكتروني يكون مشغولًا في الغالب و ليس لديهم الكثير من الوقت لكلّ رسالة. لا تطلب منهم الأمر بشكلٍ مباشر: لا يجب عليك أن تطلب منهم بشكلٍ مباشر أن يشاركوا محتواك، هذه الرسالة ببساطة لتجعلهم يعرفون أنّك ذكرت اقتباسًا لهم في مقالك. ضمّن الرسالة رابطًا للمقال: فأنتَ بالطبع لا تريد أن تجعل الشخص الذي ترسل له الرسالة يتوه في البحث عن المقال، أضف رابطًا للمقالة واطلب مهم أن يتصفحوها. هذا مثالٌ لرسالة من هذا النوع، أرسلها أحد مدوّني مدوّنة buffer بعد أن ذكر خدمة Twibble في تدوينةٍ له (والترجمة مرفقة بالأسفل): ملاحظة: تمّ وضع رابط تشعّبي للمقال والمدوّنة في الرسالة. الرد: كيف تنسق المشاركات الاجتماعية الطريقة التي تنسّق بها مقالك على وسائل التواصل الاجتماعي المتنوّعة يمكنها أن تمنحك ميزةً تنافسيّة وتزيد من معدّل المشاركات. إليك بعض النصائح السريعة والفعّالة حتى تجعل تحديثاتك على تويتر، فيسبوك، Linked-in و +Google أكثر احتماليّة للمشاركة. تنسيق التغريدات لتحصد أكبر كمية من إعادة التغريد التغريدات بطبيعتها لها عمرٌ افتراضيٌّ قصير (وأشارت إحدى الدراسات أنّه يبلغ حوالي 18 دقيقة) وهذا يترك لك وقتًا قصيرًا لجذب اهتمام متابعيك والحصول على بعض الريتويتات. إذا كنت تريد أن تحصد أكبر قدرٍ من "إعادة التغريد" فإن الطول الأمثل للتغريدة هو بين 100-150 حرف. قامت تويتر بمشاركة بعض الحقائق عن الأمور التي تغذّي وتدعم التفاعل مع التغريدة، وإليك بعض ما وجدوه: التغريدات التي تحتوي على صور تحصد على إعادة تغريد أكثر بنسبة 35%. التغريدات التي تحتوي على مقطع فيديو تحصد على إعادة تغريد أكثر بنسبة 28%. التغريدات التي تحتوي على اقتباسات تحصد على إعادة تغريد أكثر بنسبة19%. إضافة أرقام يزيد إعادة التغريد بنسبة 17%. الوسوم (Hashtags) تزيد معدل إعادة التغريد بنسبة 16%. من المهم الإشارة إلى أنّ هذه النتائج قد تختلف باختلاف المجال. إذا كنت تريد زيادة معدّل إعادة التغريد، يجب عليك أن تجرب أنواعًا مختلفة من التغريدات (بعضها بصور، وبعضها بوسوم..الخ) لترى ما أفضل طريقة تناسبك. تستطيع استخدام أداة مثل Buffer analytics للتجربة وقياس النتائج. فيس بوك وفقًا للعديد من المصادر (ومنها فيس بوك نفسه) فإنّ أفضل تحديث على فيس بوك هو الذي يتضمّن رابطًا. هذه المعلومة التي شاركها فيس بوك حول الموضوع مدهشة: من الأشياء الرائعة فيما يتعلّق بالروابط هي أنّك تستطيع تعديل وتخصيص معظم الحقول. يمكنك أن تكتب تحديثك ليُرافق الرابط ، كما تستطيع تغيير عنوان الرابط وملخّص المقال باستعمال أوسمة Open Graph. عندما تريد أن تضيف منشورًا، أظهرت الدراسات أنّه من الأفضل للمنشور على فيس بوك أن يكون قصيرًا. وجدت BizLocal أنّ المنشورات الأطول لديها احتمالية أكبر بقلة التفاعل من الجمهور وأنّ الطول المثالي للمنشور هو بين 100 و 119 حرف. وأنّ المنشورات التي تحتوي على أسئلة تقود إلى زيادة التفاعل بنسبة 10-20% Linked-in بشكلٍ مماثل لفيس بوك، تستطيع تخصيص المنشورات في لنكدإن بشكلٍ كبير. تستطيع تعديل عنوان الرابط، الوصف، الصور المصغرة (باستخدام open graph) وتستطيع كتابة تحديثاتك الخاصة لنشرها مع الرابط. أكثر المحتوى الذي تمّ مشاركته في لينكدإن هو لمقالات تحتوي على عناوين قصيرة وسريعة- فهي تتكون بشكلٍ عام أقل من 10 كلمات. إذا كان عنوان المقال الذي تشاركه أكثر من 10 كلمات، اختصره حتى تزيد احتمالية أن يُشاركه القرّاء. +Google بخلاف المنصّات الأخرى، يوصَى باستخدام النصوص الطويلة نسبيًّا في +Google. فقد أظهر بحث أجراه موقع Quintly أنّ متوسط طول المنشور في +Google يصل إلى 156 حرف أي ما يعادل جملتين أو ثلاثة. يسمح لك +Google بتنسيق هذه النصوص الطويلة في تحديثاتك باستعمال نمط الخط العريض، المائل، والمشطوب حتى تستطيع أن تيسّر القراءة الاستطلاعيّة على القارئ. تستطيع أن تنسّق النص على +Google باستعمال هذا الدليل الإرشادي المُترجَم من Social Media Examiner: سيسرّنا سماع أفكارك حول طريقة تنسيق المحتوى التي تُسهم في حصد عدد أكبر من المشاركات. هل هناك أيّ فكرة جديدة قرأتها في هذا المقال وتنوي تجربتها؟ وهل هناك طريقةٌ جيّدة تستخدمها بالفعل؟ سيسرّنا معرفة أي نصائح تودّ مشاركتها معنا في خانة التعليقات ترجمة -وبتصرف- للمقال Formatting Secrets of Content That Gets Shared لصاحبه Ash Read.
  20. أحاولُ أن أقرأ كثيرًا، وأخصّص كلّ صباحٍ 30 دقيقة لتصفّح التدوينات والمقالات الجديدة لكتّابي المفضّلين ومدوّناتي المفضّلة. لا تستطيع قراءة الكثير في 30 دقيقة؛ فبعض التدوينات أقرأها قراءةً سريعة، والبعض الآخر أفتحه وأغلقه في نفس اللحظة، أمّا التي تحوز إعجابي فأقوم بمشاركتها على الشّبكات الاجتماعية. عادةً، قراري الذي أتّخذه بشأن قراءة التدوينة ومن ثمّ مشاركتها يعتمد بشكلٍ كبيرٍ على التنسيق (formatting): هل المحتوى سهل القراءة؟ هل أستطيع أن أبحث بسهولةٍ عمّا أريده داخل المقال؟ في هذا المقال، سأشارككم سبب كون التنسيق مهمًّا بشكلٍ كبير وسأخبركم عن بعض النصائح والتّوصيات التي تستطيعون تطبيقها على المحتوى الذي تقدّمونه لتزيد احتماليّة أن يحوز على عددٍ أكبر من المشاركات. لماذا يعد التنسيق الجيد بنفس أهمية جودة المحتوى عندما يتعلّق الأمر بكتابة محتوى يحصد عددًا كبيرًا من المشاركات على شبكة الإنترنت، هناك بعض الجوانب التي يجب مراعاتها والتي يمكن أن تعتقد أنّها أهمّ من التنسيق. من الصّعب أن تنال اهتمام القراء بالمحتوى الذي تقدّمه، خصوصًا على الإنترنت. وقد فُسّر هذا بواسطة دراسة أجرتها مايكروسوفت ووجدت أنّ متوسّط فترة اهتمام مستخدم الإنترنت بمحتوىً معيّن قد انخفضت بشكلٍ كبير، فقد كانت 12 ثانية في عام 2000 وانخفضت إلى 8 ثواني في 2015. إذا كانت تدوينتك لا تظهر بشكلٍ جذّاب على الفور، لن يكمل القارئ قراءة محتواها العظيم. لتدرك أهمّيّة التنسيق، دعنا نستخدم واحدة من التدوينات على مدوّنة Buffer كمثال. في الجانب الأيسر من الصورة أدناه لدينا النسخة المنسّقة من التدوينة (وهي التي تراها في المدوّنة) وفي الجانب الأيمن لدينا نسخة غير منسّقة للتدوينة نفسها. محتوى الصّورتين متطابق. ومن الواضح أنّ النسخة المنسّقة أسهل بكثير على القارئ وأكثر جاذبيّة للعين. سيغطّي هذا المقال العديد من النصائح والطرق المتّبعة في التنسيق والتي تسهّل على القارئ قراءة المحتوى وتُسهم في أن يحصد عددًا أكبر من المشاركات. هيّا نبحر في هذا الأمر بشكلٍ أعمق، ونبدأ ببعض النصائح السريعة التي تستطيع تطبيقها خلال دقائق: ثلاث نصائح بسيطة لتنسيق المحتوى 1. استخدم عناوين فرعية لافتة للنظر العناوين الفرعيّة تُستخدم لتقسيم المحتوى والنص إلى أجزاء قابلة للقراءة المسحيّة (الاستطلاعيّة) السريعة التي يفهمها Google والقارئ على حدّ سواء ويجدونها سهلة الاستيعاب. ربما سبق وأن شاهدت أوسمة <H1> أو <H2> عندما تضيف تدوينةً إلى نظام إدارة المحتوى الذي تستعمله (مثل ووردبرس). أوسمة العناوين (Heading Tags) هي الطريقة المتبعة لتنسيق العناوين الرئيسية والفرعيّة للمحتوى على الإنترنت. أوسمة العناوين تتنوّع من H1 إلى H6 (وللعلم H5 و H6 لا يستخدمانٍ بشكلٍ كبير على الإنترنت حاليًّا). وسم H1 يستخدم لعنوان التدوينة، وأفضل ممارسة على الإطلاق هو أن يكون هناك وسم H1 واحد فقط في الصفحة (أي في المقال). فمحرك بحث جوجل يستخدم أوسمة H1 لتصنيف محتوى الصفحة، فإذا كان لديك العديد من عناوين الـH1 في المقال فسيكون من الصّعب على جوجل أن يكتشف ما هي الكلمات المفتاحيّة المرتبطة مع المحتوى الخاص بك. وسم H2 يكون عادةً للعناوين الفرعيّة لعنوان H1 و ـH3 للعناوين الفرعيّة لعنوان H2. من الأفضل أن تجعل استخدامك للأوسمة متّسقًا وموحّدًا عبر موقعك بشكلٍ كامل لتسهّل الأمر على القرّاء. على سبيل المثال، هذه هي الطريقة التي نستعملها في الأوسمة لبناء المقالات بشكل عام: هناك تقنيةٌ أخرى يستعملها موقع Buffer تسمّى بـ Heading Stack (تكدُّس العناوين) وهي تتمثّل بعنوان H2 يتبعه مباشرةً أسفله عنوان H3. 2. اجعله قابلا للقراءة المسحية / الاستطلاعية معظم القراء على الإنترنت "يتصفّحون" النصوص التي يقرؤونها. في الواقع، حتّى إن أحبّ القارئ التدوينة، فإنّه سيقرأ فقط 20-28% من محتواها في المتوسّط. تنسيقك للنّص سيضمن حصول القارئ على جميع المعلومات المهمّة في مقالك بدون قراءته كلمةً كلمة. لتجعل المقال قابلًا للقراءة المسحية، اقرأه قبل نشره وقُم بإبراز الأقسام المهمّة التي تشعر أنّ القارئ يجب أن يحصل عليها من المقال لينال أكبر قيمةٍ منه - قم بإبرازِها باستعمال الخط الغامق، المائل، أو القوائم المنقّطة (bullet point lists) بهذه الطريقة: الخط الغامق يستعمل لإبراز الجمل المهمّة وجذب انتباه القارئ. الخط المائل يستعمل بشكلٍ أساسيّ للجمل الحواريّة. القوائم (كهذه القائمة) تستخدم في عرض المعلومات وتساعد القارئ على معالجة المعلومات بسهولةٍ أكبر ممّا لو كانت في فقرات. 3. الفقرات القصيرة التقدّم يجعلنا نشعر بالسعادة. لا أحد يحبّ أن يبذل مجهودًا في عملٍ ما وهو يشعر أنّ ذلك المجهود لا يجعله يحرز تقدّمًا. نفس الأمر ينطبق على القراءة. الفقرات القصيرة تجعلك تشعر أنّك تتقدّم في قراءة النص بشكلٍ أسرع وتمنحك إحساسًا بالإنجاز. ومن الطّرق المتّبعة لمنح القارئ هذا الإحساس: أن تبني فقراتك باستعمال أسلوب الهرم المقلوب (the inverted pyramid style ). وهو يتمثّل في أن تبدأ كل فقرة من فقراتك بملخّصها، ثم تستعمل الجمل اللاحقة لدعم ذلك الملخّص وتعزيزه. هذا الرسم التوضيحي من CoSchedule يوضّح هذه الطريقة: أسلوب الهرم المقلوب مفيدٌ لأنّه يمكن القارئ من القفز من نقطةٍ لأخرى بسهولةٍ ويمكّنه من التعمّق في قراءة المحتوى الذي يسترعي انتباهه. اجعل محتواك سهل المشاركة إذا كنت تريد من القرّاء أن يقوموا بمشاركة المحتوى الذي تقدّمه لهم، يجب عليك أن تُسهّل ذلك عليهم قدرَ الإمكان. خلال تجربةٍ أُجريت مؤخّرًا، قامت مدوّنة Crew باختبار وضع أزرار المشاركة في أعلى / أسفل المقال وقام رئيس التحرير Jory MacKay بمشاركة النتائج التي حصلوا عليها في أحد مقالات الإحصائيّات الشهريّة للمدوّنة. من الأشياء التي وجدوها من خلال هذه التجربة هو أنّ القراء يميلون لمشاركة المقالات باستخدام أزرار المشاركة الموجودة في أسفل المقال مقارنةً بالتي توضع في أعلاه. ويؤمن MacKay أن هذا بسبب أنّ أزرار المشاركة تكون واضحةً وظاهرة أكثر عندما توضع في الأسفل، وأنّ القراء يميلون لمشاركة المقالات التي قرؤوها/تصفّحوها بالفعل. أشار MacKay أيضًا إلى أهميّة العناصر النّمطية prototypical elements: عندما يتعلّق الأمر بأزرار المشاركة هناك أربع عناصر أساسيّة يجب أن تأخذها بعين الاعتبار: الموقع: عندما تزور مدوّنة ما، فأنت تتوقع أن ترى أزرار المشاركة في مواقع محددة: على اليسار (أو على اليمين إن كان المقال بالعربية)، في الأعلى، أو في أسفل المقال. عندما تراعي هذه المعايير المتوقّعة، لن يكون على القراء أن يذهبوا للبحث عن طرقٍ لمشاركة محتواك. اللون: الألوان مهمّة بشكلٍ كبير في التسويق. إذا استخدمت الألوان الصحيحة للعلامة التجارية (Brand) في أزرار المشاركة سيربط القراء بشكلٍ مباشر الأزرار بالمنصّة المعنيّة ( على سبيل المثال: الزر الذي له لون تويتر الأزرق يعني مشاركة المقال على تويتر). العلامة التجارية (brand): الشعار(logo) من العناصر الأساسيّة في تصميم زر المشاركة. عندما نرى أيقونة عصفورٍ مغرّدٍ صغيرٍ في أسفل المقال، نعرف أنّه يُمَكّننا من مشاركة المقال على تويتر بدون أن نفكّر في الأمر. ليس من الضروري استخدام الشعار واللون معًا ، لكن يجب عليك أن تستخدم أحدهم. عدد المشاركات: عندما تتملّكنا الحيرة بشأن اتّخاذ قرارٍ ما، ننظر إلى الآخرين بغير وعيٍ منّا لنطلب منهم المساعدة. عندما نرى تدوينةً شاركها قراءٌ آخرون آلاف أو مئات المرّات قبل ذلك، تزيد احتماليّة أن نشاركها أيضًا بسبب ما يسمى في علم النفس بالتأكيد الاجتماعي (Social validation). خذ الأنواع المختلفة للأجهزة بعين الاعتبار أجرينا على مدوّنة Buffer إحصائيّة وجدت فيها أنّ معظم زوّار المدوّنة من مستخدمي نظام iOS وأجهزة أندرويد : عندما اكتشفنا أن أزرار المشاركة لم تكن تظهر على الهواتف الذّكيّة استعملنا إضافة SumoMe ولاحظنا فورًا ارتفاعًا في عدد المشاركات. الآن نحصل على 500 مشاركة اجتماعية في الأسبوع و 7000 مشاركة تقريبًا ككل بعد هذه الإضافة، وما كنّا لنحصل على هذا العدد من المشاركات إذا لم نأخذ بعين الاعتبار التصميم المُتجاوب الذي يناسب الأنواع المختلفة من الأجهزة التي يستعملها الزوّار. إليك أفضل الإضافات المتعلّقة بالمشاركة في ووردبرس: SumoMe DiggDigg Flare Monarch Social sharing تابعونا في الجزء القادم من المقال لمعرفة المزيد من النصائح حول تنسيق محتويات موقعك. ترجمة -وبتصرف- للمقال Formatting Secrets of Content That Gets Shared لصاحبه Ash Read.
  21. بالرغم من أنّ LibreOffice Writer يوفّر مجموعات متنوّعة من الأنماط المبدئية (الافتراضية) التي يمكن تطبيقها مباشرة أو إجراء التعديلات عليها لتناسب تنسيق مستندك، إلّا أنّه تُتاح لك أيضًا إمكانية إنشاء أنماط جديدة وتخصيص جميع سماتها يدويًا وإضافتها إلى قائمة الأنماط المبدئية. سنتعلّم في هذا الدرس كيفية إنشاء أنماط جديدة وتخصيصها، بالإضافة إلى كيفية حذف الأنماط. إنشاء الأنماط يمكن إنشاء نمط جديد بإحدى الطرق التالية: باستخدام مربع الحوار نمط Style. إنشاء نمط من عنصر محدد. نسخ الأنماط من قالب أو مستند. باستخدام مربع الحوار نمط يُنشَأ نمط جديد باستخدام مربع الحوار نمط بطريقتين. الطريقة الأولى تُستخدم الطريقة الأولى لإنشاء نمط جديد كليًا، ومن ثم تعديله. انقر على السهم الصغير بجانب أيقونة الدلو في نافذة الأنماط والتنسيق (عرض > الأنماط والتنسيق) ثم اختر نمط جديد New Style من القائمة المنسدلة. سيُفتح مربع حوار صغير لتسمية النمط، أدخل اسمًا مناسبًا ثم انقر على حسنًا: سيُضاف النمط الجديد إلى قائمة الأنماط التي حددتها قبل إنشاء النمط. مثلًا إن نقرت على فئة أنماط الأحرف ثم أنشأت نمطا جديدا، ستعثر على ذلك النمط ضمن مجموعة أنماط الأحرف. انقر على النمط الجديد بزر الفأرة الأيمن ثم اختر عدّل لتخصيص خياراته. الطريقة الثانية تُستخدم هذه الطريقة لإنشاء نمط جديد على أساس نمط موجود مسبقًا (أحد الأنماط المبدئية). وفي هذه الحالة سيُربَط النمطان الجديدان (الأصلي والجديد معًا). وبما أنّ النمطين سيصبحان مرتبطين، فإن أي تغيير تجريه على النمط الأصلي سينعكس على كل الأنماط المرتبطة به تلقائيا. لإنشاء نمط جديد بهذه الطريقة، حدّد النمط الأساس أولًا من نافذة الأنماط والتنسيق، انقر عليه بزر الفأرة الأيمن، واختر جديد من القائمة المنبثقة: تُخصَّص الخيارات في كلتا الطريقتين عن طريق مربع الحوار نمط، وهو نفسه الذي استخدمناه في الدرس السابق لتعديل الأنماط المبدئية. مع الأخذ في الاعتبار أنّ الخيارات ستختلف باختلاف نوع النمط. ملاحظة: يُنصح، إذا احتجت إلى إنشاء أنماط جديدة على أساس الأنماط المبدئية، بتسمية النمط الجديد بنفس اسم النمط المبدئي مع سبقه أو إلحاقه باسم دلالي لتمييزه عن بقية الأنماط في القائمة. على سبيل المثال، إذا أنشأت نمطًا جديدًا على أساس النمط متن النص، يمكنك تسمية النمط الجديد متن النص-تقرير، أو متن النص-سيرة ذاتية .. وهكذا. إنشاء نمط من عنصر محدَّد بإمكانك إنشاء نمط جديد عن طريق نسخ التنسيق الذي طبّقته يدويًا على عنصر (فقرة، قائمة، صفحة… إلخ). يُضاف النمط الجديد في هذه الحالة إلى المستند الحالي فقط، أي أنّه لن يُحفَظ في القالب. افتح نافذة الأنماط والتنسيق ثم حدّد نوع النمط الذي تريد إنشاءه من الجزء العلوي للنافذة. انتقل بعد ذلك إلى المستند، وحدد العنصر الذي تريد حفظه كنمط، وليكن إطارًا مثلًا، ثم انقر على السهم الصغير بجانب أيقونة الدلو واختر نمط جديد من القائمة. أدخل اسمًا مناسبًا للنمط الجديد وانقر على حسنًا. سيُضاف النمط إلى قائمة الأنماط للنوع المحدد، ويمكنك استخدامه لاحقًا لتنسيق العناصر ذات الصلة. نسخ الأنماط من قالب أو مستند بإمكانك نسخ الأنماط إلى المستند عن طريق تحميلها من قالب أو من مستند آخر. للقيام بذلك يجب أولًا أن تفتح المستند الذي تريد نسخ الأنماط إليه، بعد ذلك انقر على السهم بجانب أيقونة الدلو في الجزء العلوي من نافذة الأنماط والتنسيق واختر حمّل الأنماط Load Styles. حدد في مربع الحوار حمّل أنماطًا أنواعَ الأنماط التي تريد نسخها بتأشير مربعات الخيار في الجزء السفلي. وبإمكانك تأشير خيار الاستبدال Overwrite إذا كنت ترغب في استبدال الأنماط في المستند الأصلي بالأنماط التي تحمل نفس الاسم في المستند الذي تستورد منه الأنماط. إذا تركت هذه الخيار غير مؤشر، ستُنقَل الأنماط غير المكررة (التي تحمل أسماء مختلفة) وتُتجاهل الأنماط المكررة. انقر بعد ذلك على زر من ملف From File لتحديد المستند أو القالب الذي ستنسخ الأنماط منه. وأخيرًا، اذهب إلى مجلد حفظ المستند/القالب، حدد امتداد الملف المرغوب (سواء كان قالبًا أو مستندًا) من القائمة المنسدلة بجانب حقل الاسم، ثم حدد الملف وانقر على فتح Open. ستُضاف الأنماط الجديدة المستوردة من المستند أو القالب إلى قوائم الأنماط وحسب نوع النمط (أنماط الفقرات تُضاف إلى قائمة أنماط الفقرات، وأنماط الصفحات تُضاف إلى قائمة أنماط الصفات… وهكذا). ملاحظة: إذا كان مستندك يحتوي على فهرس (جدول محتويات) واستخدمت أنماطًا مخصّصة للعناوين، يجب أن تأخذ في الحسبان أنه سيتم إرجاع مستويات العناوين المرتبطة بالمستويات التي قمت بتخصيصها في مربع الحوار ترقيم التخطيط (أدوات > ترقيم التخطيط) إلى الأنماط المبدئية (الافتراضية) عنوان رئيسي 1، عنوان رئيسي 2، وهكذا، عند تحميل أنماط نصوص من ملف لا يستخدم نفس الأنماط المخصصة. وبذلك سيتوجب عليك تغيير إعادة تطبيق الأنماط المخصصة على العناوين من جديد. حذف الأنماط لا يمكن حذف أي من الأنماط المعرّفة مسبقًا في LibreOffice من المستند أو القالب حتّى لو كانت غير مستخدمة، لكن يمكنك حذف أي من الأنماط المخصصة التي قمت بإنشائها بنفسك. ويفضّل قبل ذلك أن تتأكّد من أن تلك الأنماط غير مستخدمة في المستند الحالي. لحذف النمط، انقر عليه بزر الفأرة الأيمن في نافذة الأنماط والتنسيق واختر احذف Delete. بإمكانك تحديد أكثر من نمط وحذفها دفعة واحدة بالضغط على مفتاح Ctrl أثناء التحديد. ستُحذَف الأنماط مباشرة إذا كانت غير مستخدمة في المستند. وبخلاف ذلك ستظهر رسالة تنبّهك أن النمط مطبَّق في المستند الحالي، انقر على نعم لتأكيد الحذف. إذا حذفت أحد الأنماط المستخدمة، سيُطبَّق النمط الافتراضي على جميع العناصر التي كان النمط المحذوف مطبقًا عليها. إذا كانت لديك أيّة أسئلة أو أفكار حول إنشاء الأنماط واستخدامها، شاركنا بها عبر صندوق التعليقات. ترجمة- وبتصرّف - لدليل المستخدم الخاص بالحزمة المكتبية LibreOffice.
  22. تطرّقنا في دروس سابقة إلى كيفية بدء العمل على محرر النصوص Writer، أحد برامج حزمة الأدوات المكتبية LibreOffice. كما شرحنا كيفية استخدامه لتنسيق الفقرات النصية وإدراج مختلف العناصر، كالجداول والصور. وفي هذا الدرس سنتعرّف على الأنماط في LibreOffice وعلى كيفية تطبيقها لتنسيق الأجزاء المختلفة للمستند، من العناوين الرئيسية، إلى العناوين الفرعية والمتون. ما هي الأنماط؟ النمط Style هو مجموعة من التنسيقات التي يمكنك تطبيقها على صفحات محددة، نصوص محددة، أو غيرها من عناصر المستند لكي تغيّر مظهرها بسهولة وسرعة. وبما أنّ النمط ينطوي على أكثر من تنسيق، كاللون، الحجم، السمك، وغيرها؛ فإن تطبيق النمط يعني تطبيق مجموعة من التنسيقات على نفس العنصر دفعة واحدة. يغفل كثير من المستخدمين عن فائدة استخدام الأنماط، فينسّقون الفقرات، الكلمات، الجداول، تخطيطات الصفحة، وغيرها من أجزاء المستند يدويا. أي أنّهم اعتادوا على كتابة المستندات وفقًا لسمات مرئية محددة؛ على سبيل المثال، نوع الخط، حجمه، وغيرها من التنسيقات كالخط العريض أو المائل. أما الأنماط فهي عبارة عن سمات منطقية، واستخدامها يعني أنّك ستتوقف عن تحديد حجم الخط، لون الخط، محاذاة النص، وغيرها، وتكتفي بتحديد النمط فقط، لأنّك عرّفت ذلك النمط مسبقًا ليكون بتلك السمات/الخصائص. بعبارة أخرى، استخدام الأنماط يعني أنّك ستؤكّد على ماهية النص (أو الصفحة أو أي عنصر آخر)، بدلًا من التأكيد على مظهر ذلك النص. تساعد الأنماط على تحسين تناسق المستند، كما أنّها تسهّل تغيير التنسيقات الرئيسية. على سبيل المثال، قد ترغب في تغيير المسافات البادئة لكل الفقرات، أو تغيير نوع الخط لكل العناوين في المستند، هذه المهمة البسيطة يمكن أن تتطلب منك القيام بالكثير من التغيرات في أماكن مختلفة ومتفرقة، وستصبح العملية منهكة جدًا في المستندات الطويلة. وعلى النقيض من ذلك، سيتطلب الأمر إجراء تغيير واحد فيما لو قمت باستخدام الأنماط. بالإضافة إلى ذلك، تُستخدم الأنماط في عمليات أخرى، غير التنسيقات، حتّى وإن لم تكن مدركًا لها. على سبيل المثال، يعتمد Writer على أنماط العناوين Heading styles (أو غيرها من العناوين التي تحدّدها) عند إنشاء الفهارس Table of contents. وسنتطرّق إلى بعض الاستخدامات الشائعة للأنماط في درس لاحق. ما هي أنواع الأنماط التي يدعمها LibreOffice Writer؟ يدعم LibreOffice Writer أنواع الأنماط التالية: أنماط الصفحة Page Styles: وتتضمن الهوامش، الرؤوس والتذييل، والحدود والخلفيات. أنماط الفقرات Paragraph Styles: تتحكم هذه الأنماط بجميع جوانب مظهر الفقرة، مثل محاذاة النص، مواضع علامات الجدولة tab، التباعد بين السطور، والحدود، ويمكن أن تتضمن تنسيقات الأحرف أيضًا. أنماط المحارف Character Styles: تؤثر هذه الأنماط على نص محدد ضمن الفقرة، مثل نوع الخط، حجم النص، بالإضافة إلى تنسيقات النص العريض والمائل. أنماط الإطارات Frame Styles: تُستخدم لتنسيق أطر العناصر الجرافيكية والنصوص، وتتضمن التفاف النص، الحدود، الخلفيات، والأعمدة. أنماط القوائم List Styles: تتيح لك هذه الأنماط إمكانية تحديد، تنسيق، وتغيير مواضع التعداد الرقمي أو النقطي في القوائم. كيفية تطبيق الأنماط يوفر LibreOffice Writer عدة طرق لتحديد الأنماط وتطبيقها. باستخدام قائمة الأنماط Styles Menu تحتوي هذه القائمة على الأنماط المهمة شائعة الاستخدام من مجموعة أنماط الفقرات والمحارف، والتي يمكن تطبيقها على أي مستند نصي. ولكنها لا تحتوي على أنماط الإطارات، الصفحات، والقوائم. لتطبيق أحد أنماط الفقرات، ضع مؤشر الكتابة في موضع ما داخل الفقرة، ثم اختر أحد الأنماط من قائمة الأنماط (ستجد القائمة في أقصى يمين شريط التنسيق): على سبيل المثال، سنقوم بتطبيق النمط “المسمى الوظيفي”، على عنوان المستند، لأنه النمط المخصص لتنسيق عناوين المستندات. نضع مؤشر الكتابة في أي موقع داخل العنوان، ثم نختار النمط “المسمى الوظيفي” من القائمة: بمجرد تطبيق النمط، سنلاحظ تغيّر مظهر النص حسب التنسيقات المخصصة لذلك النمط. وبذلك يمكننا تنسيق النصوص والفقرات بنمط معين وبصورة متسقة بنقرة واحدة سريعة. ملاحظة: لا يمكن إضافة أنماط مخصصة إلى قائمة الأنماط. باستخدام نافذة الأنماط والتنسيق Styles and Formatting تتضمن نافذة الأنماط والتنسيق مجموعة متكاملة من الأدوات الخاصة بالأنماط. ولفتح هذه النافذة واستخدامها لتطبيق أحد الأنماط، اذهب إلى عرض View ثم الأنماط والتنسيق Styles and Formatting من شريط القوائم العلوي. يمكنك أيضًا فتح هذه النافذة عن طريق المسار أنماط Styles > الأنماط والتنسيق Styles and Formatting، أو بالنقر على زر F11 من لوحة المفاتيح، أو بالنقر على زر الأنماط والتنسيق من الشريط الجانبي تعرض نافذة الأنماط والتنسيق جميع الأنماط المتاحة، وتكون هذه الأنماط مصنّفة في فئات حسب النوع (أنماط الفقرات، أنماط الأحرف، أنماط الإطارات…إلخ)، ويمكنك استعراض قائمة الأنماط تحت كل فئة بالنقر على زر الفئة المرغوبة في الشريط العلوي من النافذة: لتطبيق أحد الأنماط، حدد الجزء/العنصر الذي تريد تطبيق النمط عليه، ثم انقر نقرا مزدوجًا على النمط المرغوب من الفئة المناسبة لذلك العنصر. على سبيل المثال، سنطبق نمط المحارف “وصلة إنترنت” على نص معين في المستند. وللقيام بذلك يجب أن نحدد ذلك النص أولًا، بخلاف أنماط الفقرات حيث نضع مؤشر الكتابة في أي موضع داخل الفقرة، لأنّ نمط الأحرف يطبّق على النص المحدد فقط وليس على الفقرة برمّتها. بعد تحديد النص ننقر نقرا مزدوجًا على النمط “وصلة إنترنت”: ملاحظة: يمكنك تحديد مجموعة الأنماط التي تريد عرضها في نافذة الأنماط والتنسيق، إذ يمكنك عرض كل الأنماط، الأنماط المخفية، الأنماط المطبقة، أو الأنماط المخصصة فقط: باستخدام نمط الفقرة Fill Format Mode يمكنك استخدام أداة نمط الفقرة (وأفضّل تسميتها أداة نسخ النمط أو تكرار النمط) لتطبيق النمط على العديد من المناطق المختلفة في المستند بصورة سريعة، دون الحاجة إلى العودة إلى نافذة الأنماط والتنسيق والنقر المزدوج مرارًا وتكرارًا. وهذه الطريقة مفيدة لتطبيق نفس النمط على العديد من الفقرات المتفرّقة، أو غيرها من العناصر. لاستخدام أداة نمط الفقرة، افتح نافذة الأنماط والتنسيق كما وضحنا في الفقرة السابقة ثم حدد النمط الذي تريد تطبيقه بنقرة واحدة بزر الفأرة الأيسر. بعد ذلك انقر على أداة نمط الفقرة (أيقونة الدلو) في الجزء العلوي للنافذة. عندما يتحول شكل المؤشر إلى شكل الدلو، مرر مؤشر الفأرة فوق الفقرة (أو الإطار، أو القائمة، أو غيرها من العناصر) التي تريد تطبيق النمط عليها، ثم انقر نقرة واحدة بزر الفأرة الأيسر لتطبيقه: وكما ذكرنا أعلاه، يُطبق نمط الفقرة على الفقرة برمتها، أما نمط الأحرف فنحتاج إلى تحديد الكلمة أو مجموعة الكلمات لتطبيقه. نكرر نفس الخطوة على العناصر التي نريد تنسيقها بنفس النمط لحين الانتهاء من إجراء جميع التغييرات. ولإلغاء تفعيل الأداة نمط الفقرة Fill Format Mode، ننقر على زر الدلو مجددًا، أو نضغط على المفتاح ESC من لوحة المفاتيح. ملاحظة: عندما تكون أداة نمط الفقرة فعالة، فإن النقر بزر الفأرة الأيمن على أي مكان في المستند سيؤدي إلى التراجع عن آخر عملية تطبيق للنمط. باستخدام اختصارات لوحة المفاتيح بعض اختصارات لوحة المفاتيح مخصصة لتطبيق أنماط معيَّنة، ويمكنك استخدامها لتطبيق النمط بصورة سريعة ومباشرة لاختصار الوقت، بدلًا من استخدام الطرق سابقة الذكر. على سبيل المثال، يُستخدم مفتاحا الاختصار Ctrl+0 لتطبيق النمط متن النص Text Body، ومفتاحا الاختصار Ctrl+ 1 لتطبيق النمط عنوان رئيسي Heading 1، والاختصار Ctrl+ 2 لتطبيق النمط عنوان رئيسي Heading 2، وهكذا. بإمكانك تعديل اختصارات لوحة المفاتيح وتخصيصها حسب ما يناسبك بالذهاب أدوات Tools > خصص Customize > لوحة المفاتيح Keyboard، ومن ثم تحديد مفاتيح الاختصارات المرغوبة والنقر على زر عدّل Modify: بهذا نكون قد وصلنا إلى نهاية الدرس. في الدرس القادم سنتعرّف على كيفية تعديل الأنماط المبدئية وإنشاء أنماط جديدة مخصصة. ترجمة- وبتصرّف - لدليل المستخدم الخاص بالحزمة المكتبية LibreOffice.
  23. تعرّفنا في الدرس السابق على الأنماط في LibreOffice Writer وتطرقنا إلى كيفية تطبيق الأنماط المبدئية المتاحة بطرق عدّة. في هذا الدرس سنتعلّم كيفية تعديل الأنماط الافتراضية وتخصيصها، وسنذكر بعض الأمثلة على استخدامات الأنماط في نهاية الدرس. إذا كانت خصائص الأنماط المبدئية Default غير ملائمة لتنسيق مستندك، بإمكانك أن تعدّل تلك الأنماط لتحصل على النمط الخاص بك وبالسمات المناسبة لك. يمكن تعديل الأنماط بالطرق التالية باستخدام مربع الحوار “نمط Style”، تحديث النمط من عنصر مُحدَّد سلفا، باستخدام خاصية التحديث التلقائي AutoUpdate (لأنماط الفقرات والإطارات فقط). ملاحظة: تُطبَّق التغييرات على الأنماط نمط سيتم تطبيقها في المستند الحالي فقط. لتعديل الأنماط في أكثر من مستند، يجب أن تُعدِّل القالب أو تنسخ الأنماط إلى تلك المستندات. تعديل النمط باستخدام مربع الحوار “نمط Style” من خلال مربع الحوار “نمط” يمكنك تعديل كل أنواع الأنماط، سواء كانت أنماط الفقرات، أنماط القوائم، أنماط الإطارات، وغيرها. للقيام بذلك نفتح نافذة الأنماط والتنسيق بالنقر على الأيقونة T في الشريط الجانبي (أو عن طريق المسار عرض View > الأنماط والتنسيق Styles and Formatting). بعد ذلك ننقر على النمط الذي نريد تعديله بزر الفأرة الأيمن ونختار عدّل Modify: يختلف مربع الحوار الذي سيظهر باختلاف نوع النمط الذي قمنا بتحديده. ويحتوي على مجموعة من التبويبات التي تحتوي بدورها على مجموعة من الخيارات القابلة للتعديل والتخصيص. إن اخترنا تعديل النمط “المسمى الوظيفي” على سبيل المثال، والذي هو أحد أنماط الفقرات، سيظهر مربع الحوار التالي. نلاحظ أن مربع الحوار يحتوي على 16 تبويبًا مختلفًا، ومنها يمكن تعديل نوع الخط، المحاذاة، المسافات البادئة والتباعد، الحدود، الشفافية، وغيرها من خصائص النصوص. فمثلًا لتغيير نوع الخط، نذهب إلى تبويب “الخط“، ومن قائمة “الخط” نختار نوع الخط المرغوب لكل نوع من النصوص (الغربية، الآسيوية، المركبة). سنختار النوع Sakkal، ونبقي على بقية الخيارات كما هي (يمكن الاستفادة من المربع في الجزء السفلي من مربع الحوار لمعاينة التغييرات على النص) ولتغيير لون الخط نذهب إلى تبويب “تأثيرات الخطوط“، ونختار اللون المرغوب من قائمة “لون الخط“. كما يمكننا إضافة تأثيرات أخرى، كالظل، التخطيط، أو إضافة خطوط أسفل، أعلى، أو على النص. بعد إجراء جميع التغييرات ننقر على زر “طبّق” لتطبيقها، ثم زر “حسنًا” للخروج من مربع الحوار. بمجرد تطبيق التغيير، سيُحدَّث هذا النمط في كل أنحاء المستند ليعكس التغييرات التي أجريناها، دون الحاجة إلى إعادة تطبيق النمط من جديد. مثال آخر؛ لو عدّلنا النمط “قائمة 2“، أحد أنماط القوائم، سنلاحظ أن تبويبات مربع الحوار تختلف كثيرًا عن التبويبات التي ظهرت مع النمط السابق. يمكننا هنا اختيار شكل النقاط للتعداد الرقمي، تغيير نمط الترقيم للتعداد الرقمي، تغيير شكل المخطط التفصيلي للتعداد الرقمي أو النقطي، وغيرها. سنقوم هنا مثلًا باختيار أيقونة للتعداد النقطي بدلًا من الرمز الافتراضي. نذهب لتبويب صورة Image ثم ننقر على “طبّق” > “حسنًا“. ستُحدَّث القوائم في المستند حسب التغييرات على النمط، ويمكننا تطبيق النمط المعدّل على أيّة قائمة في المستند الحالي لأن التغييرات ستبقى محفوظة. باختصار، تأتي مع كل نمط الخيارات الخاصة به، يمكنك استكشافها من مربع الحوار “نمط” وتعديلها حسب الرغبة. تحديث النمط من عنصر محدد يمكننا أيضًا أن نعدّل الأنماط الافتراضية (المبدئية) عن طريق تحديثها لتكتسب خصائص العنصر المحدد (فقرة، قائمة، إطار…إلخ)، وهذه الطريقة عكس الطريقة السابقة، أي أننا نقوم بتنسيق العنصر أولًا ثم نحدث النمط وفقًا لذلك، بدلًا من تعديل النمط ثم تطبيقه. لتحديث النمط، نحدد العنصر ذا التنسيق الذي نريد اعتماده نمطا، ومن نافذة الأنماط والتنسيق نحدد النمط الذي نريد تحديثه، ثم ننقر على السهم بجانب أيقونة الدلو في الجزء العلوي من النافذة ونختار “حدّث النمط Update Style“. على سبيل المثال، سنقوم بتحديث النمط المبدئي ليكون بنفس خصائص إحدى فقرات المستند التي نسّقناها مسبقًا؛ نضع مؤشر الكتابة داخل الفقرة، ثم نحدد “النمط المبدئي” من نافذة الأنماط والتنسيق، وأخيرًا ننقر على زر السهم ونختار “حدّث النمط“. عند تحديث النمط سيتغير مظهر جميع فقرات المستند التي طبّقنا عليها النمط المبدئي مسبقًا ليعكس خصائص النمط المُحَدّث. يمكن أيضًا تحديث النمط عن طريق الخيار “حدّث لتطابق التحديد” من القائمة الفرعية الخاصة بالنمط ضمن قائمة الأنماط الرئيسية. لا تقتصر إمكانيّة تطبيق التحديث على أنماط الفقرات فقط، وإنما على كلّ أنواع الأنماط، مع مراعاة تحديد العناصر ذات الصلة قبل تحديد النمط وتحديثه. ملاحظة: عندما تقوم بتحديث أحد أنماط الفقرات، تأكد من أنّ الفقرة المحددة منسقة بخصائص/سمات فريدة. لأنّه إذا كانت هناك خصائص مختلطة/مشتركة بين الفقرة والنمط الذي تريد تحديثه، ستبقى هذه الخصائص كما هي في السابق ولن يحدث أي تغيير. باستخدام خاصية التحديث التلقائي AutoUpdate تُطبّق هذه الخاصية على أنماط الفقرات والإطارات فقط. وكما هو واضح من الاسم، تعمل خاصية التحديث التلقائي على تحديث النمط تلقائيًا عندما تُعدِّل مباشرةً تنسيق الفقرة أو الإطار المطبّق عليه ذلك النمط. فلنفترض مثلًا أنَك قمت بتطبيق النمط “متن النص” على فقرة معينة، وأثناء العمل على مستندك، غيّرت تنسيق هذه الفقرة يدويًا من شريط أدوات التنسيق. في هذه الحالة سيُحدَّث النمط “متن النص” تلقائيًا ليُصبح تنسيقه مطابقًا للتنسيق الذي طبّقته. لتفعيل هذه الخاصية، انقر بزر الفأرة الأيمن على نمط الفقرة أو نمط الإطار في نافذة الأنماط والتنسيق واختر “عدّل Modify“: ومن تبويب “المنظِّم Organizer” أشِّر على مربع الخيار “حدّث آليًا“. أمثلة على استخدامات الأنماط في ما يلي أمثلة على الاستخدامات الشائعة لأنماط الفقرات والصفحات في LibreOffice Writer. تحديد صفحة أولى مختلفة للمستند تتضمن المستندات عادة، خصوصا التقارير والخطابات الرسمية، صفحة أولى تختلف عن بقية صفحات المستند. على سبيل المثال، تكون ترويسة الخطابات أو الأوراق الرسمية مختلفة عن ترويسة بقية الصفحات. كما أن الصفحة الأولى من تقرير ما قد لا تحتوي على رأس وتذييل، بينما تحتوي عليهما بقية الصفحات. يتيح LibreOffice Writer تحديد نمط صفحة مخصَّص للصفحة الأولى، ونمط آخر يطبق تلقائيًا على الصفحات التي تليها. يمكننا، مثلا، تطبيق نمط باسم “الصفحة الأولى First Page” على الصفحة الأولى من المستند والنمط “المبدئي Default” على بقية صفحات المستند. والشكل التالي يوضح ما سيكون عليه تخطيط المستند. تقسيم المستند إلى فصول بطريقة مماثلة لما ذكر أعلاه، بإمكاننا تقسيم المستند إلى فصول. فيمكن أن نطبق نمط “الصفحة الأولى” على صفحة البداية لكل فصل، والنمط “المبدئي” على بقية صفحات الفصل، وبعد نهاية الفصل ندرج فاصلًا يدويًّا (بالذهاب إلى قائمة إدراج > فاصل يدوي). ثم ننتقل إلى الفصل التالي ونطبّق نمط “الصفحة الأولى” على بداية الفصل… وهكذا. يوضح الشكل التالي ما سيكون عليه تخطيط المستند. تغيير اتجاه الصفحات ضمن المستند الواحد يمكن أن تحتوي مستندات Writer على صفحات بأكثر من اتجاه. من الأمثلة الشائعة؛ مستند يحتوي على صفحة باتجاه أفقي في وسطه، في حين تكون بقية الصفحات باتجاه عمودي (يمكن تحقيق ذلك باستخدام فواصل الصفحات Page Breaks أو أنماط الصفحات). لإدراج صفحة أفقية في وسط المستند، ينبغي أولًا إدراج فاصل صفحات (إدراج > فاصل صفحات) في الموضع المرغوب، ثم اختر نمط صفحة باتجاه أفقي (بالعرض Landscape). لكن ضع في اعتبارك أن القيام بذلك قد يتطلب منك تعديل خصائص الصفحة الأخرى، كالترويسة، التذييل، وترقيم الصفحة للنمط الأفقي. بعد ذلك قم بإدراج فاصل صفحات آخر بعد الصفحة الأفقية، واختر نمط الصفحة المبدئي ليُطبق على بقية صفحات المستند. عرض ترويسات مختلفة على الصفحات اليمنى واليسرى يمكن التحكم بإعدادات أنماط الصفحات لكي تعرض الصفحة اليمنى والصفحة اليسرى التي تقابلها بشكل متعاكس، أو لعرض الصفحات باتجاه اليمين فقط، أو باتجاه اليسار فقط. فعندما تقوم بإدراج ترويسة على نمط صفحة بتخطيط منعكس mirrored، أو بتخطيط يمين ويسار right-and-left، بإمكانك أن تجعل محتوى جميع الصفحات باتجاه واحد (على اليمين فقط، أو على اليسار فقط) أو باتجاهين مختلفين على الصفحات اليمنى والصفحات اليسرى. على سبيل المثال يمكنك وضع رقم الصفحة على الحافة اليسرى للصفحات اليسرى ووضعه على الحافة اليمنى للصفحات اليمنى، ووضع عنوان المستند على الحافة اليمنى للصفحات اليمنى فقط (كما موضح في الشكل أدناه) أو تخطيط الصفحة كما يناسب مستندك. التحكم بفواصل الصفحات تلقائيًا ينتقل Writer، في الإعداد المبدئي، إلى الصفحة التالية عندما تمتلئ الصفحة الأولى بالمحتوى. لكن يمكنك تغيير هذا الإعداد إن لم يكن مناسبًا لك. على سبيل المثال، بإمكانك أن تجعل إحدى الفقرات تبدأ في صفحة جديدة أو عمود جديد (حتّى وإن لم تكن الصفحة الحالية ممتلئة)، ومن ثم تحديد نمط الصفحة الجديدة. يمكنك استخدام مثل هذه الخاصية لعناوين الفصول التي غالبًا ما تبدأ في صفحة جديدة يُسرى (للمستندات باللغة العربية). إنشاء الفهارس تلقائيًا إذا كنت ترغب في إنشاء فهرس تلقائي،فيجب عليك أولا تطبيق الأنماط المناسبة على العناوين الرئيسية والعناوين الفرعية لمستندك، ثم افتح مربع الحوار “ترقيم التخطيط” (من القائمة “أدوات Tools” > “ترقيم التخطيط Outline Numbering“) لكي تحدّد الأنماط الخاصة بكل مستوى من مستويات الفهرس.تُنشّأ الفهارس مبدئيًّا باستخدام أنماط العناوين (Heading)، لكن بالطبع بإمكانك استخدام الأنماط التي تريد. تحديد تتابع أنماط الفقرات بإمكانك التحكم بإعدادات أحد أنماط الفقرات لكي يُطبَّق نمط معيّن (تحدده بنفسك) على الفقرة التالية عند الضغط على مفتاح Enter.على سبيل المثال، بإمكانك جعل الفقرة المطبق عليها النمط “عنوان رئيسي 1” تُتبع بفقرة يُطبق عليها النمط “متن النص“. مثال آخر؛ فقرة بنمط “المسمى الوظيفي” تُتبع بفقرة بنمط “عنوان رئيسي 1” تُتبع بفقرة بنمط “اقتباس” تُتبع بفقرة بنمط “عنوان رئيسي 2” تُتبع بفقرة بنمط “متن النص“.. وهكذا حسب التخطيط العام لمستندك. عند تحديد تتابع الأنماط بهذه الصورة، لن تضطر إلى تطبيق الأنماط يدويًا. ترجمة- بتصرّف - لدليل المستخدم الخاص بالحزمة المكتبية LibreOffice.
  24. تتألف جداول اكسل التي نقوم بإنشائها من أنواع مختلفة من البيانات، وتعتبر بيانات الوقت والتاريخ جزءًا هامًا منها. ولاستخلاص معلومات معيّنة متعلّقة بالتاريخ يوفّر اكسل مجموعة دوال تندرج تحت قائمة Date & Time في مكتبة الدوال. سنتعرّف في هذا الدرس على بعض دوال التاريخ الأساسية ونوضّح وظيفتها وطريقة استخدمها من خلال الأمثلة التطبيقية. TODAY تقوم هذه الدالة بإرجاع تاريخ اليوم الحالي، والصيغة العامة لها هي: =TODAY() مثال: لمعرفة تاريخ اليوم بواسطة دالة TODAY نكتب الصيغة التالية: عمل الدالة لا يتطلّب تحديد متغيّرات، لذا نبقي الأقواس فارغة ونضغط على ENTER للحصول على النتيجة: MONTH تقوم هذه الدالة باستخراج رقم الشهر لتاريخ نحدّده في الصيغة. والصيغة العامة لها هي: =MONTH(serial_number) serial_number: التاريخ الذي نريد استخراج رقم الشهر منه. ويمكن أن يكون هذا المتغير خلية تحتوي على تاريخ معيّن، أو خلية تحتوي على صيغة تكون نتيجتها تاريخًا معيّنًا. مثال: لاستخراج رقم الشهر للتاريخ في الخلية G2، والذي هو عبارة عن ناتج صيغة أخرى، نكتب الصيغة التالية: سيتم إرجاع رقم الشهر للتاريخ المحدّد: بإمكاننا أيضًا أن نكتب الصيغة بالطريقة التالية وسنحصل على نفس النتيجة: يمكننا استخدام هذه الدالة إذا كان لدينا جدول بيانات كبير ونريد العثور على البيانات المرتبطة بشهر معيّن. في هذه الحالة يمكننا استخراج رقم الشهر لكل التواريخ في عمود منفصل، ومن ثم الوصول بسرعة إلى البيانات الخاصة بالشهر المطلوب دون الحاجة إلى التحقق من كل تاريخ على حدة. DAY عملها مشابه لعمل الدالة السابقة، إذ تقوم باستخراج رقم اليوم لتاريخ يحدّده المستخدم في الصيغة. والصيغة العامة لهذه الدالة هي: =DAY(serial_number) serial_number: التاريخ الذي نريد استخراج رقم اليوم منه. ويمكن أن يكون هذا المتغير خلية تحتوي على تاريخ معيّن، أو خلية تحتوي على صيغة تكون نتيجتها تاريخًا معيّنًا. مثال: لاستخراج رقم اليوم للتاريخ في الخلية G2، نكتب الصيغة التالية: وبالنتيجة سنحصل على الرقم "26" والذي هو رقم اليوم للتاريخ المحدّد: YEAR عمل هذه الدالة أيضًا مشابه لعمل الدالتين السابقتين، إذ تقوم بإرجاع رقم السنة للتاريخ الذي نحدّده في الصيغة. والصيغة العامة لها هي: =YEAR(serial_number) serial_number: التاريخ الذي نريد استخراج رقم السنة منه. ويمكن أن يكون هذا المتغير خلية تحتوي على تاريخ معيّن، أو خلية تحتوي على صيغة تكون نتيجتها تاريخًا معيّنًا. مثال: لاستخراج رقم السنة من التاريخ في الخلية G2 نكتب الصيغة التالية: وبالنتيجة سيتم إرجاع الرقم "2016": DATE تقوم هذه الدالة بتحويل أرقام السنة، الشهر، واليوم التي نحدّدها إلى تنسيق تاريخ. والصيغة العامة لها هي: =DATE(year; month; day) year; month; day: أرقام صحيحة تمثل السنة، الشهر، واليوم على التوالي. ويمكن أن نقوم بإدخالها يدويًا في الصيغة، أو تحديدها من خلية تحتوي على رقم مدخل يدويًا أو رقم ناتج من صيغة. مثال: لتحويل الأرقام في الخلايا G3، G4، وG5 إلى تنسيق تاريخ، نكتب الصيغة التالية: نضغط على ENTER لإظهار نتيجة الصيغة: طريقة أخرى لكتابة الصيغة: والنتيجة التي سيتم إرجاعها هي: DATEVALUE تقوم هذه الدالة بتحويل التاريخ المدخل بشكل نص إلى رقم تسلسلي يمثل هذا التاريخ حسب ما هو مخزّن في اكسل. وتجدر الإشارة هنا إلى أنّ التواريخ في اكسل تخزن بهيئة أرقام تسلسلية صحيحة وموجبة تبدأ من الرقم 1. وبالتالي فإنّ كل تاريخ يقابله رقم معيّن في اكسل. على سبيل المثال: الرقم 1 = 01 كانون الثاني، 1900 الرقم 2= 02 كانون الثاني، 1900 الرقم 32= 01 شباط، 1900 وهكذا... أي بعبارة أخرى يمكننا القول أنّ اكسل يخزن التاريخ كعدد الأيام منذ 01 كانون الثاني (يناير)، 1900. الصيغة العامة لهذه الدالة هي: =DATEVALUE(date_text) date_text: النص الذي يمثل التاريخ. مثال: لمعرفة الرقم التسلسلي للتاريخ "26/11/2016" نكتب الصيغة التالية: وكما موضّح في الصيغة أعلاه، قمنا بإدخال التاريخ بشكل نص بين علامتي اقتباس وليس كمرجع خلية كما فعلنا مع بقية الدوال. نضغط ENTER لإرجاع النتيجة: نلاحظ أنّ تنسيق الرقم في خلية النتيجة هو عام General، وعندما نغيّر التنسيق إلى تاريخ، سيتحوّل هذا الرقم التسلسلي إلى نفس التاريخ الذي قمنا بإدخاله في الصيغة: WEEKDAY تقوم هذه الدالة بإرجاع رقم صحيح يمثّل تسلسل اليوم في الأسبوع حسب التاريخ المحدّد في الصيغة. والصيغة العامة لها هي: =WEEKDAY(serial_number; [return_type]) serial_number: تاريخ اليوم الذي نريد تطبيق الدالة عليه. return_type: قيمة اختيارية تحدّد أي رقم يخصّص لكل يوم من أيام الأسبوع. الجدول التالي يوضّح قيم return_type والأرقام المقابلة المخصصة لكل يوم في الأسبوع. إذا لم نقم بتحديد قيمة return_type سيتم افتراضها مساوية لرقم 1. مثال: لمعرفة رقم اليوم "26/11/2016" في الأسبوع، نكتب الصيغة التالية: بالنتيجة تم إرجاع الرقم 7. أي أنّ اليوم، السبت، هو سابع يوم في الأسبوع على افتراض أنّ قيمة return_type= 1 لأننا لم ندخلها في الصيغة. وحسب الجدول الموضّح أعلاه، يمثل الرقم 7 يوم السبت من الأسبوع: أمّا إذا قمنا بتحديد قيمة return_type في الصيغة، ولتكن 16 مثلا: سيتم إرجاع الرقم 1، على فرض أنّ السبت هو أول أيام الأسبوع حسب الجدول أعلاه: WEEKNUM تقوم هذه الدالة بإرجاع رقم صحيح يمثّل تسلسل الأسبوع في السنة حسب التاريخ المحدّد في الصيغة. والصيغة العامة لها هي: =WEEKDAY(serial_number; [return_type]) serial_number: التاريخ الذي نريد تطبيق الدالة عليه. return_type: قيمة اختيارية تحدّد أي نظام ترقيم نريد استخدامه وأي يوم في الأسبوع نريد اعتباره اليوم الأول في الأسبوع. يوجد نظامان لترقيم الأسابيع في السنة: النظام 1: وفيه يتم اعتبار الأسبوع الذي يتضمّن تاريخ 1 كانون الثاني هو الأسبوع الأول في السنة. النظام 2: وفيه يتم اعتبار الأسبوع الذي يتضمّن أول يوم خميس في السنة هو الأسبوع الأول في السنة. الجدول أدناه يوضّح قيم return_type وبدايات الأسبوع التي تقابلها حسب النظام المستخدم: إذا لم نقم بتحديد قيمة return_type سيتم افتراضها مساوية لرقم 1. مثال: لمعرفة رقم الأسبوع الحالي في عام 2016 حسب التاريخ 26/11/2016 (المدخل في الخلية G2) نكتب الصيغة التالية: سيتم إرجاع الرقم 48، أي أنّ الأسبوع الحالي هو الأسبوع رقم 48 في السنة على اعتبار أن الأسبوع الذي يتضمّن تاريخ 1 كانون الثاني هو الأسبوع الأول في السنة وأنّ الأسبوع يبدأ من يوم الأحد (علمًا أن التاريخ 26/11/2016 يصادف يوم السبت) أما إذا حددنا الرقم 16 كقيمة return_type كما في الصيغة أدناه: سنلاحظ أنّ تسلسل نفس الأسبوع أصبح 49، وذلك لأنّه عند القيمة 16 يتم اعتبار يوم السبت هو بداية الأسبوع، والتاريخ الذي قمنا بتحديد في الصيغة يصادف يوم السبت، أي بداية أسبوع جديد: خاتمة لقد تعرّفنا في هذا الدرس على دوال التاريخ الأساسية وعلى كيفية استخدامها لمعرفة تاريخ اليوم واستخراج رقم اليوم، الشهر، والسنة من التاريخ. كما استخدمنا إحدى الدوال لمعرفة عدد الأيام التي مرّت منذ 01/01/1900 ودالتين أخريين لمعرفة تسلسل اليوم في الأسبوع وتسلسل الأسبوع في السنة. في الدرس القادم سنغطّي القسم الثاني من قائمة دوال Date & Time، وهي دوال الوقت الأساسية.
  25. لعد تعرّفنا في درس سابق على كيفية إدراج الصور في مستندات وورد، كيفية اقتطاع جزء منها، وكيفية التحكّم في أبعادها. كما تعلّما كيف نضغط الصور لتقليل أحجامها عند حفظ المستند. سنغطّي في هذا الدرس كيفية استخدام الأوامر والخيارات الأخرى في تبويب تنسيق Format السياقي لنتحكّم في أنماط الصور وتغيير موضعها ومحاذاتها مع النص ومع الورقة نفسها. تنسيق الصورة يوفّر وورد مجموعة من الأنماط الجاهزة والخيارات لتعديل مظهر الصور، وستجد نفس هذه الخيارات على برامج أوفيس الأخرى عند إدراج الصور عليها، مثل اكسل وبوربوينت. لتعديل نمط الصورة نقوم بتحديدها أولًا لإظهار تبويب تنسيق، ثم نفتح معرض الأنماط الجاهزة من مجموعة Picture Styles: بمجرّد تمرير مؤشر الفأرة فوق النمط، سيُطبّق على الصورة بشكل مباشرة كمعاينة. وكما نلاحظ توجد العديد من الأنماط المضمّنة، منها بحدود بسيطة، وأخرى ذات انعكاس، وأخرى بإطارات بيضوية أو ناعمة الحواف. ننقر على النمط لتطبيقه على الصورة. ولا ينتهي تنسيق الصورة باختيار أحد الأنماط، إذ توجد مجموعة خيارات أخرى بإمكاننا استخدامها لتخصيص كل نمط حسب الرغبة. فمن قائمة Picture Border يمكننا تغيير لون حد الصورة، سمكه، ونمطه: تختلف الألوان الافتراضية باختلاف ألوان نُسق Theme المستند، وبإمكاننا دائما الوصول إلى المزيد من الألوان بالنقر على More Outline Color. وكذلك نستطيع تطبيق تأثيرات أخرى على الصورة، كالظل Shadow، التوهّج Glow، الانعكاس Reflection، أو استدارة ثلاثية الأبعاد 3D Rotation من قائمة Picture Effect: ويمكن أن نحصل على تأثيرات رائعة عندما ندمج أكثر من تأثير معًا. على سبيل المثال عندما نطبّق التأثير Cool Slant من مجموعة Bevel والتأثير Prospective Contrasting Left من مجموعة 3D Rotation: سنحصل على تأثير جميل وكأنّ للصورة بعد ثالث: وللتحكّم أكثر في خيارات كل تأثير على حدة، نفتح جزء تنسيق الصورة ونتلاعب في القيم إلى أن نحصل على التأثير المرغوب. سنقوم هنا مثلا بزيادة الارتفاع Height من قسم 3-D Format> Top Bevel إلى 20 pt لإعطاء الصورة عمق أكبر: وهكذا يمكن استخدام الأنماط الجاهزة كنقطة بداية تنسيق الصورة ومن ثم التعديل عليها، أو استخدام الخيارات المتوفرة في قائمة Picture Effect والتلاعب بإعداداتها من جزء تنسيق الصورة لخلق التأثير المرغوب. أما قائمة تخطيط الصورة Picture Layout فيمكننا استخدامها لتحويل الصورة إلى عنصر SmartArt بشكل مباشر وتسهيل ترتيبها وإضافة التسميات التوضيحية لها: عند تطبيق أحد الخيارات المتاحة، سنُلاحظ ظهور تبويب تصميم Design السياقي الذي يحتوي على مجموعة خيارات مفيدة لتصميم SmartArt وتخصيصه: لننتقل الآن إلى مجموعة Adjust التي تحتوي على المزيد من الأوامر لتعديل مظهر الصورة. من قائمة تصحيحات Corrections وبالتحديد من مجموعة Soften/Sharpen يمكننا أن نجعل الصورة مموّهة أكثر أو ذات تفاصيل واضحة أكثر بالنقر على درجة النعومة/الحدّة المرغوبة: أما من مجموعة Brightness/Contrast فيمكننا التحكّم في إضاءة الصورة ودرجة تباين ألوانها: بالطبع يكون وقع هذه التأثيرات مختلفًا من صورة إلى أخرى. على سبيل المثال، قد تكون ألوان الصورة غامقة وتحتاج إلى إضاءة لتفتيحها، في هذه الحالة يمكننا استخدام خيار السطوع 20% أو أكثر، لكن إذا كانت ألوان الصورة فاتحة من الأصل، في هذه الحالة سيؤدي تطبيق تأثير السطوع إلى تشويه منظر الصورة. إذًا، كل ما علينا فعله هو تجربة مختلف الخيارات للحصول على المظهر المطلوب من قائمة Color يمكننا التحكّم ببعض خصائص ألوان الصورة مثل التشبّع Saturation ودرجة اللون Color Tone (أو درجة حرارة اللون). إذ يمكننا أن نجعل شدّة ألوان الصورة عالية جدًا أو منخفضة جدًا. كما يمكننا جعل الصورة ذات ألوان دافئة أو باردة: أما مجموعة خيارات إعادة التلوين فيمكننا استخدامها لجعل الصورة بلون مختلف تمامًا عن ألوانها الأصلية. ويمكننا الاستفادة من هذه الخيارات لجعل ألوان الصورة ملائمة لبقية عناصر المستند. ويظهر تأثيرها جليًا على العناصر الجرافيكية ذات الألوان المصمتة مثل القصاصات الفنية: أمّا الخيارات في قائمة Artistic Effects فيمكننا استخدامها لتطبيق تأثيرات لجعل الصورة ذات مظهر بلاستيكي، أو لجعلها وكأنّها مرسومة بألوان مائية، أو غيرها من الخيارات. وربّنا ستجد هذه الخيارات مألوفة إذا اعتدت العمل على برنامج فوتوشوب: وكما قلنا سابقًا، يمكن أن تكون هذه التأثيرات ملائمة لصورة معيّنة، وغير ملائمة لأخرى، حسب نوع الصورة ودرجة ألوانها وإضاءتها. إزالة أجزاء من الصورة من الأدوات الجيّدة التي يوفرها ميكروسوفت وورد هي Remove Background التي تُستخدم لإزالة الأجزاء غير المرغوبة من الصورة تلقائيًا. على سبيل المثال نريد إزالة خلفية الصورة أدناه ونحتفظ بالزهرة فقط: سنحدد الصورة وننقر على Remove Background من تبويب تنسيق السياقي: ستتم إحاطة الصورة بإطار ذي مقابض بالإضافة إلى تظليل بعض الأجزاء باللون البنفسجي، وهذه هي الأجزاء التي سيتم حذفها من الصورة. ويعتمد تظليل هذه الأجزاء على تباين ألوانها مع بقية أجزاء الصورة: سنستخدم المقابض لتكبير الإطار ليحتوي صورة الزهرة بأكملها. وكما نلاحظ في الصورة أدناه، ما يزال هناك جزء صغير على يمين الزهرة لا نرغب في الاحتفاظ به: في هذه الحالة ننقر على الأداة Mark Area to Remove ونستخدم القلم لتأشير الأجزاء التي نريد حذفها: وبنفس الطريقة يمكننا استخدام الأداة Mark Area to Keep لتأشير الأجزاء التي نريد الاحتفاظ بها إذا قام وورد بتظليل تلك الأجزاء باللون البنفسجي. بعد الانتهاء ننقر على زر Keep Changes: بالطبع لن تكون عملية القص مثالية جدًا، لكنّها ما تزال أداة مفيدة في حالات معيّنة وتساعد على إزالة الأجزاء غير المرغوبة بسرعة وسهولة: تعديل موضع الصورة ومحاذاتها في تبويب تنسيق نفسه، وبالتحديد في مجموعة Arrange توجد الأوامر التي تُستخدم للتحكم في موضع الصورة في الورقة ومحاذاتها بالنسبة للهامش أو الورقة، بالإضافة إلى طريقة توزيع النص أو التفافه حول الصورة. من قائمة Position يمكننا اختيار الموضع الذي نريد أن تظهر فيه الصورة على الورقة، سواء كان في الوسط، أعلى اليمين، في وسط اليسار أو غيرها من الخيارات. علمًا أنّه سيتم تغيير التفاف النص حول الصورة تلقائيًا حسب ما يتناسب وموضعها: ومن قائمة Text Wrap نختار الطريقة التي يتوزّع فيها النص حول الصورة. المثال أدناه يوضّح بعض طرق التفاف النص، ويعتمد اختيارنا لإحدى الطرق على التفضيل الشخصي وحسب ما يلائم تنسيق المستند: أمّا قائمة Align فنستخدمها لتحديد طريقة محاذاة حدود الصورة مع هوامش الورقة الجانبية أو العلوية/السفلية Align to Margin. أمّا إذا رغبنا في أن تتم المحاذاة مع حدود الصفحة، فنؤشر الخيار Align to Page ثم نختار نوع المحاذاة: الصورة أدناه توضّح الفرق بين المحاذاة إلى اليمين مع هوامش الصفحة والمحاذاة إلى اليمين مع حدود الصفحة: الخياران Distribute Horizontally وDistribute Vertically يُستخدمان لتوزيع المسافة بين الصورة بصورة متساوية أفقيًا أو عموديًا على التوالي، وهذا في حال قمنا بإدراج أكثر من صورة. نحدد جميع الصور بالضغط على مفتاح CTRL أثناء التحديد، ثم ننقر على Distribute Horizontally إذا كانت الصورة موضوعة على مسار أفقي أو Distribute Vertically إذا كانت موضوعة على مسار عمودي: تدوير الصور لتدوير الصورة 90 درجة باتجاه اليمين أو اليسار، ننقر على قائمة Rotate ونختار Rotate Right 90 أو Rotate Left 90: أمّا إذا رغبنا في تدويرها بزاوية محدّدة، ننقر على More Rotation Options ثم ندخل الزاوية المرغوبة في حقل Rotation: كما بإمكاننا قلب الصورة حول المحور الأفقي أو المحور العمودي بتحديد أحد الخيارين Flip Horizontal أو Flip Vertical: خاتمة لقد تعلّمنا في هذا الدرس مختلف الأوامر والخيارات التي يوفّرها وورد لتحسين مظهر الصور وجعلها متناسقة أكثر مع نُسق المستند. كما تعرّفنا على كيفية محاذاتها وموضعتها لتصبح ملائمة لتخطيط المستند. وبالرغم من أننا استخدمنا الخيارات الافتراضية المضمّنة في كل قائمة، إلّا أنّه يمكننا أن نذهب إلى حد أبعد ونخصّص هذه الخيارات يدويًا باستخدام جزء تنسيق الصورة (كما فعلنا مع الصورة المجسّمة) ومربع الحوار Layout (كما فعلنا عند تدوير الصورة).
×
×
  • أضف...