{"id":"l-fig-1-4","courseId":"figma-ui-design","lang":"ar","kind":"lesson","summary":"ابنِ أول شاشة في Steady من frames ونصوص وأشكال، وأحسِن الاختيار بين الـ frames والـ groups والـ sections، وسمِّ الطبقات حسب أدوارها، وثبّت العناصر بالـ constraints لتصمد الشاشة عند تغيير حجمها.","html":"<p>أول مراجعة تجريها صوفيا لملف أي مصمّم جديد تبدأ في لوحة الطبقات، لا على لوحة العمل. تفتح الشجرة وتقرأ الأسماء. إذا رأت <code dir=\"ltr\">Group 7</code> و<code dir=\"ltr\">Rectangle 12</code> و<code dir=\"ltr\">Frame 48</code>، تعرف أن الشاشة ستنهار في اللحظة التي يغيّر فيها أحدهم حجمها، أو يصنع منها prototype، أو يسلّمها لمطوّر. قد تبدو لوحة العمل مثالية بينما البنية تحتها كومة فوضوية.</p>\n<p>هذا الدرس عن تلك البنية: الحاويات التي تضع فيها العناصر، والأسماء التي تعطيها لها، والقواعد التي تُبقيها في مكانها.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">الـ Frames والـ Groups والـ Sections</h2>\n<p>في Figma ثلاث طرق لتجميع الطبقات، وهي ليست قابلة للتبادل.</p>\n<p>الـ <strong>frame</strong> حاوية لها حياتها الخاصة. لها عرض وارتفاع تضبطهما أنت، وتعبئة وحدود ونصف قطر زوايا خاصة بها، وخيار <strong>Clip content</strong> حتى لا يفيض أبناؤها خارجها. الـ frames وحدها يمكن أن تحمل Auto layout وLayout guides وأبناء لهم constraints، والـ prototypes تنتقل بين الـ frames. اضغط <code dir=\"ltr\">F</code> (أو <code dir=\"ltr\">A</code>) واسحب لترسم واحدًا، أو اختر حجم هاتف من القوالب الجاهزة في الشريط الجانبي الأيمن، أو حدّد طبقات موجودة واضغط <code dir=\"ltr\">Cmd+Option+G</code> (<code dir=\"ltr\">Ctrl+Alt+G</code>) لتلفّها في frame.</p>\n<p>الـ <strong>group</strong> (<code dir=\"ltr\">Cmd+G</code> / <code dir=\"ltr\">Ctrl+G</code>) مجرّد حزمة. ليست له تعبئة خاصة، وحجمه هو مجموع أبنائه. حرّك أحد الأبناء فتتغيّر حدود الـ group. وهذا يجعل الـ groups جيدة لشيء واحد: إبقاء مجموعة أشكال معًا، مثل الرسم الصغير لكأس الجائزة في شاشة الـ streak في Steady.</p>\n<p>الـ <strong>section</strong> أداة لتنظيم لوحة العمل. تستخدم الـ sections لجمع الشاشات المترابطة، مثل “Check-in flow”، ولاحقًا لتعليم مسار كامل بأنه جاهز للتطوير (الدرس 4.3). الـ sections ليست جزءًا من الواجهة نفسها.</p>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">نصيحة</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>إن تردّدت، فاجعله frame</span></p>\n<p>إذا كانت حزمة الطبقات جزءًا من الواجهة (ترويسة، صف، زر، بطاقة)، فاجعلها frame. ستحتاج بعد قليل إلى padding أو خلفية أو Auto layout عليها، وتحويل الـ groups لاحقًا عمل مملّ.</p>\n</aside>\n<h2 id=\"sec-2\" tabindex=\"-1\">بناء هيكل شاشة Today</h2>\n<p>ارسم frame بحجم 393 × 852، وهو حجم شائع لهواتف iPhone المتوسطة الحالية، وسمّه <code dir=\"ltr\">Today</code>. بداخله ابنِ ثلاثة frames من الأعلى إلى الأسفل: <code dir=\"ltr\">Header</code> و<code dir=\"ltr\">Habit list</code> و<code dir=\"ltr\">Tab bar</code>. وداخل <code dir=\"ltr\">Header</code> أضف طبقتي نص بأداة النص (<code dir=\"ltr\">T</code>): “Today” بنمط Large title، والتاريخ بنمط Subhead.</p>\n<p>لطبقات النص وضع لتغيير الحجم أهمّ مما يبدو. <strong>Auto width</strong> يتمدّد أفقيًا كلما كتبت ويناسب التسميات القصيرة. <strong>Auto height</strong> يُبقي العرض ثابتًا ويتمدّد إلى الأسفل، وهو الصحيح لكل ما قد يلتفّ إلى سطر جديد، مثل أسماء العادات. <strong>Fixed size</strong> لا يتغيّر أبدًا، وهكذا يُقصّ النص في اللغات الأخرى. اختر Auto height لأسماء العادات: “Meditate” يتّسع في سطر واحد، أما “Practise Spanish vocabulary for 15 minutes” فلا.</p>\n<p>ثم تأتي الأشكال. مستطيل (<code dir=\"ltr\">R</code>) بنصف قطر زوايا 12 px يصبح خلفية صف؛ وشكل بيضاوي (<code dir=\"ltr\">O</code>) يصبح دائرة التعليم. أعطِ كل واحد منها اسمًا بالنقر المزدوج عليه في لوحة الطبقات (أو <code dir=\"ltr\">Cmd+R</code> / <code dir=\"ltr\">Ctrl+R</code> مع تحديد الطبقة).</p>\n<h2 id=\"sec-3\" tabindex=\"-1\">الطبقات: الترتيب والأسماء</h2>\n<p>لوحة الطبقات شجرة. الأبناء يظهرون بإزاحة إلى الداخل تحت آبائهم، والترتيب هو ترتيب التراكب: ما يقع أعلى في القائمة يُرسم فوق غيره. إذا اختفت دائرة التعليم، فالسبب غالبًا أنها تحت خلفية الصف في القائمة.</p>\n<p>سمِّ الطبقات حسب <strong>الدور</strong>، لا حسب المظهر: <code dir=\"ltr\">Check button</code> لا <code dir=\"ltr\">Teal circle</code>؛ و<code dir=\"ltr\">Streak</code> لا <code dir=\"ltr\">Text 3</code>. الأسباب عملية. المطوّرون يقرؤون هذه الأسماء في Dev Mode. وSmart animate يطابق الطبقات بين الشاشات بالاسم (الدرس 4.1). والـ Component properties والتعديلات (overrides) أسهل في الإدارة حين تكون الطبقات التي تمسّها مسمّاة. وزميلك الذي يفتح ملفك في الحادية عشرة ليلًا قبل الإطلاق يستطيع أن يجد ما يبحث عنه.</p>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">خطأ شائع</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>إصلاح البنية في النهاية</span></p>\n<p>«سأرتّب الطبقات لاحقًا» تعني إعادة تسمية مئتي طبقة في الليلة السابقة للتسليم، وتخمين وظيفة نصفها. سمِّ كل طبقة عند إنشائها؛ يستغرق ذلك ثانيتين حينها وعشرين دقيقة لاحقًا.</p>\n</aside>\n<h2 id=\"sec-4\" tabindex=\"-1\">الـ Constraints: ماذا يحدث حين يتغيّر حجم الـ frame</h2>\n<p>يستخدم الناس Steady على هاتف بعرض 375 وعلى آخر بعرض 430. الـ constraints تخبر كل ابن في الـ frame كيف يتصرّف حين يتغيّر حجم ذلك الـ frame. تضبطها من أدوات ضبط <strong>Constraints</strong> في الشريط الجانبي الأيمن (في قسم Position وقت كتابة هذا الدرس).</p>\n<p>الخيارات الأفقية هي <strong>Left</strong> و<strong>Right</strong> و<strong>Left and right</strong> و<strong>Center</strong> و<strong>Scale</strong>؛ والعمودية تقابلها: <strong>Top</strong> و<strong>Bottom</strong> و<strong>Top and bottom</strong> و<strong>Center</strong> و<strong>Scale</strong>. في Steady:</p>\n<ul>\n<li><code dir=\"ltr\">Header</code>: ‏Left and right مع Top. يتمدّد عرضيًا ويبقى في الأعلى.</li>\n<li><code dir=\"ltr\">Habit list</code>: ‏Left and right مع Top and bottom. يملأ المساحة بين الترويسة وشريط التبويبات.</li>\n<li><code dir=\"ltr\">Tab bar</code>: ‏Left and right مع Bottom. يلتصق دائمًا بالحافّة السفلية.</li>\n<li><code dir=\"ltr\">Add button</code>: ‏Right مع Bottom. يحافظ على إزاحة 20 px عن تلك الزاوية.</li>\n</ul>\n<figure class=\"diagram\"><svg class=\"diagram-svg\" focusable=\"false\" viewBox=\"0 0 680 330\" role=\"img\" aria-labelledby=\"l-fig-1-4-t1\"><defs><marker id=\"arrow-l-fig-1-4-1\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" class=\"d-arrowhead\"/></marker></defs>\n  <title id=\"l-fig-1-4-t1\">شاشتا هاتف من نوع frame، إحداهما ضيّقة والأخرى أعرض وأطول. في كلتيهما تمتدّ الترويسة عبر الأعلى، ويمتدّ شريط التبويبات عبر الأسفل، ويبقى زر الإضافة قرب الزاوية السفلية اليمنى.</title>\n  <rect class=\"d-box\" x=\"40\" y=\"20\" width=\"190\" height=\"290\" rx=\"18\"/>\n  <rect class=\"d-box-primary\" x=\"40\" y=\"20\" width=\"190\" height=\"44\" rx=\"18\"/>\n  <text class=\"d-label\" x=\"135\" y=\"47\" text-anchor=\"middle\">Header</text>\n  <rect class=\"d-box-accent\" x=\"40\" y=\"270\" width=\"190\" height=\"40\" rx=\"0\"/>\n  <text class=\"d-label\" x=\"135\" y=\"295\" text-anchor=\"middle\">Tab bar</text>\n  <circle class=\"d-dot\" cx=\"204\" cy=\"244\" r=\"13\"/>\n  <text class=\"d-label-muted\" x=\"135\" y=\"160\" text-anchor=\"middle\">عرض 375</text>\n  <path class=\"d-arrow\" d=\"M250 165 L300 165\" marker-end=\"url(#arrow-l-fig-1-4-1)\"/>\n  <rect class=\"d-box\" x=\"320\" y=\"10\" width=\"250\" height=\"310\" rx=\"18\"/>\n  <rect class=\"d-box-primary\" x=\"320\" y=\"10\" width=\"250\" height=\"44\" rx=\"18\"/>\n  <text class=\"d-label\" x=\"445\" y=\"37\" text-anchor=\"middle\">Header: L+R, Top</text>\n  <rect class=\"d-box-accent\" x=\"320\" y=\"280\" width=\"250\" height=\"40\" rx=\"0\"/>\n  <text class=\"d-label\" x=\"445\" y=\"305\" text-anchor=\"middle\">Tab bar: L+R, Bottom</text>\n  <circle class=\"d-dot\" cx=\"544\" cy=\"254\" r=\"13\"/>\n  <text class=\"d-label-muted\" x=\"530\" y=\"230\" text-anchor=\"end\">Add: Right, Bottom</text>\n  <text class=\"d-label-muted\" x=\"445\" y=\"160\" text-anchor=\"middle\">عرض 430</text>\n</svg><figcaption>الـ constraints تُبقي كل جزء من شاشة Today في مكانه حين يكبر الـ frame</figcaption></figure>\n<p>الـ constraints تنطبق على أبناء الـ frames العادية. حين يستخدم الـ frame الـ Auto layout (الدرس التالي)، يتبع أبناؤه قواعد تغيير الحجم الخاصة بالـ Auto layout بدلًا منها، وتحلّ تلك الإعدادات محلّ أدوات ضبط Constraints.</p>\n<p>اختبر قبل أن تنتقل. حدّد <code dir=\"ltr\">Today</code> واسحب حافّته لتجعله أضيق وأطول. إذا طفا شيء في المنتصف، أو تداخل، أو قُصّ، فالـ constraints الخاصة به خاطئة. أعِد الـ frame إلى 393 × 852 حين ترضى عن النتيجة.</p>\n<p>في الدرس التالي تستبدل معظم هذا التموضع اليدوي بالـ Auto layout، الذي يتولّى المسافات والتراصّ نيابة عنك.</p>\n","toc":[{"id":"sec-1","text":"الـ Frames والـ Groups والـ Sections","level":2},{"id":"sec-2","text":"بناء هيكل شاشة Today","level":2},{"id":"sec-3","text":"الطبقات: الترتيب والأسماء","level":2},{"id":"sec-4","text":"الـ Constraints: ماذا يحدث حين يتغيّر حجم الـ frame","level":2}],"takeaways":["الـ frame حاوية لها حجمها وتعبئتها وقصّها وتخطيطها وconstraints خاصة بها؛ أما الـ group فمجرّد حزمة يتبع حجمها أبناءها.","استخدم الـ frames افتراضيًا لكل ما هو جزء من الواجهة، واحتفظ بالـ groups للتجمّعات البصرية الحرّة مثل الرسم التوضيحي.","ترتيب لوحة الطبقات هو ترتيب التراكب، ويجب أن تصف أسماء الطبقات أدوارها، لأن التسليم والـ prototype والـ components كلها تقرأ هذه الأسماء.","الـ constraints تخبر العنصر الابن كيف يتحرّك أو يتمدّد حين يتغيّر حجم الـ frame الأب، مثل شريط تبويبات مثبّت يسارًا ويمينًا وفي الأسفل.","اختبر الـ constraints بتغيير حجم الـ frame إلى هاتف أصغر وآخر أكبر قبل أن تعتبر الشاشة منتهية."],"further":[{"title":"Frames in Figma Design","url":"https://help.figma.com/hc/en-us/articles/360041539473-Frames-in-Figma-Design"},{"title":"Apply constraints to define how layers resize","url":"https://help.figma.com/hc/en-us/articles/360039957734-Apply-constraints-to-define-how-layers-resize"},{"title":"Explore the navigation bar and left sidebar","url":"https://help.figma.com/hc/en-us/articles/360039831974-View-layers-and-pages-in-the-left-sidebar"}],"quiz":[{"q":"<p>ترسم شاشة هاتف بحجم 393 × 852، وتضع شريط تبويبات في الأسفل، وتضبط constraints الشريط على Left and right مع Top. ماذا يحدث حين تغيّر حجم الشاشة إلى 430 × 932؟</p>","options":[{"text":"يبقى الشريط على مسافته القديمة من الأعلى، فيطفو فوق الحافّة السفلية الجديدة.","why":"صحيح. Top يثبّت المسافة من الحافّة العلوية. الشريط السفلي يحتاج الـ constraint ‏Bottom."},{"text":"ينتقل الشريط إلى الحافّة السفلية الجديدة لأن Figma يتعرّف على الأشرطة السفلية.","why":"لا يخمّن Figma نيّتك. إنه يطبّق الـ constraints التي ضبطتها بالضبط."},{"text":"يكبر الشريط بشكل متناسب في الارتفاع والعرض.","why":"هذا ما يفعله الـ constraint ‏Scale. أما Left and right فيمدّ العرض فقط، وTop يثبّت الموضع العمودي."},{"text":"لا يتغيّر شيء، لأن الـ constraints لا تعمل إلا في الـ prototypes.","why":"الـ constraints تعمل على لوحة العمل كلما تغيّر حجم الـ frame الأب، لا في الـ prototypes فقط."}],"answer":0},{"q":"<p>متى يكون الـ group خيارًا أفضل من الـ frame؟</p>","options":[{"text":"لصف العادة، حتى تتمدّد خلفيته مع الشاشة.","why":"الـ groups لا تحمل تعبئة خاصة بها ولا تطبّق constraints على أبنائها كما يفعل الـ frame. الصف يحتاج frame."},{"text":"للشاشة كلها، لأن الـ groups تُصدَّر أسرع.","why":"سرعة التصدير ليست هي الفرق. الشاشات تحتاج frames من أجل الحجم والقصّ والـ prototype والتخطيط."},{"text":"لرسم توضيحي زخرفي مكوّن من عدّة أشكال يجب أن تتحرّك معًا.","why":"صحيح. التجمّع البصري الحرّ الذي ليس له سلوك تخطيط خاص به هو ما وُجدت الـ groups من أجله."},{"text":"كلما أردت إضافة Auto layout لاحقًا.","why":"الـ Auto layout يعيش على الـ frames. إضافته إلى محتويات group تلفّها في frame جديد على أي حال."}],"answer":2},{"q":"<p>لماذا ترفض صوفيا ملفًا طبقاته مسمّاة “Rectangle 12” و&quot;Frame 48&quot;؟</p>","options":[{"text":"لأن Figma يبطؤ حين لا تكون أسماء الطبقات فريدة.","why":"الأسماء المكرّرة أو الافتراضية لا تؤثّر في الأداء. الكلفة بشرية ووظيفية، لا تقنية."},{"text":"لأن الأسماء الافتراضية تخفي دور كل طبقة، وميزات مثل Smart animate وDev Mode تعتمد على أسماء ذات معنى.","why":"صحيح. Smart animate يطابق الطبقات بالاسم، والمطوّرون يقرؤون الأسماء في Dev Mode، والزملاء يتنقّلون بها."},{"text":"لأن المطوّرين لا يستطيعون تصدير الطبقات ذات الأسماء الافتراضية.","why":"التصدير يعمل أيًّا كان الاسم. المشكلة أن لا أحد يعرف ما وظيفة “Rectangle 12”."}],"answer":1},{"q":"<p>يجب أن يبقى زر إضافة العادة العائم على بعد 20 px من الزاوية السفلية اليمنى في كل أحجام الهواتف. أيّ constraints تضبط؟</p>","options":[{"text":"Left وTop.","why":"هذان يثبّتانه في الزاوية العلوية اليسرى. في شاشة أكبر سيبتعد عن الزاوية السفلية اليمنى."},{"text":"Scale وScale.","why":"Scale يحافظ على الموضع والحجم بشكل نسبي، فيكبر الزر ويتحرّك في الشاشات الأكبر."},{"text":"Center وCenter.","why":"Center يُبقيه على إزاحة ثابتة من المنتصف، وهذا ليس الزاوية في حجم شاشة مختلف."},{"text":"Right وBottom.","why":"صحيح. Right وBottom يثبّتان إزاحة 20 px عن هاتين الحافّتين بينما يتغيّر حجم الـ frame."}],"answer":3}],"exercise":{"kind":"spot-bug","language":"text","code":"Today                    Frame 393×852\n  Header                 Frame   constraints: Left and right, Top\n    Title \"Today\"        Text    resizing: Auto width\n    Date                 Text    resizing: Auto width\n  Habit list             Frame   constraints: Left and right, Top and bottom\n    Habit row            Frame   constraints: Left and right, Top\n      Icon               Frame   constraints: Left, Center\n      Habit name         Text    resizing: Fixed size\n      Streak             Text    resizing: Auto width\n      Check button       Ellipse constraints: Right, Center\n  Add button             Frame   constraints: Left, Top\n  Tab bar                Frame   constraints: Left and right, Bottom","bugLines":[8,11],"title":"اعثر على الطبقات التي تنكسر في الهواتف الأخرى","prompt":"<p>هذه شجرة طبقات شاشة Today في Steady، مكتوبة كنص مع نوع كل طبقة والـ constraints الخاصة بها ووضع تغيير حجم النص. تبدو الشاشة صحيحة عند 393 × 852، لكنها تنكسر على هاتف بحجم 430 × 932 ومع أسماء العادات الطويلة. حدّد السطر أو الأسطر التي تسبّب هذه المشكلات.</p>\n","hints":["فكّر فيما يتغيّر في هاتف أكبر: العرض، أم الارتفاع، أم كلاهما. أيّ الطبقات يجب أن تتبع الحافّة السفلية أو اليمنى؟","أسماء العادات تختلف في طولها. أيّ وضع لتغيير حجم النص يقصّ الاسم الطويل بدل أن يتيح له الالتفاف إلى سطر جديد؟","هناك سطران خاطئان: constraint واحد ووضع واحد لتغيير حجم النص."],"explanation":"<p>السطر 11: زر الإضافة العائم <code dir=\"ltr\">Add button</code> مثبّت على <strong>Left, Top</strong>، فيبقى في مكانه القديم على الهاتف الأكبر بدل أن يتبع الزاوية السفلية اليمنى. اضبطه على <strong>Right, Bottom</strong>. السطر 8: <code dir=\"ltr\">Habit name</code> يستخدم <strong>Fixed size</strong>، فيُقصّ الاسم “Practise Spanish vocabulary for 15 minutes” أو يفيض. استخدم <strong>Auto height</strong>، الذي يحافظ على العرض ويتيح للاسم الالتفاف. باقي الأسطر سليمة: التسميات القصيرة مثل العنوان والـ streak يناسبها Auto width، والترويسة والقائمة وشريط التبويبات لها الـ constraints المذكورة في الدرس، والصف يتمدّد مع القائمة بينما يبقى زر التعليم مثبّتًا على اليمين.</p>\n","checkLabels":{}},"words":792,"readMinutes":5}