Professional Documents
Culture Documents
Css
Css
Cover Design: Mohamed Zaher Shallar تصميم الغالف :محمد زاهر شالر
https://academy.hsoub.com
academy@hsoub.com
Copyright Notice إشعار حقوق التأليف والنشر
The author publishes this work under ينشر المصن ِّف هذا العمل وفقا لرخصة المشاع
Creative Commons Attribution- ُ اإلبداعي نَسب
الترخيص- غير تجاري- المصنَّف
NonCommercial-ShareAlike 4.0 .)CC BY-NC-SA 4.0( دولي4.0 بالمثل
International (CC BY-NC-SA 4.0).
This license is acceptable for Free Cultural .هذه الرخصة متوافقة مع أعمال الثقافة الحرة
Works. ال يمكن للمرخِّص إلغاء هذه الصالحيات طالما
The licensor cannot revoke these freedoms :اتبعت شروط الرخصة
as long as you follow the license terms:
• Attribution — You must give المصنَّف — يجب عليك نَسب ُ نَسب •
appropriate credit, provide a link to وتوفير،العمل لصاحبه بطريقة مناسبة
the license, and indicate if changes وبيان إذا ما قد ُأجريت أي،رابط للترخيص
were made. You may do so in any يمكنك القيام بهذا.تعديالت عىل العمل
reasonable manner, but not in any ولكن عىل أال يتم ذلك،بأي طريقة مناسبة
way that suggests the licensor بطريقة توحي بأن المؤلف أو المرخِّص
endorses you or your use. .مؤيد لك أو لعملك
• NonCommercial — You may not use غير تجاري — ال يمكنك استخدام هذا •
the material for commercial .العمل ألغراض تجارية
purposes. ،الترخيص بالمثل — إذا قمت بأي تعديل •
• ShareAlike — If you remix, فيجب، أو إضافة عىل هذا العمل،تغيير
transform, or build upon the عليك توزيع العمل الناتج بنفس شروط
material, you must distribute your .ترخيص العمل األصلي
contributions under the same
license as the original.
No additional restrictions — You may not منع القيود اإلضافية — يجب عليك أال تطبق أي
apply legal terms or technological شروط قانونية أو تدابير تكنولوجية تقيد اآلخرين من
measures that legally restrict others from .ممارسة الصالحيات التي تسمح بها الرخصة
doing anything the license permits. :اقرأ النص الكامل للرخصة عبر الرابط التالي
Read the text of the full license on the
following link:
https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
The illustrations used in this book is created الصور المستخدمة في هذا الكتاب من إعداد
by the author and all are licensed with a المؤلف وهي كلها مرخصة برخصة متوافقة مع
license compatible with the previously .الرخصة السابقة
stated license.
عن الناشـر
ُأنتج هذا الكتاب برعاية شركة حسوب وأكاديمية حسوب.
تهدف أكاديمية حسوب إىل توفير دروس وكتب عالية الجودة في مختلsف المجsاالت وتقssدم دورات شsاملة
ً
معتمsssدة عىل التطsssبيق العملي الsssذي يؤهsssل الطsssالب لsssدخول سsssوق لتعلُّم البرمجsssة بأحsssدث تقنياتهsssا
العمل بثقة.
حسوب شركة تقنية في مهمة لتطوير العssالم العssربي .تبssني حسssوب منتجssات تر ِّكز عىل تحسssين مسssتقبل
العمل ،والتعليم ،والتواصل .تدير حسوب أكبر منصتي عمل حر في العالم العربي ،مستقل وخمسات ويعمل في
جدول المحتويات
18 تمهيد
7
مالحظات للعاملين بلغة CSS جدول المحتويات
8
مالحظات للعاملين بلغة CSS جدول المحتويات
9
مالحظات للعاملين بلغة CSS جدول المحتويات
91 توسيط النص رأس ًيا باستخدام ارتفاع السطر line-height 2.6.7
92 ً
نسبة لعنصر آخر التوسيط 2.7.1
95 التوسيط أفق ًيا ورأس ًيا دون القلق بشأن ارتفاع وعرض العنصر 2.7.3
100 التوسيط أفق ًيا ورأس ًيا باستخدام تخطيط الجدول 2.7.7
113 توسيط العناصر أفق ًيا باستخدام خاصية الهامش margin 3.3.4
10
مالحظات للعاملين بلغة CSS جدول المحتويات
11
مالحظات للعاملين بلغة CSS جدول المحتويات
12
مالحظات للعاملين بلغة CSS جدول المحتويات
13
مالحظات للعاملين بلغة CSS جدول المحتويات
14
مالحظات للعاملين بلغة CSS جدول المحتويات
241 المتعددة
التحويالت ُ 10.7.4
243 إنشاء شكل مؤشر البوصلة باستخدام التحويالت ثالثية األبعاد 10.8.1
15
مالحظات للعاملين بلغة CSS جدول المحتويات
16
مالحظات للعاملين بلغة CSS تمهيدجدول المحتويات
17
تمهيد
لغة CSSهي لغة توصssيف شssهيرة ذائعssة الصssيت تُسssتخدم في تنسsيق صsفحات HTMLلمواقssع الssويب
وإضفاء رونق جميل عليها وهي الركيزة الثانية األساسية من ركائز بناء صفحات ومواقssع الssويب بعssد لغssة HTML
عموما.
ً ولغة جافاسكربت JavaScriptفال تخفى عىل أي مطور ويب أو مطلع عىل مجال الويب
تعد لغة CSSبسيطة سهلة التعلم لكن في الوقت نفسه احترافها ليس بالسssهل ويحتssاج إىل خssبرة وتعامssل
طويل معها ،إذ تنسيق صندوق أو نص أو صفحة بسيطة بلغة CSSأمر شديد السهولة لكن عندما تطول الصفحة
وتكثر عناصرها وتتشابك مع بعضها تبدأ الصعوبة والخروج عن النمط المألوف وحتى ظهور تعارضات وتssداخالت
إضافي وهو أن لغة CSSتحتاج إىل بيئة لتنفيذها وعادة ما تكون البيئة هي متصفح الويب ،ومتصفحات
ٌ أمر ٌ
الويب تعمل بمحركات داخلية مسؤولة عن تفسير اللغات وتنفيذها ومنها لغة CSSوهنا تظهر مشكلة التوافقيssة
مع تلك المحركات والحاجة إىل توحيد التنسيق عىل جميع المتصفحات وهذا أمssر آخssر يحتssاج مطssور الssويب إىل
تعلمه ومعالجته.
ً
انطالقا من ذلك ،جاء هذا الكتاب والذي يحمssل عنssوان "نصssائح للعssاملين بلغssة "CSSوذلssك لينقssل مطssور
الويب من مرحلة المعرفة بأساسيات لغة CSSإىل االحتراف ويختصر عليك الوقت الطويل ويغنيك عن التجريب
والوقوع في الخطأ نفسه والتعلم منه ،ويأتي الكتssاب عىل شssكل نصssائح ومقتطفssات من مطssورين خssبروا اللغssة
حول الكتاب
هsssذا الكتsssاب مsssترجم عن كتsssاب " "CSS Notes For Professionalsالمبsssني عىل توثيsssق موقsssع
StackOverflowوقد ساهم في إعداده عدد كبير من المسsاهمين عىل شsبكة StackOverflowالشsهيرة لحsل
مالحظات للعاملين بلغة CSS تمهيد
المشssاكل البرمجيssة .وإن أردت االطالع عىل قائمssة المسssاهمين الكاملssة ،ارجssع إىل قسssم " "Creditsفي نهايssة
الكتاب األصلي.
انتبه إىل أن هذا الكتاب ليس مثل غssيره من الكتب والشssروحات الssتي تشssرح لغssة CSSمن البدايssة شssرحًا
بس ًطا ومتسلساًل وإنَّما يعتمد عىل مبدأ خير الكالم ما قل ودل في الشرح وترك الشيفرة تشرح نفسها بنفسssها،
ُم َّ
َّ
يفض sل فيحوي عىل كم كبير من الشيفرات بالموازنة مع الشرحُ .وجِّه هذا الكتاب لمن لديه معرفة بلغة ،CSSلssذا
أن تمتلك خبرة بلغة SQLلتستفيد أكبر استفادة من هذا الكتاب وتقرأ الشيفرات وتفهمها وتتعلَّم منها .في هssذه
الحالة ،سيساهم هذا الكتاب في رفع مستواك في لغة CSSوس ُيملِّكك مهارات متقدمة في استعمالها باإلضافة
قد تسأل نفسك ،هل ينفssع أن اقssرأ الكتssاب دون معرفssة مسssبقة بلغssة CSS؟ سssأقول ،نعم ،ولكن يجب أن
تتحىل بالصبر في قراءة الشssيفرة وتحليلهssا وفهمهssا والبحث عن أي موضssوع لم تفهمssه والسssؤال عن شssرح ألي
حا كبي ًرا للمواضيع التي يتحدث عنها الكتاب ،كما أن تسلسل المواضsيع في
كالما وشر ً
ً شيفرة غامضة ،إذ لن تجد
بذكر ترتيب عناوين ومواضيع الكتاب ،حsاولت تsرتيب عنsاوين الكتssاب بأنسssب شssكل لتكssون متدرِّجssة في
الصعوبة وحاولت جمع المواضيع المتشابهة في فصل واحد رغم تشرذمها وتفرقها في الكتاب األصلي فال تشssبه
النسخة العربية النسخة األجنبية مطل ًقا ،إذ بذلت جهدًا لتكون أفضل منها .فإن كنت عىل معرفة بأحد المواضsيع،
فال تتخطاها بل اقرأها ،فقد تمر معك إشssارة لموضssوع متقssدم أو مالحظssة مهمssة لم تكن تعرفهssا (تssذكر أنَّ اسssم
أيضا أن تقرأ الكتاب من أي قسم تريد فهssو من األسssاس غssير ُم sرتَّب ترتيبًssا
الكتاب مالحظات متقدمة) .يمكنك ً
متدرجًا ومتسلساًل كما أشرت رغم محاولتي في ترتيبه لك أنسب ترتيب من البداية للنهاية.
أنشئ العمل األصلي من هذا الكتاب ألغراض تعليمية وال يتبع إىل أي شركة أو مجموعة رسمية متعلقة بلغة
CSSوال حتى شssبكة ،StackOverflowكمssا أن جميssع العالمssات التجاريssة المssذكورة في هssذا الكتssاب تتبssع إىل
ذلك ،يمكنك التنقل بين توثيق لغة CSSفي موسوعة حسوب وفصول هذا الكتاب.
ي شخص ملم بالبرمجة أن يساهم في المشssاريع مفتوحssة المصssدر .الssبرامج مفتوحssة المصssدر هي
يمكن أل ِّ
برامج متاحة لالستخدام وإعادة التوزيع والتعديل دون قيود .تساعد المساهمة في المشاريع مفتوحة المصدر عىل
تحسين البرامج ،عبر ضمان تمثيلها لقاعدة عريضة من المستخدمين .عندما يساهم المستخدمون في المشssاريع
مفتوحة المصssدر ،سssواء عssبر كتابssة الشssيفرة ،أو التوثيssق ،أو صssيانة المجلssدات ،فssإنَّهم يssوفرون قيمssة مضssافة
19
مالحظات للعاملين بلغة CSS تمهيد
للحصول عىل مراجع إضافية عن ،CSSأو للمشاركة في نقاشات مع اآلخرين ،يمكنك االطالع عىل المقssاالت
مهتما بتعلم تطوير تطبيقات الويب ،أو تعلم لغات مح sدَّدة مثssل PHPوجافاسssكربت ،فssاطلع عىل
ً إذا كنت
قسم الدورات في األكاديمية ،كما يمكنك تصفح موسsوعة حسsوب ألجsل قsراءة توثيقsات عsدد كبsير من لغsات
جميل بيلوني
16/01/2023
20
.1أساسيات لغة CSS
12-5-1998 CSS2
13-10-2015 CSS3
فيssه إىل مسssار الملssف ،وتأخssذ الخاصssية relالقيمssة ،stylesheetأمssا الخاصssية typeفيمكن تجاهلها أو
إعطائها القيمssة .text/cssومن األفضssل إضssافة هssذا الوسssم داخssل الوسssم < >headلضssمان تحميssل ملssف
نسsقة
نسقة فو ًرا ،وفيما عدا ذلك سssتظهر العناصssر غssير ُم َّ
التنسيقات قبل تحميل العناصر مما يؤدي لظهورها ُم َّ
لفترة قصيرة حتى يكتمل تحميل ملف التنسيقات.
}{ h1
المحدد /* h1:
كتلة التعريفات {}:
*/
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
:مثال
HTML ملف •
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Hello World!</h1>
<p>I ♥ CSS</p>
</body>
</html>
style.css ملف •
h1 {
color: green;
text-decoration: underline;
}
p {
font-size: 25px;
font-family: 'Trebuchet MS', sans-serif;
}
رsد آخsل مجلssف داخsان الملss وإذا ك،CSS فssحيح لملss تشير للمسار الصhref دائما أن الخاصية
ً تأكد،انتبه
لssع كssا تجمssذلك ألنهssل ولssة األفضssارجي هي الطريقss خCSS فssق ملssيقات عن طريssافة التنسssبر إضssوتعت
.التنسيقات في ملف مركزي واحد مما يُس ِّهل الرجوع إليه وتعديله في المستقبل
22
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
وفي هذه الحالة ينبغي مراعاة ترتيب الملفات عند كتابssة التنسssيقات ،فعىل سssبيل المثssال إذا كssان الملsف
main.cssيحوي القاعدة التالية والتي تجعل جميع الفقرات ذات الصنف greenتظهر باللون األخضر الفاتح.
وكان الملف override.cssيحوي القاعدة الموضحة أدناه والتي تجعل لون الفقرات أخضر غام ًقا
حمل
فإن النتيجة النهائية ستكون ظهور الفقرات باللون األخضر الغامق بسssبب أن الملssف override.cssيُ َّ
إىل المتصفح بعد الملف main.cssمما يُجبر المتصفح عىل تطsبيق القواعsد المsذكورة فيssه وسsتطغى القواعsد
هناك بعض القواعد والمميزات مثل القاعدة ! importantوالوراثة وأعماق التحديد والتي تمكنك من التحكم
تُ َّ
حمل ملفات CSSالخارجية مرة واحدة فقط عند تحميل الصفحة للمرة األوىل ،وتبقى محفوظة في ذاكرة
المتصفح عند التنقل بين الصفحات مما يؤدي لتحميلها بشكل أسر ع.
><head
><style
{ h1
;color: green
;text-decoration: underline
}
{ p
23
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
;font-size: 25px
;font-family: 'Trebuchet MS', sans-serif
}
></style
></head
><body
><h1>Hello World</h1
><p>I ♥ CSS</p
></body
1.1.3القاعدة @import
تُستعمل القاعدة @importالستيراد قواعد CSSمن ملفات أخsرى ،ويجب أن تسsبق هsذه القاعssدة جميssع
القواعssد األخssرى عssدا القاعssدة ،@charsetوال يمكن اسssتعمالها داخssل قواعssد @ مثssل قواعssد اسssتعالمات
الوسائط وغيرها.
><style
;)'@import url('/css/style.css
></style
المراد استيراده.
حيث تحدد الخاصية urlمسار الملف ُ
يمكن ً
أيضا استعمالها في ملفات التنسيقات الخارجية ،حيث تستورد الشssيفرة أدنssاه الملssف additional-
;'@import '/additional-styles.css
ومن الشائع استعمال القاعدة @importالستيراد الخطوط من الويب كما هو موضح في الشيفرة التالية:
;'@import 'https://fonts.googleapis.com/css?family=Lato
ويمكن إضsافة اسsتعالمات الوسsائط كمعsامالت اختياريssة للقاعsدة ،@importوفي هsذه الحاليsة تُسsتورد
24
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
من األفضل استخدام الملفات الخارجية أو الوسم < >styleلتطبيق التنسيقات ،وذلك للفصل بين البنية
مثال:
ومن مميزات التنسيقات السطرية أنَّها تضمن تطبيق التنسيقات عىل العناصر دون أن تتخطاهssا أي قاعssدة
والمواقع الكبيرة.
مثال:
;)"var el = document.getElementById("element
;el.style.opacity: 0.5
;'el.style.fontFamily: 'sans-serif
ينبغي مالحظة استخدام نمط سنام الجمل المنخفض lower camel caseلكتابة أسssماء الخاصssيات في
ومن الممكن ً
أيضا إنشاء عنصر < >styleوإضافة قواعد CSSبداخلssة أو إنشssاء عنصssر < >linkيشssير إىل
1.1.6استخدام jQuery
إليك المثال التالي للتحكم في خاصية واحدة:
25
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
;)'$('#element').css('margin', '5px
انظر ً
أيضا المثال للتحكم في عدد من الخاصيات:
{($('#element').css
margin: "5px",
padding: "10px",
"color: "black
;)}
بالنسبة للخواص التي تتكون من أكثر من كلمssة مثssل الخاصssية ،font-sizeفيمكن كتابتهssا بين عالمssتي
مثال:
{($('.example-class').css
"background-color": "blue",
"fontSize: "10px
;)}
مثال:
{ span
;text-shadow: yellow 0 0 3px, green 4px 4px 10px
}
{ span
text-shadow:
yellow 0 0 3px,
;green 4px 4px 10px
}
تُمكنك ً CSS
أيضا من تطبيق التنسيقات عىل عدد من العناصssر دون إعssادة كتابتهssا لكssل عنصssر عىل حssدة،
26
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
في حال عدم وضع الفاصلة كما في ،div spanفتُطبق التنسيقات عىل عناصر spanالموجودة داخل •
عناصر divفقط.
1.3التعليقات Comments
تُكتب التعليقssات بين العالمssتين */و * ، /ويمكن أن تكssون من سssطر واحssد (المثssال األول) أو عssدد من
{ div
*/هذا تعليق من سطر واحد *color: red; /
}
*/
تعليق
من
أربعة
أسطر
*/
{ div
;color: red
}
1.4المحددات Selectors
والمعرِّفssات ،IDs
ُ أكثر من 50نوع من أنواع المحددات منها محددات العناصر ،elementsواألصناف ،classes
27
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
الوصف المحدد
المحدِّد العام ،ويُحدد جميع العناصر.
ُ *
محدد الوسوم ،ويُحدد جميع العناصر التي لها وسم ُمعين. div
صنف ُ classمعين.
ُمحدد الصنف ،ويُحدد جميع العناصر التي لها ِ .blue
يُحدد جميع العناصر التي لها الصنفين blueو redمعً ا. .blue.red
ً
فريدة لكل عنصر في المستند ،وال يجوز تكرارها أبدًا. معيار HTML5يقول أنَّ قيمة الخاصية idيجب أن تكون
إصدار
الوصف العُ نصر المطابق المُ حدد
CSS
يُطابق العناصر ذات الخاصية
2 <>div attr []attr
.attr
28
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
إصدار
الوصف العُ نصر المطابق المُ حدد
CSS
يطابق العناصر التي لها القيمة val
2 للخاصية ،attrأو تبدأ بالكلمة ['>div attr='val-sth etc'< ]attr\|='val
valمتبوعة بالمحرف (.)-
.1يجب وضع قيم الخواص بين عالمات تنصيص مزدوجة ("") أو مفردة ('').
المتصفحات.
مثال:
><style
{ ]div[data-color
;color: red
}
></style
مثال:
29
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
<style>
div[data-color="red"] {
color: red;
}
</style>
]attribute*="value"[ المحدد.ج
.يُحدد العناصر التي لها تحتوي قيمة الخاصية فيها عىل كلمة معينة
:مثال
<style>
[class*="foo"] {
color: red;
}
</style>
]attribute~="value"[ المحدد.د
:مثال
<style>
[class~="color-red"] {
30
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
color: red;
}
</style>
]attribute^="value"[ المحدد.ه
:مثال
<style>
[class^="foo-"] {
color: red;
}
</style>
]attribute$="value"[ المحدد.و
:مثال
<style>
class$="file"] {
color: red;
}
</style>
31
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
]attribute|="value"[ المحدد.ز
.)-( متبوعة بالمحرفvalue أو تبدأ بالكلمة، للخاصيةvalue يطابق العناصر التي لها القيمة
:مثال
<style>
[lang|="EN"] {
color: red;
}
</style>
]attribute="value" i[ المحدد.ح
:مثال
<style>
[lang="EN" i] {
color: red;
}
</style>
<div lang="EN">This will be red</div>
<div lang="en">This will be red</div>
<div lang="PT">This will NOT be red</div>
32
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
الم ِّ
جمعات Combinators ُ 1.4.2
الوصف المحدد
بفراغ واحد
ٍ ً
عادة ُمحدِّد العناصر السليلة descendant combinatorفي CSSالذي يُم َّثل
div span
ويطابِق العنصر الثاني إذا كان ابنًا للعنصر األول.
ويفصل بين ُمحدِّدينُ ،
ويطابِق
ُمحدِّد العناصر األبناء child combinatorفي CSSرمزه > ويفصل بين ُمحدِّدينُ ،
div > span
العنصر الثاني إذا كان ابنًا للعنصر األول.
ُمحدِّد العناصر األخوة العامة general sibling combinatorفي CSSرمزه ~ ويفصل بين
ُمحدِّدين ،ويطابق العنصر الثاني إذا أتى بعد العنصر األول (وليس بالضرورة أن يأتي بعده a ~ span
مباشر ًة) ،وكان كال العنصرين ابنا ًء لعنصر أب مشترك.
ُمحددات العناصر المتجاورة تُحدد العناصر التالية لعنصر ُمعين ،ولكن يُمكن استعمال الخاصية flex orde
اُ .
محدد العنارص السليلة Descendant Combinator
><style
{ div p
;color:red
}
></style
><div
><p>My text is red</p
><section
><p>My text is red</p
></section
></div
33
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
ُ .ب
Child Combinator محدد العنارص األبناء
<style>
div > p {
color:red;
}
</style>
<div>
<p>My text is red</p>
<section>
<p>My text is not red</p>
</section>
</div>
ُ .ج
Adjacent Sibling Combinator محدد العنارص اإلخوة المتجاورة
<style>
p + p {
color:red;
}
</style>
<p>My text is not red</p>
<p>My text is red</p>
<p>My text is red</p>
<hr>
<p>My text is not red</p>
ُ .د
General Sibling Combinator محدد العنارص اإلخوة العامة
<style>
p ~ p {
color:red;
}
</style>
34
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
الشجرية للصفحة ،مثال لذلك تحديد العناصر بنا ًء عىل حالة أو ديناميكية العنصر ،أو بنا ًء عىل الموقssع (األصssناف
الزائفة للبنية الهيكلية واالستهداف) ،أو استعمال األصناف الزائفة لنفي تحديد عنصر معين ،أو لتحديssد العناصssر
الصيغة العامة:
{ selector:pseudo-class
;property: VALUE
}
الوصف االسم
يُحدد العناصر التي جرى تفعيلها من المستخدم ،active elementsويُ َفعَّل
:active
العنصر عندما يضغط المستخدم عليه بزر الفأرة الرئيسي.
يُمكن من إنشاء مجموعة من المحددات بحيث تُحدِّد العناصر التي تمتلك هذه
:any
المجموعة.
يُم ِّثل أي عنصر ُمختار افتراض ًيا بين مجموعة من العناصر المتعلقة به. :default
يُم ِّثل أي عنصر ُمفعّ ل ،أي يمكن اختياره أو النقر عليه أو الكتابة فيه. :enabled
35
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
الوصف االسم
يُم ِّثل أ ّول عنصر من نوعه في مجموعة من العناصر األخوة. :first-of-type
يُم ِّثل عنص ًرا (مثل عناصر النماذج) استقبل التركيز ،focusويُفعَّ ل التركيز إذا
ضغط المستخدم أو لمس أحد العناصر أو وصل إليه عبر مفتاح tabعىل لوحة :focus
المفاتيح.
يُم ِّثل عنصرًا (مثل عناصر النماذج) استقبل التركيز foucsأو احتوى عىل عنصر قد
:focus-within
استقبل التركيز،
م ِّثل العناصر التي تُعرَض عندما يكون المتصفح في وضع ملء الشاشة. :full-screen
يُطابِق العناصر التي يتفاعل المستخدم معها عبر الفأرة لكن ليس بالضرورة أن
ً
عادة عندما يمرر المستخدم مؤشر الفأرة فوق يفعِّلها ،ويُفعَّ ل هذا الصنف الزائف :hover
العنصر.
يُم ِّثل أيّة عناصر < >inputالتي تكون قيمتها ضمن المجال المسموح ُ
المحدَّد
:in-range
عبر الخاصيتين minو .max
يُم ِّثل أيّة عناصر < >inputأو < >formالتي فشل التحقق من صحة محتوياتها. :invalid
يُم ِّثل عنص ًرا لم تتم زيارته من قبل ،ويُطابِق جميع عناصر والتي لها الخاصية
:link
hrefولم تتم زيارتها بعد.
طابِق عنص ًرا أو أكثر بنا ًء عىل موقعه ضمن مجموعة من العناصر األخوة. :nth-child
يُطابِق عنص ًرا أو أكثر بنا ًء عىل موقعه ضمن مجموعة من العناصر األخوة
:nth-of-type
،siblingsوذلك بدءًا من نهاية المجموعة.
يُم ِّثل أيّة عناصر < >inputأو < >selectأو < >textareaالتي لم تُضبَط
:optional
الخاصية requiredعليها.
يُم ِّثل أيّة عناصر < >inputالتي ال تكون قيمتها ضمن المجال المسموح ُ
المحدَّد
:out-of-range
عبر الخاصيتين minو .max
36
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
الوصف االسم
نصا بدياًل placeholder يُم ِّثل أي عنصر < >inputأو < >textareaالذي يُ ِ
ظهر ً
:placeholder-shown
.text
يُم ِّثل أي عنصر فيه محتوى نصي ال يمكن للمستخدم تعديله. :read-only
يُم ِّثل أي عنصر فيه محتوى نصي يمكن للمستخدم تعديله. :read-write
يُطابِق العنصر الجذر في شجرة المستند ،أي أنَّه يُطابِق العنصر < >htmlفي
:root
للمحدِّد htmlإال أنَّ درجة التحديد له أعىل.
مستندات ،HTMLوهو مكافئ ُ
يُم ِّثل عنص ًرا تمت زيارته من قبل ،وألسباب تابعة للخصوصية فإنَّ عدد
:visited
ٌ
قليلة جدًا. المحدِّد
الخاصيات التي يمكن تغيير قيمتها باستخدام هذا ُ
إن أردت االستزادة أو أردت شرحًا موسعً ا ألي صنف زائssف بssاألعىل ،فssارجع إىل قسssم األصssناف الزائفة من
10 9 8 7 6 5 4 3 2 1 المُ حدد الزائف
× :first-child
× (:nth-child(3
× :last-child
× (:nth-last-child(3
37
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
مثال:
><style
{ p:last-of-type
;background: #C5CAE9
}
{ h1:last-of-type
;background: #CDDC39
}
></style
>"<div class="container
><p>First paragraph</p
><p>Second paragraph</p
><p>Last paragraph</p
><h1>Heading 1</h1
><h2>First heading 2</h2
><h2>Last heading 2</h2
></div
النتيجة:
المحsدَّد عssبر
المحدد :in-rangeيُحدد عناصssر < >inputالssتي تكssون قيمتهssا ضssمن المssدى المسssموح ُ
ُ
38
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
:مثال
<style>
input:in-range {
border: 1px solid blue;
}
</style>
:not المحدد.د
:مثال
<style>
input:not([disabled]):not(.example){
background-color: #ccc;
}
</style>
<form>
Phone: <input type="tel" class="example">
E-mail: <input type="email" disabled="disabled">
Password: <input type="password">
</form>
كss وال تمتل،)ةssير ُمعطلssا (غss> التي يُمكن للمستخدم التفاعل معهinput< المثال أعاله يُحدد جميع عناصر
..example الصنف
input:not([disabled], .example) {
background-color: #ccc;
}
39
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
:focus-within المحدد.ه
:مثال
<style>
div {
height: 80px;
}
input {
margin: 30px;
}
div:focus-within {
background-color: #1565C0;
}
</style>
:النتيجة
40
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
يمكن إنشاء قيم منطقيssة (أي قيم الصssواب والخطssأ) عن طريssق اسssتخدام المحsددات وصssناديق اإلختيssار،
>"<div id="footer
><!-- ... --
></div
الخطوة الثانية :التحكم في القيمة المنطقية ،يُمكنك التحكم في القيمssة المنطقيssة عن طريssق إنشssاء عنصssر
41
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
ددات تُعطي القيمssول عىل ُمحs يُمكن الحص،CSS تخدامsة باسss الوصول إىل القيمة المنطقي:الخطوة الثالثة
/* true */
<checkbox>:checked ~ [sibling of checkbox & parent of target <target>
/* false */
<checkbox>:not(:checked) ~ [sibling of checkbox & parent of target]
<target>
#darkThemeUsed:checked ~ #container,
#darkThemeUsed:checked ~ #footer {
background: #333;
}
:only-child المحدد.ز
:مثال
<style>
p:only-child {
color: blue;
}
</style>
<div>
42
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
<p>This paragraph is the only child of the div, it will have the
color blue</p>
</div>
<div>
<p>This paragraph is one of the two children of the div</p>
<p>This paragraph is one of the two children of its parent</p>
</div>
<input type="range"></input>
المحددات التأثير
input[type=range]::-webkit-slider-thumb
input[type=range]::-moz-range-thumb Thumb
input[type=range]::-ms-thumb
input[type=range]::-webkit-slider-runnable-track
input[type=range]::-moz-range-track Track
input[type=range]::-ms-track
input[type=range]:focus OnFocus
input[type=range]::-moz-range-progress
Lower part of the
input[type=range]::-ms-fill-lower
track
) لذا جافاسكربت مطلوبةWebKit (غير ممكن حال ًيا في المتصفحات المعتمدة عىل
: إليك مثال،للمعرِّف
ُ مع تفادي عُمق التحديد العاليID المعرِّف الخاص بها
ُ يمكن تحديد العناصر باستخدام
HTML ملف •
43
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
} [id="element"] { ...
*/يعطي نفس نتيجة محدد المعرف ولكن له عمق تحديد أقل بسبب استعمال محددات الخواص */
الحاوية أدناه
>"<div class="warning
><p>THis would be some warning copy.</p
></div
يُمكن دمج عدد من األصناف للحصول عىل عمق تحديد عالي كما هو موضح في المثال أدناه
{ .important
;color: orange
}
{ .warning
;color: blue
}
{ .warning.important
;color: red
}
>"<div class="warning
><p>This would be some warning copy.</p
></div
44
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
مثال:
><style
{ #exampleId
;width: 20px
}
></style
>"<div id="exampleId
><p>Example</p
></div
الوصف العنصر
إضافة محتوى بعد محتوى العنصر األصلي. ::after
تُحدد الجزء الذي حدده المستخدم من العنصر عن طريق مؤشر الفأرة. ::selection
45
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
الوصف العنصر
تُستخدم إلضافة تنسيق القائمة ( )list-styleللعنصر. ::marker
إن أردت االطالع عىل أي تفاصيل إضافية حول أي محدد في الجدول ،فارجع إىل توثيق العناصر الزائفssة في
تُضاف العناصر الزائفة إىل محددات CSSوتُمكن من تغيير أنماط أجزاء معينة من العنصر.
سمة مطلوبة إلنشاء العناصر الزائفة ،ويمكن أن تأخذ قيمة فارغة "" :content:
سمة contentهي ِ
ِ
{ div::after
;'content: 'after
;color: red
;border: 1px solid red
}
{ div
;color: black
;border: 1px solid black
;padding: 1px
}
{ div::before
;'content: 'before
;color: green
;border: 1px solid green
}
النتيجة:
غالبًا ما تُستخدم العناصر الزائفة لتغيير شكل إشارات القوائم وباألخص القوائم الغير مرتبة .ul
46
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
{ ul
;list-style-type: none
}
ومن ثمة يمكنك إضافة عنصر بشكل معين بداًل عنها ،الشيفرة أدناه تُضيف مربع ذو تدرج لوني.
{ li::before
;"" content:
;display: inline-block
;margin-right: 10px
;height: 10px
;width: 10px
;)background: linear-gradient(red, blue
}
><ul
><li>Test I</li
><li>Test II</li
></ul
النتيجة:
تقسيم المحددات من حيث ُعمق التحديد إىل ثالث مجموعات كما هو موضح بالجدول التالي:
47
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
ُمحددات المجموعssة Aلهssا عُمssق التحديsد األكssبر ،تليهssا المجموعssة ،Bثُم المجموعssة .cالمحssدد العssام (*)
{ #foo
;color: blue
}
{ .bar
;color: red
;background: black
}
للمحدِّد IDأكبر من عمق التحديد لمحدد الصنف تُطبق القاعssدة color: blueمن
بما أن ُعمق التحديد ُ
المحدد ،foo#والقاعدة background: blackمن المحدد . .bar
ُ
مثال:
{ .bar
;color: red
;background: black
}
48
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
{ .baz
;background: white
}
المحsددان في هsذا المثsال لهمsا نفس عُمsق التحديsد ،وفي هsذه الحالsة يسsتخدم المتصssفح طبيعssة CSS
في المثال أعاله ،للتأكد من أن القاعدة color:redوالمعرفة في المحدد .barهي التي ستُطبق ،يمكننssا
إضافة محددات أخرى لزيادة ُعمق هذا المحدد ،والمثال التالي يوضح ذلك:
المحدد span.barيتكون من ُمحددين ويكون عمق التحديد له هو ،2أما المحدد .bazفعمق التحديد لssه
ويُمكن ً
أيضا تكرار المحدد .barللحصول عىل نفس النتيجة.
ي ُفضل زيادة عمق التحديد بإضافة محددات إضافية بداًل عن استخدام !importantوال نستعملها إال للضرورة.
يُمكنك حساب عمق التحديد باستخدام أداة قياس عُمق التحديد .مثال:
{ #myDiv
;font-weight: bold !important
}
{ #outerdiv #myDiv
;font-weight: normal
}
49
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
يكون ثُخن الخط النهائي في هذا المثال هssو ،boldوذلssك بسssبب اسssتخدام ُ
المعssرف !importantممssا
العناصر في الصفحة في مكان واحد بداًل عن تحديدها لكssل عنصssر منفssرد ممssا يسssهل الوصssول إليهssا وتعssديلها
في المستقبل.
من الخاصيات التي تُ َّورث تلقائ ًيا الخاصية fontو colorو text-alignو .line-height
مثال:
{ #myContainer
;color: red
padding: 50px
}
>"<div id="myContainer
><h3>Some header</h3
><p>Some paragraph</p
></div
في هذا المثال ،يرث العنصران h3و pاللون األحمر تلقائ ًيsا من العنصsر األب لهمsا ،أمsا بالنسsبة للخاصsية
بعض الخاصيات مثل ،paddingو marginال تُ َورِّث قيمتها للعناصر األبنssاء تلقائ ًيssا ،ولكن يمكن إجبارهssا
50
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
مثال:
{ #myContainer
;color: red
;padding: 5px
}
{ #myContainer p
;padding: inherit
}
>"<div id="myContainer
><h3>Some header</h3
><p>Some paragraph</p
></div
في هذا المثال يرث العنصران h3و pكِال القاعدتين color: redو padding: 5pxمن العنصر األب.
يستخدم توريث التنسيق مع ُعمق التحديد لتحديد القيمة النهائية التي تأخذها خاصية ،CSSويحددان اآللية
يتعلق موضوع تضارب قواعد CSSبكيفية تحميل ملفات CSSفي المتصفح ،حيث يقرأ المتصssفح ملفssات
عندما تُستخدم نفس القاعدة بقيمتين مختلفين في نفس العنصر تُطبَّق القاعدة ذات عُمق التحديد األكssبر،
مثال:
51
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
<style>
.mystyle { color: blue; } /* specificity: 0, 1, 0 */
div { color: red; } /* specificity: 0, 0, 1 */
</style>
طssون الخssون لss يك،رssددات العناصss أكبر من عمق تحديد محclass بما أنَّ عمق التحديد لمحددات األصناف
: مثال.الناتج أزرق
خارجيCSS ملف •
.class {
background: #fff;
}
<style>
.class {
background: #000;
}
</style>
ُيطبِّقs ه سss أي أن،هss يُطبَّق المتصفح األنماط الموجودة في آخر ملف حُ ِّمل إلي،بما أن ُعمق التحديد متساوي
<style>
body > .mystyle { background-color: blue; } /* specificity: 0, 0,
1, 1 */
.otherstyle > div { background-color: red; } /* specificity: 0, 0,
1, 1 */
</style>
<body class="otherstyle">
<div class="mystyle">Hello World</div>
</body>
52
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
نُالحظ تساوي عمق التحديssد لكssل من المحssددين ولssذلك يتَّبssع المتصssفح قواعssد تssوريث التنسssيق أي انssه
س ُي َطبِّق األنماط حسب ترتيب ظهورها في الملف ،أي أنه س ُيطبَّق في هذه الحالة اللون األزرق للخاصsية ومن ثم
ينتقل للقاعدة الثانية والتي تُغيير لون الخلفية للون األحمر ،أي أن اللون النهائي للخلفية سكون أحمر.
مثال:
><style
{ div
;font-size: 7px
;border: 3px dotted pink
;background-color: yellow
;color: purple
}
{ body.mystyle > div.myotherstyle
;font-size: 11px
;background-color: green
}
{ #elmnt1
;font-size: 24px
;border-color: red
}
{ .mystyle .myotherstyle
;font-size: 16px
;background-color: black
;color: red
}
></style
>"<body class="mystyle
>"<div id="elmnt1" class="myotherstyle
!Hello, world
></div
></body
حجم الخط :بما أن المحدد #elemnt1له أعىل عمق للعنصssر ،divيكssون حجم الخssط النهssائي هssو 24 •
بكسل.
53
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
border: اإلطssار :بمssا أن المحssدد #elemnt1لssه أعىل عمssق للعنصssر ،divتُطبَّق القاعssدة 3px •
.dotted red
1.5الوحدات
يوضح الجدول التالي قائمة بالوحدات المتاحة في :CSS
الوصف الوحدة
تحدد الطول كنسبة مئوية من طول العنصر األب أو العنصر الحالي. %
تحدد الطول كنسبة من حجم خط العنصر األب (( )font-sizeمثاًل 2emتعني ضعف حجم الخط). em
تحدد الطول كنسبة من حجم خط العنصر الجذري الذي هو العنصر .html rem
54
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
HTML ملف •
CSS ملف •
html {
font-size: 16px;
}
input[type="button"] {
font-size: 1rem;
padding 0.5em 2em;
}
input[type="range"] {
font-size: 1rem;
width: 10em;
}
input[type="text"] {
font-size: 1rem;
padding: 0.5em;
}
55
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
بافتراض أنَّ القيمة االبتدائية لحجم الخط هي 16بكسل ،يُمكن التعبير عن أحجام الخطوط باستخدام الوحدة
remكالتالي:
10px = 0.625rem
12px = 0.75rem
14px = 0.875rem
16px = 1rem
18px = 1.125rem
20px = 1.25rem
24px = 1.5rem
30px = 1.875rem
32px = 2rem
مثال:
{ html
;font-size: 16px
}
56
مالحظات للعاملين بلغة CSS أساسيات لغة CSS
{ h1
font-size: 2rem; /* 32px */
}
{ p
font-size: 1rem; /* 16px */
}
{ li
font-size: 1.5rem; /* 24px */
}
ً
نسبة ل %1من البُعد األصغر لشاشة العرض ،فإذا كان طول شاشة العرض أقل :vminتقيس األطوال •
ً
نسبة ل %1من البُعد األكبر لشاشة العرض ،فإذا كان طول شاشة العssرض أكssبر :vmaxتقيس األطوال •
وبمعنى آخر:
ً
نسبة الرتفاع شاشة العرض. :vhترمز الرتفاع شاشة العرض ،وتقيس األطول •
ً
نسبة لعرض شاشة العرض. :vwترمز لعرض شاشة العرض ،وتقيس األطول •
مثال:
{ div
;width: 20vw
;height: 20vh
57
CSS مالحظات للعاملين بلغة CSS أساسيات لغة
ونss يك،ر االبنss للعنصwidth: 50% دةss وأضفنا القاع، بكسل100 إذا كان عرض العنصر األب،إليك مثال
HTML ملف •
<div class="parent">
PARENT
<div class="child">
CHILD
</div>
</div>
CSS ملف •
*{
color: #CCC;
}
.parent{
background-color: blue;
width: 100px;
}
.child{
background-color: green;
width: 50%;
}
:النتيجة
58
.2تخطيط الصفحة وضبط محاذاة العنارص
2.1الخاصية display
تُحدد الخاصية displayما هو نوع صندوق العرض الذي سيستخدم لعرض العنصر .تؤخذ قيمssة الخاصssية
displayفي HTMLمن مواصssفة HTMLأو من األنمssاط االفتراضssية للمتصssفح أو األنمssاط الssتي يُعرِّفهssا
المستخدم ،أمssا القيمssة االفتراضssية لخاصssية displayلمعظم عناصssر HTMLهي blockأو ( inlineبعض
العناصر لها قيم افتراضية أخرى) .ويمكن أن تأخذ إحدى القيم التالي:
الوصف القيمة
تُخفي العنصر وتمنعه من أن يشغل مساحة في الصفحة. none
تعرض العنصر كعنصر سطري ،inline-elementال يمتلك عرض محدد ،وال ينتقل
inline
للسطر التالي بعد نهاية العنصر.
مزيج بين عناصر الكتلة والعناصر السطرية ،ال ينتقل للسطر التالي بعد نهاية العنصر ولكن
inline-block
يمكن أن يمتلك عرض محدد.
لها سلوك مشابه لسلوك عناصر الكتلة ،وتُعرض العناصر بداخلها استنادًا إىل النموذج
grid
الشبكي .grid model
لها سلوك مشابه لسلوك عناصر الكتلة ،وتُعرض العناصر استنادًا إىل نموذج الصندوق
flex
المرن .flexbox model
الوصف القيمة
تُرجع القيمة االبتدائية للخاصية. initial
النتيجة:
النتيجة:
2.1.3القيمة inline-block
القيمة inline-blockهي مزيج بين خاصيات العناصر السطرية وعناصssر الكتلssة ،فهي تعssرض العناصssر
60
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
:النتيجة
61
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
:النتيجة
:النتيجة
62
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
2.1.4إخفاء العنارص
تُستخدَم القاعدة display: noneإلخفاء العنصر ومنعه من أن يشغل مساحة في الصssفحة ،عىل عكس
القاعدة visibility: hiddenوالتي تُخفي العنصر ولكن تبقى المساحة الssتي يشssغلها من الصssفحة ثابتssة
مثال:
{ #myDiv
;display: none
}
><style
{ table
;width: 100%
}
></style
><table
><tr
><td
I'm a table
></td
></tr
></table
يُمكن الحصول عىل نفس ناتج الشيفرة أعاله باستخدام العنصر divكما هو موضح بالشيفرة التالية:
><style
{ .table-div
63
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
display: table;
}
.table-row-div {
display: table-row;
}
.table-cell-div {
display: table-cell;
}
</style>
<div class="table-div">
<div class="table-row-div">
<div class="table-cell-div">
I behave like a table
</div>
</div>
</div>
Flexbox تخطيط2.2
لتوزيع العناصر في مساحة العرض المتاحة توزيعً ا مرنًا بحيث تتمدد أوFlexbox يستخدم نموذج أو تخطيط
:HTML ملف •
<div class="aligner">
<div class="aligner-item">
some content
</div>
</div>
CSS ملف •
.aligner {
64
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
;display: flex
;align-items: center
;justify-content: center
}
{ .aligner-item
;max-width: 50%
}
>"<div id="container
><div></div
><div></div
><div></div
></div
مثال:
{ div#container
;display: flex
;flex-direction: row
;justify-content: center
}
النتيجة:
65
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
مثال:
{ div#container
;display: flex
;flex-direction: column
;justify-content: center
}
النتيجة:
66
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
مثال:
{ div#container
;display: flex
;flex-direction: row
;align-items: center
}
النتيجة:
67
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
مثال:
{ div#container
;display: flex
;flex-direction: column
;align-items: center
}
النتيجة:
68
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
مثال:
{ div#container
;display: flex
;flex-direction: row
;justify-content: center
;align-items: center
}
النتيجة:
69
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
مثال:
{ div#container
;display: flex
;flex-direction: column
;justify-content: center
;align-items: center
}
النتيجة:
70
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
HTML ملف •
<div class="header">
<h2>Header</h2>
</div>
<div class="content">
<h1>Content</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Integer nec odio. Praesent libero.
71
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh
elementum imperdiet. Duis sagittis
ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta.
Mauris massa. Vestibulum lacinia
arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per
conubia nostra, per inceptos
himenaeos. Curabitur sodales ligula in libero.
</p>
</div>
<div class="footer">
<h4>Footer</h4>
</div>
CSS ملف •
html, body {
height: 100%;
}
body {
display: flex;
flex-direction: column;
}
.content {
flex: 1 0 auto;
}
.header, .footer {
background-color: grey;
color: white;
flex: none;
}
HTML ملف •
72
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
<div class="flex-container">
<div class="flex-item">1</div>
<div class="flex-item">2</div>
<div class="flex-item">3</div>
<div class="flex-item">4</div>
<div class="flex-item">5</div>
</div>
CSS ملف •
.flex-container {
background-color: #000;
height: 100%;
display:flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
align-content: stretch;
align-items: stretch;
}
.flex-item {
background-color: #ccf;
margin: 0.1em;
flex-grow: 1;
flex-shrink: 0;
flex-basis: 200px;
}
:النتيجة
73
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
HTML ملف •
<div class="container">
<header class="header">Header</header>
<div class="content-body">
<main class="content">Content</main>
<nav class="sidenav">Nav</nav>
<aside class="ads">Ads</aside>
</div>
<footer class="footer">Footer</footer>
</div>
CSS ملف •
body {
margin: 0;
padding: 0;
}
.container {
display: flex;
flex-direction: column;
74
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
height: 100vh;
}
.header {
flex: 0 0 50px;
}
.content-body {
flex: 1 1 auto;
display: flex;
flex-direction: row;
}
.content-body .content {
flex: 1 1 auto;
overflow: auto;
}
.content-body .sidenav {
order: -1;
flex: 0 0 100px;
overflow: auto;
}
.content-body .ads {
flex: 0 0 100px;
overflow: auto;
}
.footer {
flex: 0 0 50px;
}
75
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
لssة التوصss ويوضح المثال التالي كيفي،التخطيط الموضح في الصورة أعاله هو من التخطيطات الشائعة جدًا
HTML ملف •
<div class="cards">
<div class="card">
<p>Lorem ipsum Magna proident ex anim dolor ullamco pariatur
reprehenderit culpa esse enim
mollit labore dolore voluptate ullamco et ut sed qui
minim.</p>
<p><button>Action</button></p>
</div>
<div class="card">
<p>Lorem ipsum Magna proident ex anim dolor ullamco pariatur
reprehenderit culpa esse enim
mollit labore dolore voluptate ullamco et ut sed qui
minim.</p>
<p>Lorem ipsum Magna proident ex anim dolor ullamco pariatur
reprehenderit culpa esse enim
mollit labore dolore voluptate ullamco et ut sed qui
minim.</p>
<p>Lorem ipsum Magna proident ex anim dolor ullamco pariatur
reprehenderit culpa esse enim
mollit labore dolore voluptate ullamco et ut sed qui
minim.</p>
76
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
. عىل الحاوية للحصول عىل عمودين متساويين في االرتفاعdisplay: flex أواًل نُطبق القاعدة
CSS ملف •
.cards {
display: flex;
}
.card {
border: 1px solid #ccc;
margin: 10px 10px;
padding: 0 20px;
}
button {
height: 40px;
background: #fff;
padding: 0 40px;
border: 1px solid #000;
}p
:last-child {
text-align: center;
}
:النتيجة
77
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
وتحديد اتجاه الحاوية ليكون، للبطاقةdisplay: flex لدفع الزر إىل أسفل البطاقة يجب إضافة القاعدة
عىلmargin-top: auto وأخي ًرا نُطبق القاعدة،flex-direction: column عموديًا باستخدام القاعدة
النهائيCSS ملف •
.cards {
display: flex;
}
.card {
border: 1px solid #ccc;
margin: 10px 10px;
padding: 0 20px;
display: flex;
flex-direction: column;
}
button {
height: 40px;
background: #fff;
padding: 0 40px;
border: 1px solid #000;
}p
:last-child {
text-align: center;
margin-top: auto;
}
78
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
HTML ملف •
<div class="container">
<div style="background-color: red">
Some <br />
data <br />
to make <br />
a height <br />
</div>
<div style="background-color: blue">
Fewer <br />
lines <br />
</div>
</div>
CSS ملف •
.container {
display: flex;
align-items: stretch
}
:مثال
HTML ملف •
<section class="container">
79
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
><div class="item1">Item1</div
><div class="item2">Item2</div
><div class="item3">Item3</div
><div class="item4">Item4</div
></section
{ .container
;display: grid
}
يssؤدي تطssبيق الشssيفرة أعاله إىل تssرادف العناصssر فssوق بعضssها البعض ،لssذلك نحتssاج لتعريssف خاصssيات
إضافية هي:
{ .container
;display: grid
*/إنشاء ثلاثة أعمدة كل منها بعرض 50بكسل */
;grid-columns: 50px 50px 50px
*/إنشاء صفين كل منهما بإرتفاع 50بكسل */
;grid-rows: 50px 50px
}
ومن الممكن ً
أيضا تحديد تsرتيب العناصssر في التخطيssط الشssبكي عن طريssق الخاصssيتين grid-column
{ .container .item1
;grid-column: 1
;grid-row: 1
}
{ .container .item2
;grid-column: 2
;grid-row: 1
}
{ .container .item3
80
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
;grid-column: 1
;grid-row: 2
}
{ .container .item4
;grid-column: 2
;grid-row; 2
}
2.4.1الخاصية table-layout
تُسssتخدم الخاصssية table-layoutلتحديssد كيفيssة إنشssاء الجssدول ووضssع العناصssر بداخلssه ،وتأخذ
إحدى القيمتين:
:auto .1وتسمح للجدول بأخذ العرض الالزم لمنع طفحان المحتوى خارج الجدول.
:fixed .2وتُعطي الجدول العرض المحدد له بالخاصية widthفقط ،وال تسssمح لssه بالتمssدد ممssا يssؤدي
لطفحان المحتوى خارج الجدول في حال عدم وجود مساحة كافية له.
2.4.2الخاصية empty-cells
تحدد الخاصية empty-cellsما إذا كانت الخاليsا الفارغsة سsتُعرض أم ال ،وال يكssون لهsا أثsر ٌ إال إذا كssانت
قيمة الخاصية border-collapseهي ،separateوتأخذ إحدى القيمتين showوالتي تعني إظهssار الخاليssا
81
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
2.4.3الخاصية border-collapse
تحدد الخاصية border-collapseما إذا كان إطار الجدول منفصاًل عن إطار الخاليا (أي لكٍ s
sل واح ٍ sد منهssا
خاص به) أم أنه مدمج معها (أي تتشارك الخاليا المتجاورة اإلطار مع بعضها ً
بعضا) ،وتأخذ إحssدى القيمssتين ٌ إطارٌ
separateوالتي تفصل بين اإلطارات أو collapseوالتي تدمج إطارات الخاليا المتجاورة.
2.4.4الخاصية border-spacing
الخاصية border-spacingفي CSSتُحدِّد المسافة بين إطارات خاليا الجداول المتجاورة .لن يكون لهssذه
الخاصssية أث sر ٌ إال إذا كssانت قيمssة الخاصssية border-collapseهي .separateويمكن تحديssد المسssافات
األفقية والرأسية بين اإلطارات في آن واحد عن طريق تحديد قيمة واحsدة للخاصsية مثsل border-spacing:
،2pxأو تحديد قيمة مختلفة لكل واحدة عىل حدة مثssل ،border-spacing: 2px 4pxحيث تمثssل القيم
األوىل المسافة بين اإلطارات األفقية وتحدد القيمة الثانية المسافة بين اإلطارات الرأسية.
2.4.5الخاصية caption-side
المعرَّفssة عssبر العنصssر < ،>captionوتأخssذ إحssدى
تحدد الخاصية caption-sideموضع الفتة الجssدول ُ
القيمتين topوالتي تُضيف الالفتة أعىل الجدول أو bottomوالتي تُضيفها أسفل الجدول.
82
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
ارجع إىل توثيق تخطيط الجداول في موسوعة حسوب وراجع هذا المثال عىل .Codepen
المسsافات بين األزرار متسsاوية ،ويكsون للsزر األول فيsه هsامش أيمن فقsط (وأيسsر إذا كsانت الصsفحة باللغsة
العربية) ،وآلخر زر هامش أيسر فقط (وأيمن إذا كانت الصفحة باللغة العربية).
مثال:
><nav
><ul
><li>abc</li
><li>abcdefghijkl</li
><li>abcdef</li
></ul
></nav
{ nav
;width: 100%
;line-height: 1.4em
}
{ ul
;list-style: none
;display: block
;width: 100%
;margin: 0
83
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
;padding: 0
;text-align: justify
;margin-bottom: -1.4em
}
{ ul:after
;"" content:
;display: inline-block
;width: 100%
}
{ li
;display: inline-block
}
مالحظات:
.1استُعملت العناصر ،navو ulو liلمعناها الداللي فقط (عناصssر قائمssة التنقssل) ،ويمكن اسssتعمال أي
عناصر أخرى.
.2اسssتُخدمت قيمssة سssالبة مسssاوية لقيمssة ارتفssاع السssطر للخاصssية margin-bottomللتخلص من
.3إذا ت َّق لص عرض الصفحة لحد ال يسمح بأن تكون جميع العناصر في سطر واحد ،يتنقل جزء من العناصر
للسطر التالي.
2.6التوسيط Centering
>"<div class="container
><img src="http://lorempixel.com/400/200" /
></div
html,
84
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
body,
{ .container
;height: 100%
}
{ .container
;display: flex
*/التوسيط أفقيً ا *justify-content: center; /
}
{ img
*/التوسيط رأسيً ا *align-self: center; /
}
html,
{ body
;height: 100%
}
{ body
;display: flex
*/التوسيط أفقيً ا *justify-content: center; /
*/التوسيط رأسيً ا *align-items: center; /
}
كل المتصفحات الرئيسية تدعم حاوية ،flexعدا اإلصدارات التي تسبق اإلصدار العاشر من متصفح .IE •
بعض إصssدارات المتصssفحات ،مثssل Safari 8و ،IES10تتطلب اسssتخدام البssوادئ الخاصsssة بها •
.vendor prefixes
85
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
يمكن تعويض نقص دعم المتصفحات القديمة لحاوية flexبإضافة شيفرات خاصة. •
لمزيد من التفاصيل حول دعم المتصفحات لحاوية ،flexانظر هذه اإلجابة. •
زُر التوثيssق الرسssمي لحاويssة flexلمزيssد من المعلومssات حssول التوسssيط األفقي والرأسssي ،ومزيssد من
ً
مشوشsا ،وذلssك خذ في الحسبان أن استعمال هذه الطريقة قssد يssؤدي إىل ظهssور العنصssر المssراد توسssيطه
بسبب عرضه عىل بكسالت ذات قيم غير حقيقية (تحتوي عىل أرقام كسرية مثل .)5.6انظر هذه االجابة لمعرفssة
>"<div class="container
><div class="element"></div
></div
{ .container
;position: relative
}
{ .element
;position: absolute
;top: 50%
;left: 50%
;)transform: translate(-50%, -50%
}
86
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
بخصوص دعم المتصفحات ،تتطلب خاصية transformاسssتخدام البssوادئ لكي تُssدعم في المتصssفحات
Chrome<=35 •
Safari<=8 •
Opera<=22 •
معلومات إضافية:
يُحدد موضع العنصر وف ًقssا ألول أب غsير ثsابت ،أي قيمsة الخاصsية positionلssه هي relativeأو •
.transform:كssذلك left:و (translateX(-50% للتوسssيط أفق ًيssا فقssط ،اسssتعمل 50% •
استعمال عناصر ذات عرض أو ارتفاع غير ثssابت مssع طريقssة التوسssيط هssذه قssد يجعssل العنصssر المssراد •
مضغوطا .غالبًا ما يحدث هذا مع العناصssر الssتي تحتssوي عىل نصssوص ،ويمكن معالجتهssا
ً توسيطه يبدو
إذا كانت الصفحة باللغة العربية أو إحدى اللغات األخرى التي تُكتب من اليمين إىل اليسار rtlتستبدل القاعدة
87
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
<div class="containerDiv">
<div id="centeredDiv"></div>
</div>
<div class="containerDiv">
<p id="centeredParagraph">This is a centered paragraph</p>
</div>
<div class="containerDiv">
<img
id="centeredImage"
src="https://i.kinja-img.com/gawker-media/image/upload/s--
c7Q9b4Eh--/c_scale,fl_progressive,q_80,w_
800/qqyvc3bkpyl3mfhr8all.jpg"
/>
</div>
:CSS ملف •
.container {
width: 100%;
height: 100px;
padding-bottom: 40px;
}
#centeredDiv {
margin: 0 auto;
width: 200px;
height: 100px;
border: 1px solid #000;
}
#centeredParagraph {
width: 200px;
margin: 0 auto;
}
88
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
{ #centeredImage
;display: block
;width: 200px
;margin: 0 auto
}
النتيجة:
;text-align: center
><p>lorem ipsum</p
{ p
;text-align: center
}
89
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
والصور داخل العنصر األب لها ،وال يمكن استعمالها لتوسيط العناصر الكتلية.
>"<div class="parent
><img class="center" src="http://lorempixel.com/400/200" /
></div
{ .parent
;position: relative
;height: 500px
}
{ .center
;position: absolute
;margin: auto
;top: 0
;right: 0
;bottom: 0
;left: 0
}
ً
وعرضا ضمنيين مثل الصور إىل تحديد قيمتهما. تحتاج العناصر التي ال تمتلك ارتفا ًعا
يمكن ً
أيضا االطالع عىل المثال العملي التالي.Absolute Centering in CSS :
أو الموضع الذي يشغله العنصر باستخدام عدد من القيم مثل :البكسالت (نقاط الشاشة) ،النسب المئوية …الخ.
انتبه ،عند استخدام هذه الدالة ،يجب مراعاة المسافة بين القيمتين (. calc(100% - 80px
90
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
><div class="center"></div
{ .center
;position: absolute
;height: 50px
;width: 50px
;background: red
*/الإرتفاع مقسوم على top: calc(50% - 50px / 2); /* 2
*/العرض مقسوم على left: calc(50% - 50px / 2); /* 2
}
{ div
;height: 200px
;line-height: 200px
}
قد ال يبدو ذلك أني ًقا ،ولكن قد يكون مفيد إذا أردت توسيط النص رأس ًيا داخل عنصر < .>input /خاصية
line-heightتعمل فقط إذا كان النص المراد توسيطه من سطر واحد ،ولكن إذا كان أكثر من سطر لن يكssون
الناتج في الوسط.
{ div.vertical
;position: relative
;top: 50%
;)transform: translateY(-50%
91
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
:HTML ملف •
.عرض النتيجة
ً
نسبة لعنرص آخر التوسيط2.7.1
.ستتعلم في هذا القسم كيفية توسيط المحتوى استنادًا إىل ارتفاع عنصر مجاور
:HTML ملف •
<div class="content">
<div class="position-container">
<div class="thumb">
<img src="http://lorempixel.com/400/200" />
</div>
<div class="details">
<p class="banner-title">text</p>
<p class="banner-text">content content content content</p>
<button class="btn">button</button>
</div>
</div>
</div>
:CSS ملف •
.content * {
box-sizing: border-box;
}
.content .position-container {
display: table;
}
.content .details {
display: table-cell;
92
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
;vertical-align: middle
;width: 33.33333%
;padding: 30px
;font-size: 17px
;text-align: center
}
{ .content .thumb
;width: 100%
}
◦ width
◦ display: table-cell
◦ vertical-align: middle
يجب أن تمتلssك الحاويssة .thumbالقاعssدة width: 100%إذا كنت تريssدها أن تأخssذ كssل المسssاحة •
يجب أن تكون الصورة (في حال كان لديك صssورة) داخssل الحاويssة .thumbويجب أن تمتلssك القاعssدة •
قم بإنشssاء عنصssر "شssبح" بارتفssاع %100داخssل الحاويssة الssتي تريssد توسssيطها ،ومن ثم طبssق القاعssدة
93
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
مالحظات:
.1يكون عرض الحاوية في بعض األحيان أقل من عرض العناصر الداخليssة لهssا ممssا يssؤدي إىل قص أجssزاء
.2يتسبب حرف المسافة الخاص بالعنصر الشبح في وجود فراغ بينه وبين الحاويssة .centeredللتخلص
من هذا الفراغ يمكن دفع الحاوية .centeredإىل اليمين (أو إىل اليسار في حالة الصssفحات العربيssة)
قلياًل (تعتمد المسافة التي يجب دفع الحاوية بها عىل نوع الخط المستخدم في الصssفحة) أو عن طريssق
94
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
تحديssد قيمssة صssفر لخاصssية font-sizeفي الحاويssة .parentومن ثم إعssادة تعيينssه في الحاويssة
..centered
مثال:
>"<div class="block
><div class="centered"></div
></div
2.7.3التوسيط أفق ًيا ورأس ًيا دون القلق بشأن ارتفاع وعرض العنرص
الطريقة التالية تمكنك من إضافة المحتوى إىل عنصssر HTMLو توسssيطه أفق ًيssا ورأس ً sيا دون القلssق بشssأن
ارتفاعه أو عرضه.
الحاويssة الخارجيssة يجب أن تمتلssك القاعssدة display: tableأمssا الحاويssة الداخليssة يجب أن تمتلك
القواعد التالية:
;display: table-cell
;vertical-align: middle
;text-align: center
صندوق المحتوى:
يجب إعادة ضبط محssاذاة النص ،مثال ً text-align-leftأو ،text-align: rightإال إذا كنت •
>"<div class="outer-container
>"<div class="inner-container
>"<div class="centered-content
!You can put anything here
></div
></div
></div
95
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
body {
margin: 0;
}
.outer-container {
position: absolute;
display: table;
width: 100%; /* This could be ANY width */
height: 100%; /* This could be ANY height */
background: #ccc;
}
.inner-container {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.centered-content {
display: inline-block;
text-align: left;
background: #fff;
padding: 20px;
border: 1px solid #000;
}
:HTML ملف •
<div class="wrap">
<img src="http://lorempixel.com/400/200" />
</div>
:CSS ملف •
96
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
.wrap {
height: 50px;
width: 100px;
border: 1px solid blue;
text-align: center;
}
.wrap:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
width: 1px;
}
img {
vertical-align: middle;
}
HTML ملف •
<div class="center">
Center vertically and horizontally
</div>
:CSS ملف •
.center {
position: absolute;
background: #ccc;
left: 50;
width: 150px;
97
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
top: 50%;
height: 200px;
margin-top: -100px; /* height * -0.5 */
}
.يمكنك توسيط العنصر أفق ًيا حتى إذا لم تكن تعرف ارتفاع محتواه
:HTML ملف •
<div class="container">
Center only horizontally
</div>
:CSS ملف •
.center {
position: absolute;
background: #ccc;
left: 50%;
width: 150px;
margin-left: -75px; /* width * -0.5 */
}
.يمكنك توسيط العنصر رأس ًيا إذا كنت تعرف فقط ارتفاعه
:HTML ملف •
<div class="center">
Center only vertically
</div>
:CSS ملف •
98
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
{ .center
;position: absolute
;background: #ccc
;top: 50%
;height: 200px
margin-top: -100px; /* width * -0.5 */
}
قاعدة margin-top: autoو margin-bottom: autoتُحسب القيم المستخدمة لها كأصفار. •
قاعدة margin-top: -50%يتم حساب قيمة الهامش عىل أساس النسبة المئويssة بالنسبة لعssرض •
للحصول عىل دعم أغلب المتصفحات ،هناك حل بديل باستخدام العناصر المساعدة:
>"<div class="vcenter--container
>"<div class="vcenter--helper
>"<div class="vcenter--content
><!-- stuff --
></div
></div
></div
{ .vcenter--container
;display: table
;height: 100%
;position: absolute
;overflow: hidden
;width: 100%
99
مالحظات للعاملين بلغة CSS تخطيط الصفحة وضبط محاذاة العناصر
}
{ .vcenter--helper
;display: table-cell
;vertical-align: middle
}
{ .vcenter--content
;margin: 0 auto
;width: 200px
}
مالحظات:
>"<div class="wrapper
>"<div class="parent
><div class="child"></div
></div
></div
{ .wrapper
;display: table
;vertical-align: center
;width: 200px
;height: 200px
100
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
background-color: #9e9e9e;
}
.parent {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.child {
display: inline-block;
vertical-align: middle;
text-align: center;
width: 100px;
height: 100px;
background-color: teal;
}
تعملها إال إذاssدة و يجب أاَّل تسssة جيssد ممارسssا ال تُعssة إال أنهssذه الطريقssهولة هss بالرغم من بساطة وس،انتبه
HTML ملف •
<div class="wrapper">
<div class="content"></div>
</div>
CSS ملف •
.wrapper{
min-height: 600px;
}
.wrapper:before{
content: "";
display: inline-block;
101
CSS مالحظات للعاملين بلغة تخطيط الصفحة وضبط محاذاة العناصر
height: 100%;
vertical-align: middle;
}
.content {
display: inline-block;
height: 80px;
vertical-align: middle;
}
102
.3النموذج الصندوقي Box Model
ً
صندوقا معينًا. يسمى محيط كل مساحة من المساحات األربع ُمحدِّد ،كل ُمحدِّد يحدد
يُسمى المستطيل الداخلي صندوق المحتوى ،content-boxيعتمد عرض وارتفاع هssذا الصssندوق عىل •
المستطيل التالي هو صندوق الحواشssي ،padding-boxويُع sرَّف بخاصssية الحاشssية .paddingإذا لم •
يتم تحديد عرض الحاشية ،تكون حافة الحاشية مطابقة لحافة صندوق المحتوى.
يلي ذلك صندوق اإلطارات ،ويُعرَّف بخاصssية اإلطssار .borderإذا لم يُحssدد عssرض اإلطssار ،تكssون حافssة •
المستطيل الخارجي هو صندوق الهوامش ،ويُعرَّف بخاصية الهامش .marginإذا لم يتم تحديssد عssرض •
مثال:
{ div
;border: 5px solid red
;margin: 50px
;padding: 20px
}
هذه الشيفرة تنشئ إطا ًرا بعsرض 5بكسssالت لحssواف العنصssر األربsع لكssل عناصssر divفي صssفحة ،HTML
وكذلك تضيف هوامش بعرض 50بكسل و حواشي بعرض 20بكسل في االتجاهات األربعة .بتجاهل المحتssوى،
104
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
بما أنه ال يوجد محتوى ،سيكون صندوق المحتوى (الصندوق األزرق في الوسط) بدون عssرض أو ارتفssاع •
بشكل ابتدائي يكون صندوق الحواشي بنفس مساحة صندوق المحتوى ،باإلضافة إىل عssرض الحواشssي •
صندوق اإلطارات له نفس مسsاحة صsندوق الحواشsي ،باإلضssافة إىل 5بكسssالت تمثssل عsرض اإلطssار •
أخيرًا ،صندوق الهssوامش لssه نفس مسssاحة صssندوق الحواشssي باإلضssافة إىل 50بكسssل تمثssل عssرض •
الهوامش في الحواف األربع .وتكون مساحة صندوق العنصر الكلية ( 150بكسل × 150بكسل).
إذا أضفنا أخًا للعنصر الحالي بنفس األنماط فسينظر المتصفح للنمssوذج الصssندوقي للعنصssرين ليحssدد أين
يفصل بين محتوى العنصرين مسافة 150بكسل ،لكن النماذج الصندوقية لهما متالمسة.
إذا عدلنا العنصر األول وحذفنا الهامش األيمن ،فسيكون حد صندوق الهوامش األيمن مطابق لحد صssندوق
105
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
حواشي أو إطارات للعنصر يصبح االرتفاع والعssرض المحssددين ال يمثالن االرتفssاع والعssرض الحقيقssيين للعنصssر
{ textarea
;width: 100%
;padding: 3px
box-sizing: content-box; /* default value */
}
بما أن الحواشي ستضاف لعرض العنصر ،textareaيصبح عرض العنصر الناتج أكبر من .%100
لحسن الحظ ،تمكننا CSSمن تعديل النموذج الصsندوقي للعنصsر باسssتخدام خاصsية box-sizingالssتي
الوصف المعامل
عرض وارتفاع العنصر يتضمن فقط مساحة المحتوى دون الحاشية واإلطار. content-box
عرض وارتفاع العنصر يتضمن مساحة المحتوى والحاشية فقط باستثناء اإلطار padding-box
106
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
لحssل مشssكلة عنصssر textareaفي المثssال السssابق ،يمكن تغيssير قيمssة الخاصssية box-sizingإىل
{ textarea
;width: 100%
;padding: 3px
;box-sizing: border-box
}
لتطبيق نموذج صندوقي معين لكل العناصر في صفحة HTMLيمكن استعمال الشيفرة التالية:
{ html
;box-sizing: border-box
}
في هssذه الشssيفرة ،ال تطبssق الخاصssية ; box-sizing: border-boxمباشssرة عىل كssل العناصssر (*)،
ل عىل حدة.
بالتالي يمكنك بسهولة استبدالها في العناصر ك ٌّ
3.3الهوامش Margins
يوضح الجدول التالي القيم التي يمكن استعمالها مع خاصية الهامش :margin
107
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
الوصف المعامل
يحذف جميع الهوامش الخاصة بالعنصر. 0
ولكن عندما يتالمسان أفق ًيا ال يحدث تداخل ويكون عرض الهامش الناتج مساويًا لمجموع عرض الهامشين.
{ div
;margin: 10px
}
><div
some content
></div
><div
some more content
></div
{ span
;margin: 10px
}
108
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
><span>some</span><span>content</span
وتكون المسافة األفقية بين العنصرين 20بكسل ،أي أنها تساوي مجموع الهوامش األفقية للعنصرين.
{ .top
;margin: 10px
}
{ .bottom
;margin: 15px
}
>"<div class="top
some content
></div
>"<div class="bottom
some more content
></div
وتكون المسافة الرأسية بين العنصرين 15بكسل ،وذلك ألن الهوامش المتداخلة تأخذ أبعاد الهامش األكبر.
{ .outer-top
;margin: 10px
}
{ .inner-top
;margin: 15px
}
{ .outer-bottom
;margin: 20px
}
{ .inner-bottom
;margin: 25px
}
109
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
>"<div class="outer-top
>"<div class="inner-top
some content
></div
></div
>"<div class="outer-bottom
>"<div class="inner-bottom
some more content
></div
></div
بما أنَّ جميع الهوامش متداخلة ،تكون المسافة بين النصين 25بكسل.
{ div
;border: 1px solid red
}
عند إضافة إطارات حول العناصssر كمssا في المثssال السssابق ،تصssبح المسssافة بين النصssين 59بكسssل وهي
مجموع مساحات الهوامش باإلضافة ألربعة بكسالت تمثل مجموع اإلطارات حssول الحاويssات األربعssة .ال يحssدث
التداخل في هذه الحالة ألن الهوامش أصبحت غير متالمسة إذ يفصل اإلطار بينها.
><h1>Title</h1
><div
><p>Paragraph</p
></div
{ h1
;margin: 0
;background-color: #cff
}
110
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
{ div
;margin: 50px 0 0 0
;background: #cfc
}
{ p
;margin: 25px 0 0 0
;background: #cf9
}
في المثال أعاله ،تكون المسافة الرأسية بين عنصر العنوان الرئيسي h1وعنصssر الفقssرات pهي 50بكسssل
(مساحة الهامش األكبر) ،قد تتوقع أن تكون المسافة بينهما 75بكسssل (ألن الحاويssة divلssديها هssامش علssوي
بارتفssاع 50بكسssل وعنصssر الفقssرات pلديssه هssامش علssوي بارتفssاع 25بكسssل) ،لكن ال يحssدث هssذا بسssبب
تداخل الهوامش.
margin-left
margin-right
margin-top
margin-bottom
ً
هامشا أيسر بعرض 30بكسل للحاوية .#myDiv الشيفرة أدناه تُضيف
><div id="myDiv"></div
{ #myDiv
;margin-left: 30px
;height: 40px
;width: 40px
;background-color: red
}
111
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
ً
وهامشا للحافssة ً
هامشا للحافة العليا بارتفاع صفر بكسل (أي ال يوجد هامش علوي)، الشيفرة التالية تُضيف
ً
وهامشsا للحافssة ال ُيسsرى بعssرض السsفلي بارتفssاع 50بكسssل، ً
وهامشsا للحافssة ُ ال ُيمssنى بعssرض 10بكسssالت،
100بكسل.
><div id="myDiv"></div
{ #myDiv
;margin: 0 10px 50px 100px
;height: 40px
;width: 40px
;background-color: red
}
{ p
;margin: 1px
;margin: 1px 1px
;margin: 1px 1px 1px
;margin: 1px 1px 1px 1px
مثال آخر:
{ p
;margin: 10px 15px
;margin: 10px 15px 10px 15px
;margin 10px 15px 10px
112
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
;>margin: <all
;>margin: <top and bottom> <left and right
;>margin: <top> <left and right> <bottom
;>margin: <top> <right> <bottom> <left
{ #myDiv
;width: 80%
;margin: 0 auto
}
استخدمنا في المثال أعاله الصياغة المختزلة لكتابة الخاصية marginإلضافة هssوامش بعssرض صssفر أعىل
وأسفل العنصر (يمكن أن تكون أي قيمة أخرى) ومن ثم استعملنا القيمة autoإلضافة هوامش متسssاوية يمين
ويسار العنصر وبالتالي توسيطه أفق ًيا .عرض العنصر #myDivهssو %80من عssرض الحاويssة الخارجيssة لssه ،ممssا
يترك %20من مساحة الحاوية فارغة .عند تحديد القيمة autoلخاصية marginيُ َوزِّ ع المتصفح هذه المسssاحة
بالتساوي عىل يمين ويسار العنصر ،أي تكون المسافة عىل كل جانب .%10
ً
نسsبة إىل العنصssر األب .هsذا االفsتراض مثال ،من الشائع افتراض أن تحديsد قيم نسsبية للهsوامش يكssون
صssحيح بالنسssبة للهssوامش األفقيssة margin-leftو .margin-rightحيث يكssون عssرض الهssامش نسssب ًيا
{ .parent
;width: 500px
;height: 300px
}
{ .child
;width: 100px
113
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
;height: 100p
margin-left: 10%; /* parentWidth * 10/100 => 50px */
}
الهامش الرأسي يكون نسب ًيا من عرض العنصر األب وليس من ارتفاعه كما يظن البعض.
{ .parent
;width: 500px
;height: 300px
}
{ .child
;width: 100px
;height: 100px
;margin-left: 10%
;margin-top: 20%
}
3.3.5الهوامش السالبة
يمكن استعمال الهوامش السالبة إلنشاء عناصر متداخلة دون الحاجة الستعمال الموضع المطلق.
{ div
;display: inline
}
{ #over
;margin-left: -20px
}
><div>Base div</div
><div id="over">Overlapping div</div
114
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
3.4الحوايش Paddings
مساحة الحاشية هي المساحة بين محتوى العنصر واإلطار الخارجي له ،وتُحدد باستخدام خاصية .padding
يمكنك استعمال الصياغة المختزلة الموضحة في المثال أدناه من تعريف مساحات الحواشي للعنصssر بssداًل
عن تحديد مساحة الحاشية لكل حافة من حواف العنصر األربع بخاصية منفردة (عن طريق استخدام padding-
><style
{ .myDiv
padding: 25px 50px 75px 100px; /* top right bottom left; */
}
></style
><div class="myDiv"></div
><style
{ .myDiv
padding: 25px 50px 75px; /* top left/right bottom; */
}
></style
><div class="myDiv"></div
><style
{ .myDiv
padding: 25px 50px; /* top/bottom left/right; */
115
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
}
></style
><div class="myDiv"></div
><style
{ .myDiv
padding: 25px; /* top/right/bottom/left; */
}
></style
><div class="myDiv"></div
><style
{ .myClass
;padding-top: 5px
}
></style
><div class="myClass"></div
116
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
3.5اإلطارات Borders
تُعرِّف المجموعة األوىل من القيم اإلنحاء األفقي لإلطار بينما تُعرِّف المجموعة الثانيssة االختياريssة (المسssبوقة
بعالمssة )/اإلنحssاء الرأسssي لssه .في حssال وجssود مجموعssة واحssدة فقssط فإنهssا تُسssتخدم لتعريssف االنحنssاءات
األفقية والرأسية.
تُحدِّد القيمة 10pxاإلنحاء األفقي لإلطار من أعىل اليسار وأسssفل اليمين ،بينمssا تح sدِّد القيمssة %5اإلنحssاء
األفقي من أعىل اليمين وأسفل اليسار .تُح sدِّد األربssع قيم المسssبوقة بعالمssة /اإلنحssاء الرأسssي لإلطssار من أعىل
><div class='box'></div
{.box
;width:250px
;height:250px
;background-color:black
;border-radius:10px
}
117
CSS مالحظات للعاملين بلغة Box Model النموذج الصندوقي
ريssكل دائssر لشss استخدامها لتحويل صندوق العنصborder-radius من االستخدامات الشائعة لخاصية
.circle{
width:200px;
height:200px;
border-radius:100px;
}
. لتجنُّب حسابها يدويًاborder-raduis من الشائع استخدام نسب مئوية لتحديد قيمة خاصية
.circle{
width:150px;
height:150px;
border-radius:50%;
}
.يصبح شكل صندوق العنصر بيضاويًا في حال اختالف قيمتي االرتفاع والعرض
{
-webkit-border-top-right-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
-webkit-border-bottom-left-radius: 0;
-webkit-border-top-left-radius: 0;
-moz-border-radius-topright: 4px;
-moz-border-radius-bottomright: 4px;
-moz-border-radius-bottomleft: 0;
-moz-border-radius-topleft: 0;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
118
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
والسفلي) ويمكن أن تأخذ من قيمة واحدة إىل أربع قيم ،تُحدد ك ٌّ
ل منها شكل خط اإلطار ألحد الحواف.
مثال:
;border-style: dotted
;border-style: dotted solid double dashed
و بشكل عام يُحدَّد شكل خط اإلطار لحواف العنصر حسب الترتيب التالي:
*/القيمة الواحدة تحدد شكل خط الإطار لجميع الأوجه *border-style: <ALL>; /
;>border-style: <top> <right> <bottom> <left
يمكن أن تأخsssذ خاصsssية border-styleالقيم noneأو hiddenولهمsssا نفس التsssأثير ،إاَّل أن hidden
مع إطارات خاليا الجدول حيث تُخفي اطارات الخاليا .بينما noneتسsبب في تsداخل اإلطsارات المتالمسsة
{.div1
;border: 3px solid black
;outline: 6px solid blue
119
CSS مالحظات للعاملين بلغة Box Model النموذج الصندوقي
width: 100px;
height: 100px;
margin: 20px;
}
:box-shadow استخدام
.div2{
border: 5px solid green;
box-shadow: 0px 0px 0px 4px #000;
width: 100px;
height: 100px;
margin: 20px;
}
.div3 {
position: relative;
border: 5px solid #000;
width: 100px; height: 100px;
margin: 20px;
}
.div3:before {
content: " ";
position: absolute;
border: 5px solid blue;
z-index: -1; top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
}
:النتيجة
120
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
و ،border-styleو border-colorلكل أوجه العنصر ،يُمكنك في هذه الحاالت استعمال الصياغة المختزلة
ً
عوضا عن كتابة:
;border-width: 1px
;border-style: solid
;border-color: #000
يمكنك كتابة:
121
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
يمكن استعمال هذه الطريقة إلنشاء إطار في اتجاه محدد ،عىل سبيل المثال تُنشيء الشssيفرة التاليssة إطssا ًرا
display: tableأو ،)display: inline-tableوتحدد مsا إذا كsان إطsار الجsدول منفصsاًل عن إطsار
الخاليا أم أنه ُمدمج معها (أي تتشارك الخاليا المتجاورة اإلطار مع بعضها البعض).
{ table
border-collapse: separate; /* default */
*/تضيف فراغ بين الإطارات المتلامسة *border-spacing: 2px; /
}
3.5.6خاصية border-image
سهِّل عملية إنشاء إطsارات ذات مظهsر مخصsص.
تسمح هذه الخاصية برسم صورة عىل إطار العنصر ،مما يُ َ
:border-image-sliceتُ ِّ
قسم الصورة المحددة عبر الخاصية border-image-sourceإىل تسع •
:border-image-repeatتُعرِّف كيفية عرض الجزء األوسssط من الصssورة لكي تُطssابق أبعssاد اإلطssار. •
ويمكن استخدام قيمة واحدة لهذه الخاصية لضبط سلوك جميع الحواف ،أو يمكن تحديد قيمتين لضبط
122
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
تُ َّ
قسم الصورة في المثال أعاله لتسع مناطق كssل واحssدة بحجم 30بكسssل × 30بكسssل .وتسssتخدم حssواف
الصورة كأركان لإلطار والجوانب األربعة لها تُمثل أوجه اإلطار .وتتمدد الصورة لتُغطي كل العنصssر في حssال زيssادة
ارتفاعه عن 30بكسل.
{ .bordered
border-image: linear-gradient(to right, red 20%, green 20%, green
*40%, blue 40%, blue 60%, maroon 60%, maroon 80%, chocolate 80%); /
gradient with required colors */
;border-image-slice: 1
}
يرسم المثال أعاله إطا ًرا مكون من 5ألوان ُعرِّفت باستخدام التدرج الخطي ( linear-gradientيمكنssك
الم الحظ أن لإلطار لون واحد فقط في االتجاهين األيمن واأليسر من الصندوق ،وذلك يرجع للطريقة التي
من ُ
تعمل بها الخاصية border-imageوهي تطبيق التدرج اللوني عىل كssل الصssندوق ومن ثم إخفssاء الصssورة من
تُحدَّد االتجاهات التي تأخذ اللون الواحد عبر تعريف التssدرج اللssوني ،إذا كssان التssدرج من اليسssار إىل اليمين
يأخذ اإلطار األيسر أول لون في التدرج بينما يأخذ اإلطار األيمن آخssر لssون في التssدرج .وإذا كssان التssدرج من أعىل
ألسفل يأخذ اإلطار العُ لوي أول لون في التدرج بينما يأخذ اإلطار السفلي آخر لون في التدرج.
123
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
إذا كان المطلوب إضافة إطار باتجاه واحد فقssط ،يمكن اسssتخدام خاصssية border-widthوتحديssد قيمssة
ال يمكن تدوير إطارات العناصر التي تمتلك خاصية ،border-imageواستخدام خاصية border-radiusمعها
{ #element
;border-left: 1px solid black
}
الصندوقي ،وبالتالي ال تؤثر عىل موضع العنصر أو بقية العناصر في الصفحة .ويوضح الجدول التssالي المعssامالت
124
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
التفاصيل المعامل
خط حد ُمن َّقط dotted
خط حد مموج ثالثي األبعاد ،يتعمد عىل قيمة لون خط الحد outline-color groove
خط حد ثالثي األبعاد ،يعتمد عىل قيمة لون خط الحد outline-color ridge
خط حد داخلي ثالثي األبعاد ،يعتمد عىل قيمة لون خط الحد outline-color inset
خط حد خارجي ثالثي األبعاد ،يعتمد عىل قيمة لون خط الحد outline-color outset
تأخذ في بعض المتصفحات حدود العنصر شكال ً آخر غير المستطيل ،غالبًا ما يحدث هذا عند تطبيق خاصية
outlineعىل عنصر spanيحتوى عىل نصوص ذات أحجام خssط مختلفssة .وعىل عكس اإلطssارات ،borderال
عىل الرغم من التشابه بين حدود العنصر واإلطارات في تأثيرهما وطريقة إنشائهما ،إاَّل أنهما خاصيتين مختلفتين
تماما.
ً
3.6.1خاصية outline-style
تحدد هذه الخاصية شكل حدود العنصsر ويمكن أن تأخsذ أيًsا من القيم الموضsحة في الجsدول الموضssح في
{p
;border:1px solid black
;outline-color:blue
;line-height:30px
}
125
CSS مالحظات للعاملين بلغة Box Model النموذج الصندوقي
.p1{
outline-style:dotted;
}
.p2{
outline-style:dashed;
}
.p3{
outline-style:solid;
}
.p4{
outline-style:double;
}
.p5{
outline-style:groove;
}
.p6{
outline-style:ridge;
}
.p7{
outline-style:inset;
}
.p8{
outline-style:outset;
}
:HTML ملف •
:النتيجة
126
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
3.7الخاصية overflow
تأخذ الخاصية overflowإحدى القيم التالي:
الوصف المعامل
تُظهر المحتوى الفائض عن حجم العنصر دون اقتصاص. visible
اقتصاص المحتوى الفائض عن حجم العنصر دون إظهار شريط تمرير .scroll bar hidden
اقتصاص المحتوى الفائض عن حجم العنصر مع إظهار شريط تمرير .scroll bar scroll
نفس عمل ،scrollلكنها ال تضيف شريط التمرير scroll barفي حالة كان حجم المحتوى أقل
auto
من أو يساوي حجم الحاوية.
3.7.1خاصية overflow-wrap
تُخبر الخاصية overflow-wrapالمتصفح أنّ بإمكانssه تقسssيم النصssوص والكلمssات الطويلssة عىل عssدد من
األسطر لمنعها من تجاوز حدود صندوق المحتوى وتأخذ إحدى القيم التالي:
الوصف المعامل
تسمح للكلمة بالخروج من الحاوية إذا كانت أطول منها. normal
تقسم الكلمة عىل عدد من األسطر إذا كانت أطول من الحاوية. break
127
CSS مالحظات للعاملين بلغة Box Model النموذج الصندوقي
:CSS ملف •
div {
width: 100px;
outline: 1px dashed #bbb;
}
#div1 {
overflow-wrap: normal;
}
#div2 {
overflow-wrap: break-word
}
:HTML ملف •
<div id="div1">
<strong>#div1</strong>: Small words are displayed normally but a
word like <span style="red;">supercalifragilisticexpialidocious</span>
is too long so it will overflow past the edge of the line-break
</div>
<div id="div2">
<strong>#div2</strong>: Small words are displayed normally, but
a long word like <span
style="red">supercalifragilisticexpialidocious</span> will be split at
the line break and continue on the next line.
</div>
:النتيجة
128
CSS مالحظات للعاملين بلغة Box Model النموذج الصندوقي
:HTML ملف •
<div id="div-x">
If this div is too small to display its contents,
the content to the left and right will be clipped
</div>
<div id="div-y">
If this div is too small to display its contents,
the content to the top and bottom will be clipped
</div>
:CSS ملف •
div {
width: 200px;
height: 200px;
}
#div-x {
overflow-x: hidden;
}
129
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
{ #div-y
;overflow-y: hidden
}
><div
This div is too small to display its contents to display the
effects of the overflow property.
></div
{ div
;width: 100px
;height: 100px
;overflow: scroll
}
النتيجة:
في المثال أعاله ،مساحة الحاوية أقل من مساحة المحتوى مما يssؤدي إىل اقتصاصssه وإظهssار شssريط تمريssر
130
مالحظات للعاملين بلغة CSS النموذج الصندوقي Box Model
><div
Even if this div is too small to display its content, the
content is not clipped
></div
{ div
;width: 50px
;height: 50px
;overflow: visible
}
النتيجة:
الحssظ عssدم اقتصssاص المحتssوى عنssد اسssتعمال القاعssدة overflow: visibleوإنمssا يمتssد خssارج
صندوق المحتوى.
131
CSS مالحظات للعاملين بلغة Box Model النموذج الصندوقي
:مثال
:CSS ملف •
img {
float: left;
margin-right: 10px;
}
div {
overflow: hidden; /* * ًتنشيء سياق جديد لتنسيق العناصر الكتلية/
}
:HTML ملف •
<img src="http://placehold.it/100*100">
<div>
<p>lorem ipsum dolor sit amet, cum no paulo mollis
pertinácia.</p>
<p>Ad case omnis nam, mutat deseruisse perseqeris eos ad, in
tollit debitis sea.</p>
</div>
:النتيجة
132
.4التحكم في تموضع العنارص
تأخذ الخاصية positionالتي تضبط موضع العنصر في الصفحة القيم الموضحة في الجدول التالي والتي
الوصف المعامل
تعرض العناصر بنفس ترتيبها كتابتها عىل ملف .HTML static
لموضعه األصلي.
ِ ً
نسبة relativeتُحدد موضع العنصر
ً
نسبة لنافذة المتصفح. تُحدد موضع العنصر fixed
موضع نسبي.
ِ ً
نسبة أل َّول عنصر ذي absoluteتُحدد موضع العنصر
تُ ِ
رجع القيمة االبتدائية للخاصية. initial
عامل العنصر كما لو أنَّه ذو موضع نسبي relativeوبعد تجاوز حد مع ّين من التمرير ألسفل
يُ َ
sticky
عامل عىل أنه ذو موضع ثابت .fixed
فس ُي َ
الموضع ُ
المطلق Absolute Position ِ 4.1
عند استخدام الموضع المطلق ،يُزال العنصر من البنية التنظيمية للصفحة ،وال يُحجَز له مكانٌ في تخطيطها،
ً
نسبة إىل أقرب عنصر له موضع نسبي ،أو إىل العنصر < ،>bodyويمكن التحكم في موضssعه وإنما يُحدد موضعه
مثال:
مالحظات للعاملين بلغة CSS التحكم في تموضع العناصر
{ .abspos
;position: absolute
;top: 0px
;left: 500px
}
و bottomو ،leftومن االستخدامات الشائعة للموضع الثابت استخدامه لتثبيت العنصر في مكانه عند تمرير
الصفحة ألسفل.
مثال:
{ #stickyDiv
;position: fixed
;top: 10px
;left: 10px
}
الخواص topو rightو bottomو leftوال تؤثر هذه اإلزاحة عىل مواضع بقية العناصر.
مثال:
{ .relpos
;position: relative
;top: 20px
;left: 30px
}
134
مالحظات للعاملين بلغة CSS التحكم في تموضع العناصر
مثال:
{ .element
;position: static
}
4.5خاصية z-index
القيمة األكبر للخاصية z-indexفي األعىل ويليه العنصر ذو القيمة األقل مباشرة وهكذا.
مثال:
><div id="div1"></div
><div id="div2"></div
><div id="div3"></div
{ div
;position: absolute
;height: 200px
;width: 200px
}
{ div#div1
;z-index: 1
;left: 0px
;top: 0px
;background-color: blue
}
{ div#div2
;z-index: 2
;left: 100px
;top: 100px
135
مالحظات للعاملين بلغة CSS التحكم في تموضع العناصر
;background-color: green
}
{ div#div3
;z-index: 3
;left: 50px
;top: 150px
;background-color: red
}
النتيجة:
حيث:
[ :]numberعدد صحيح يمثل ترتيب العنصر عىل المحور .Z •
يمكنك الرجوع إىل توثيق الخاصية z-indexعىل موسوعة حسوب لمزيد من التفاصيل.
136
مالحظات للعاملين بلغة CSS التحكم في تموضع العناصر
من المهم مالحظة أن العنصرين div #4و div #5و div #6هم أبناء للعنصر div #3لssذلك يُنشssأ
سياق التطبيق لهم بالنسبة له ،وبعد ذلك ينشأ سياق التطبيق العام للصفحة .مثال:
>"<div id="div1
><h1>Division Element #1</h1
><code>position: relative;<br/
>z-index: 5;</code
></div
>"<div id="div2
><h1>Division Element #2</h1
><code>position: relative;<br/
>z-index: 2;</code
></div
137
CSS مالحظات للعاملين بلغة التحكم في تموضع العناصر
<div id="div3">
<div id="div4">GoalKicker.com – CSS Notes for Professionals 210
<h1>Division Element #4</h1>
<code>position: relative;<br/>
z-index: 6;</code>
</div>
<h1>Division Element #3</h1>
<code>position: absolute;<br/>
z-index: 4;</code>
<div id="div5">
<h1>Division Element #5</h1>
<code>position: relative;<br/>
z-index: 1;</code>
</div>
<div id="div6">
<h1>Division Element #6</h1>
<code>position: absolute;<br/>
z-index: 3;</code>
</div>
</div>
CSS ملف •
* {
margin: 0;
}
html {
padding: 20px;
font: 12px/20px Arial, sans-serif;
}
div {
opacity: 0.7;
position: relative;
}
h1 {
font: inherit;
font-weight: bold;
138
CSS مالحظات للعاملين بلغة التحكم في تموضع العناصر
}
#div1,
#div2 {
border: 1px dashed #696;
padding: 10px;
background-color: #cfc;
}
#div1 {
z-index: 5;
margin-bottom: 190px;
}
#div2 {
z-index: 2;
}
#div3 {
z-index: 4;
opacity: 1;
position: absolute;
top: 40px;
left: 180px;
width: 330px;
border: 1px dashed #900;
background-color: #fdd;
padding: 40px 20px 20px;
}
#div4,
#div5 {
border: 1px dashed #996;
background-color: #ffc;
}
#div4 {
z-index: 6;
margin-bottom: 15px;
padding: 25px 10px 5px;
}
#div5 {
139
CSS مالحظات للعاملين بلغة التحكم في تموضع العناصر
z-index: 1;
margin-top: 15px;
padding: 5px 10px;
}
#div6 {
z-index: 3;
position: absolute;
top: 20px;
left: 180px;
width: 150px;
height: 125px;
border: 1px dashed #009;
padding-top: 125px;
background-color: #ddf;
text-align: center;
}
140
.5تنسيق القوائم وإضافة الظالل ورسم
األشكال
5.1تنسيق القوائم
يوضح الجدول التالي الخاصيات المستعملة في تنسيق القوائم مع وصفها:
الوصف المعامل
تُحدد شكل أو نوع مؤشر القائمة ،ويمكن أن تأخذ القيم discأو circleأو
squareأو decimalأو lower-romanأو upper-romanأو .none list-style-type
انظر توثيقها لمعرفة جميع القيم المتاحة.
يمكنك الرجوع إىل قسم القوائم في توثيق CSSالرسمي العربي لمزيد من التفاصيل.
مثال:
{ li
;list-style-type: square
}
{ li
)'list-style-image: url('images/bullet.png
}
مالحظات للعاملين بلغة CSS تنسيق القوائم وإضافة الظالل ورسم األشكال
{ li
;list-style-position: inside
}
به ،وتؤثر هذه الهوامش والحواشي عىل موضع محتssوى عنصssر القائمssة < ،>liوبمssا أن المتصssفحات المختلفssة
تضيف هوامش وحواشي بمساحات مختلفة مما يؤدي إىل اختالف شكل الصفحة حسب المتصفح الذي تُعرض
فيه ،لذلك البد من إعادة ضبط هذه المساحات يدويًا .لكل عنصر من عناصssر القائمssة صssندوق يُسssمى صssندوق
المؤشر marker boxيوضع بداخلة مؤشر عناصر القائمة ،ويمكن أن يكون هذا الصندوق داخل أو خارج صندوق
;list-style-position: insde
;list-style-position: outside
><ul
><li>first item</li
><li>second item</li
></ul
{ ul
;list-style-type: none
}
142
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
li {
margin: 0;
padding: 0;
}
َّ تنسيق الع5.1.4
Counters دادات
:يوضح الجدول التالي ما يتعلق بخاصيات تنسيق العدادات
الوصف المعامل
.اسم العداد counter-name
. أو القيمة التي سيزيد العداد بمقدارها،(اختياري) يُظهر القيمة االبتدائية للعداد integer
143
مالحظات للعاملين بلغة CSS تنسيق القوائم وإضافة الظالل ورسم األشكال
الوصف المعامل
القيمة االبتدائية لجميع خاصيات العداد. none
تُحدد العالمة أو النص الذي س ُيعرض بين قيم العداد ،عالمة النقطة ( ).في 2.1.1
connector-string
مثاًل .
{ body
;counter-reset: item-counter
}
{ .item
;counter-increment: item-counter
}
{ .item:before
;" content: counter(item-counter, upper-roman) ".
}
في هذا المثال ستُعرض قيم العداد باألرقام الرومانية (.)I، II، III
>'<div class='item
><div class='item-header'>Item 1 Header</div
><div class='item-content'>Lorem Ipsum Dolor Sit Amet....</div
></div
144
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
<div class='item'>
<div class='item-header'>Item 2 Header</div>
<div class='item-content'>Lorem Ipsum Dolor Sit Amet....</div>
</div>
<div class='item'>
<div class='item-header'>Item 3 Header</div>
<div class='item-content'>Lorem Ipsum Dolor Sit Amet....</div>
</div>
CSS ملف •
body {
counter-reset: item-counter; /* * إنشاء العداد/
}
.item {
counter-increment: item-counter; /* تزيد قيمة العداد لكل تكرار للصنفitem
*/
}
.item-header:before {
content: counter(item-counter) ". "; /* * طباعة قيمة العداد/
}
item {
border: 1px solid;
height: 100px;
margin-bottom: 10px;
}
.item-header {
border-bottom: 1px solid;
height: 40px;
line-height: 40px;
padding: 5px;
}
.item-content {
padding: 8px;
}
145
مالحظات للعاملين بلغة CSS تنسيق القوائم وإضافة الظالل ورسم األشكال
><ul
<li>Level 1
><ul
<li>Level 1.1
><ul
><li>Level 1.1.1</li
></ul
></li
></ul
></li
<li>Level 2
><ul
<li>Level 2.1
><ul
><li>Level 2.1.1</li
><li>Level 2.1.2</li
></ul
></li
></ul
></li
></ul
في هذا المثال استخدمنا مفهوم العدَّادات المتداخلة إلنشاء تssرقيم متعssدد المسssتويات ،الفكssرة األساسssية
للعدادات المتداخلة أنّه إذا كان للعنصر عدَّاد باسم معين وُأجبر عىل إنشاء عدَّاد آخر بنفس االسssم فإنssه س ُي ِ
نش sئه
في هذا المثال ،عنصر < >ulالثاني يssرث العssداد list-item-numberمن العنصssر األب ،ومن ثم عليssه
إنشاء عداد جديsد بنفس االسsم ألبنائsه ،وبالتsالي يُنشsئ العsداد [ list-item-number[1كفsر ع من العsداد
[ .list-item-number[0ولعرض النتيجة نستخدم الدالة () countersبداًل عن () counterألننا نمتلssك
146
مالحظات للعاملين بلغة CSS تنسيق القوائم وإضافة الظالل ورسم األشكال
الوصف المعامل
تؤدي إىل إنشاء ظالل داخل إطار العنصر. inset
كلما كبرت القيمة زاد تأثير الضبابية ،وبالتالي سيصبح الظل أكبر وأكشف لونًا، blur-radius
القيم الموجبة لها ستؤدي إىل جعل الظل يتوسع ويكبر ،والقيم السالبة ستجعل الظل
spread-radiusيتقلص ويصغر ،وإذا لم تُحدَّد هذه القيمة فستكون ( 0أي أنَّ قياس الظل سيبقى
كما هو).
><div class="box_shadow"></div
{ box_shadow
;background-color: #1C90F3
;width: 200px
;height: 100px
;margin: 50px
}
{ .box_shadow:after
;"" content:
;width: 190px
;height: 1px
;margin-top: 98px
147
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
margin-left: 5px;
display: block;
position: absolute;
z-index: -1;
-webkit-box-shadow: 0px 0px 8px 2px #444444;
-moz-box-shadow: 0px 0px 8px 2px #444444;
box-shadow: 0px 0px 8px 2px #444444;
}
:النتيجة
HTML ملف •
<div class="box_shadow"></div>
CSS ملف •
.box_shadow {
-webkit-box-shadow: 0px 0px 10px -1px #444444;
-moz-box-shadow: 0px 0px 10px -1px #444444;
box-shadow: 0px 0px 10px -1px #444444;
}
148
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
HTML ملف •
<div class="box_shadow"></div>
CSS ملف •
box_shadow {
background-color: #1C90F3;
width: 200px;
height: 100px;
margin: 50px;
-webkit-box-shadow: inset 0px 0px 10px 0px #444444;
-moz-box-shadow: inset 0px 0px 10px 0px #444444;
box-shadow: inset 0px 0px 10px 0px #444444;
}
:النتيجة
HTML ملف •
<div class="box_shadow"></div>
CSS ملف •
149
مالحظات للعاملين بلغة CSS تنسيق القوائم وإضافة الظالل ورسم األشكال
{ box_shadow
;width: 100px
;height: 100px
;margin: 100px
box-shadow:
-52px -52px 0px 0px #f65314,
52px -52px 0px 0px #7cbb00,
-52px 52px 0px 0px #00a1f1,
;52px 52px 0px 0px #ffbb00
}
النتيجة:
150
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
<div class="trapezoid"></div>
CSS ملف •
.trapezoid {
width: 50px;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid black;
}
<div class="triangle-up"></div>
<style>
.triangle-up {
width: 0;
height: 0;
border-left: 25px solid transparent;
border-right: 25px solid transparent;
border-bottom: 50px solid rgb(246, 156, 85);
}
</style>
:النتيجة
151
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
<div class="triangle-down"></div>
<style>
.triangle-down {
width: 0;
height: 0;
border-left: 25px solid transparent;
border-right: 25px solid transparent;
border-top: 50px solid rgb(246, 156, 85);
}
</style>
:النتيجة
<div class="triangle-right"></div>
<style>
.triangle-right {
width: 0;
height: 0;
border-top: 25px solid transparent;
border-bottom: 25px solid transparent;
border-left: 50px solid rgb(246, 156, 85);
}
</style>
:النتيجة
152
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
<div class="triangle-left"></div>
<style>
.triangle-left {
width: 0;
height: 0;
border-top: 25px solid transparent;
border-bottom: 25px solid transparent;
border-right: 50px solid rgb(246, 156, 85);
}
</style>
:النتيجة
<div class="triangle-up-right"></div>
<style>
.triangle-up-right {
width: 0;
height: 0;
border-top: 50px solid rgb(246, 156, 85);
border-left: 50px solid transparent;
}
</style>
:النتيجة
153
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
<div class="triangle-up-left"></div>
<style>
.triangle-up-left {
width: 0;
height: 0;
border-top: 50px solid rgb(246, 156, 85);
border-right: 50px solid transparent;
}
</style>
:النتيجة
<div class="triangle-down-right"></div>
<style>
.triangle-down-right {
width: 0;
height: 0;
border-bottom: 50px solid rgb(246, 156, 85);
border-left: 50px solid transparent;
}
</style>
:النتيجة
154
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
<div class="triangle-down-left"></div>
<style>
.triangle-down-left {
width: 0;
height: 0;
border-bottom: 50px solid rgb(246, 156, 85);
border-right: 50px solid transparent;
}
</style>
:النتيجة
رسم الدائرة5.3.3
border-radius يةsة الخاصssدد قيمs ومن ثم ح،لرسم الدائرة أنشئ عنصر كتلة بارتفاع وعرض متساويين
.%50 لتكون
<div class="circle"></div>
<style>
.circle {
width: 50px;
height: 50px;
background: rgb(246, 156, 85);
border-radius: 50%;
}
</style>
:النتيجة
155
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
.%50 لتكونradius
<div class="oval"></div>
<style>
.circle {
width: 50px;
height: 80px;
background: rgb(246, 156, 85);
border-radius: 50%;
}
</style>
:النتيجة
شكل االنفجار5.3.5
:مثال عىل رسم شكل انفجار بثماني نقاط
<div class="burst-8"></div>
<style>
.burst-8 {
background: rgb(246, 156, 85);
width: 40px;
height: 40px;
position: relative;
text-align: center;
-ms-transform: rotate(20deg);
transform: rotate(20eg);
}
156
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
.burst-8::before {
content: "";
position: absolute;
top: 0;
left: 0;
height: 40px;
width: 40px;
background: rgb(246, 156, 85);
-ms-transform: rotate(135deg);
transform: rotate(135deg);
}
</style>
:النتيجة
<div class="burst-12"></div>
<style>
burst-12 {
width: 40px;
height: 40px;
position: relative;
text-align: center;
background: rgb(246, 156, 85);
}
.burst-12::before, .burst-12::after {
content: "";
position: absolute;
top: 0;
left: 0;
height: 40px;
157
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
width: 40px;
background: rgb(246, 156, 85);
}
.burst-12::before {
-ms-transform: rotate(30deg);
transform: rotate(30deg);
}
.burst-12::after {
-ms-transform: rotate(60deg);
transform: rotate(60deg);
}
</style>
:النتيجة
رسم المربع5.3.6
.لرسم مربع أنشئ عنصر كتلة بارتفاع وعرض متساويين
:مثال
<div class="square"></div>
<style>
.square {
width: 100px;
height: 100px;
background: rgb(246, 156, 85);
}
</style>
158
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
:النتيجة
رسم المكعب5.3.7
. عىل العناصر الزائفة لرسم المكعبskewY() وskewX() تستخدم خاصيات التحويالت ثنائية األبعاد
:مثال
<div class="cube"></div>
<style>
cube {
background: #dc2e2e;
width: 100px;
height: 100px;
position: relative;
margin: 50px;
}
.cube::before {
content: '';
display: inline-block;
background: #f15757;
width: 100px;
height: 20px;
transform: skewX(-40deg);
position: absolute;
top: -20px;
left: 8px;
}
.cube::after {
content: '';
159
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
display: inline-block;
background: #9e1515;
width: 16px;
height: 100px;
transform: skewY(-50deg);
position: absolute;
top: -10px;
left: 100%;
}
</style>
:النتيجة
رسم الهرم5.3.8
ة لرسمssر الزائفss عىل العناصrotate() وskewY() ادssة األبعssويالت ثنائيssع التحssارات مssتخدم اإلطssتس
.شكل الهرم
<div class="pyramid"></div>
<style>
.pyramid {
width: 100px;
height: 200px;
position: relative;
margin: 50px;
}
160
CSS مالحظات للعاملين بلغة تنسيق القوائم وإضافة الظالل ورسم األشكال
.pyramid::before,.pyramid::after {
content: '';
display: inline-block;
width: 0;
height: 0;
border: 50px solid;
position: absolute;
}
.pyramid::before {
border-color: transparent transparent #ff5656 transparent;
transform: scaleY(2) skewY(-40deg) rotate(45deg);
}
.pyramid::after {
border-color: transparent transparent #d64444 transparent;
transform: scaleY(2) skewY(40deg) rotate(-45deg);
}
</style>
:النتيجة
161
.6التنسيقات األساسية للعنارص
6.1تنسيقات الخطوط
يمكن استعمال الخاصيات التالية في CSSلتنسيق الخطوط:
الوصف الخاصية
نمط الخط ،مائل italicsأو منحرف .oblique font-style
ثُخن الخط ،وتأخذ القيم normalأو boldأو قيم رقمية بين 100و .900 font-weight
حجم الخط ويمكن أن يكون نسبة مئوية أو بالوحدات pxأو emأو غيرها من الوحدات. font-size
ارتفاع السطر ويمكن أن يكون نسبة مئوية أو بالوحدات pxأو emأو غيرها من وحدات
line-height
.CSS
محاذاة النص ،ارجع إىل توثيقها لمعرفة جميع القيم التي تأخذها. text-align
text-decorationزخرفة الخط ،ارجع إىل توثيقها لمعرفة جميع القيم التي تأخذها..
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
{ element
font: [font-style] [font-variant] [font-weight] [font-size/line-
;]height] [font-family
}
مثال:
{ p
;font-weight: bold
;font-size: 20px
;font-family: Arial, sans-serif
}
يُمكن إعssادة كتابssة الشssيفرة أعاله في سssطر واحssد باسssتخدام الصssياغة المختزلssة كمssا هssو موضssح في
المثال التالي:
{ p
;font: bold 20px Arial, sans-serif
}
اختيارية وعدم تحديدها في الصياغة المختزلة يعني استخدام القيم االبتدائية لهssا ،أمssا الخاصssيتين font-size
و font-familyفهما خاصيتين ضروريتين وعدم تحديدهما يؤدي إىل تجاهل الشيفرة وعدم تطبيقها.
;font-style: normal
;font-variant: normal
;font-weight: normal
;font-stretch: normal
;font-size: medium
;line-height: normal
*/يعتمد على نوع الجهاز المستخدم لعرض الصفحة *font-family: /
163
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
6.1.2االقتباسات
تستخدم الخاصية quotesلتحديد شكل عالمات التنصيص للعنصر <:>q
{ q
;">" "<" quotes:
}
6.1.3حجم الخط
تستخدم الخاصية font-sizeلتحديد حجم الخط ويوضح المثال التالي كيفية استخدامها:
{ #element-one
;font-size: 30px
}
{ #element-two
;font-size: 10px
}
بتطبيق الشيفرة أعاله يصبح حجم الخssط داخssل العنصssر #element-oneهssو 30بكسssل ،و 10بكسssالت
في التعريف وفي حال عدم توفره ينتقل للخط الثاني وهكذا.
إذا تكون اسم الخط من أكثر من كلمة واحدة فيجب وضعه بين عالمتي تنصيص.
164
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
6.1.5الخاصية font-variant
تأخذ القيم الموضحة بالجدول التالي:
الوصف القيمة
تستعمل الخاصيات العادية للخط. normal
تُحول الحروف الصغيرة لحروف كبيرة ولكن بنفس حجم الخطوط الصغيرة مع تصغير الحروف
small-caps
الصغيرة قلياًل .
مثال:
>"<p class="smallcaps
Documentation about CSS Fonts
><br
aNd ExAmpLe
></p
{ .smallcaps
;font-variant: small-caps
}
النتيجة:
font-variant-caps
font-variant-numeric
font-variant-alternates
font-variant-ligatures
font-variant-east-asian
165
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
6.2اتجاه الكتابة
انظر المثال التالي:
{ div
اتجاه الكتابة من اليسار لليمين */ */
;direction: ltr
}
{ .ex
*/اتجاه الكتابة من اليمين لليسار */
;direction: rtl
}
{ .horizontal-tb
*/اتجاه الكتابة أفقي من اليمين إلى اليسار */
;writing-mode: horizontal-tb
}
{ .vertical-rtl
*/اتجاه الكتابة رأسيً ا من أعلى لأسفل وأفقيً ا من اليمين إلى اليسار */
;writing-mode: vertical-rl
}
{ .vertical-ltr
*/اتجاه الكتابة رأسيً ا من أعلى لأسفل وأفقيً ا من اليسار إلى اليمين */
;writing-mode: vertical-lr
}
تستخدم الخاصية directionلتحديد االتجاه األفقي للكتابة (من اليمين إىل اليسار أو العكس) ،ولها أربssع
قيم هي:
تستخدم الخاصية writing-modeلتغيssير محssاذاة النص ،فإمssا أن يُكتب من أعىل ألسssفل أو من اليسssار
إىل اليمين.
166
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
6.3.1طفحان النص
تُحدِّد الخاصية text-overflowماذا سيحدث عنsد زيsادة النص عن مسsاحة صsندوقه ،فيمكن أن يُقص
المحتوى ،أو أن تُعرض ثالث نقاط (…) ،أو أن تُعرض سلسلة نصية خاصة.
{ .text
;overflow: hidden
;text-overflow: ellipsis
}
تستخدم القيمة ellipsisلتمثيل النص المقصوص بثالث نقاط تُعssرض داخssل صssندوق المحتssوى ممssا
يؤدي إىل تقليل كمية النص المعروض إذا لم تكن هناك مساحة كافية لعرض النقاط.
{ h1
;text-shadow: 2px 2px #0000FF
}
{ h1
;text-shadow: 2px 2px 10px #0000FF
}
{ h1
;text-shadow: 0 0 3px #FF0000, 0 0 5px #0000FF
}
167
CSS مالحظات للعاملين بلغة التنسيقات األساسية للعناصر
حالة األحرف6.4
رضssا أن تُعssر؛ فإمssا العنصss لتحديد حالة األحرف التي س ُيع َرض فيهtext-transform تستخدم الخاصية
ةssل كلمssرف من كsرض أول حss أو أن يُعlowercase غيرةssة الصss أو بالحالuppercase كل األحرف بالحالة الكبيرة
.كبيرًا
:إليك مثال
HTML ملف •
<p class="example1">
all letters in uppercase
</p>
<p class="example2">
all letters in Capitalize
</p>
<p class="example3">
all letters in lowercase
</p>
CSS ملف •
.example1 {
text-transform: uppercase;
}
.example2 {
text-transform: capitalize;
}
.example3 {
text-transform: lowercase;
}
168
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
{ h2
*/تزيد المسافة بين الأحرف بمقدار 1بكسل */
;letter-spacing: 1px
}
{ p
القيمة السالبة تعني تقليل المسافة بين الأحرف */ */
;letter-spacing: -1px
}
{ p
;text-indent: 50px
}
6.4.3زخرفة النص
تحدد الخاصية text-decorationشكل خطوط الزخرفة ( )decorative linesالمستخدمة عىل النص؛
ٌ
خاصية مختصرة تضبط كل من الخاصيات: وهي
text-decoration-line
text-decoration-color
text-decoration-style
169
CSS مالحظات للعاملين بلغة التنسيقات األساسية للعناصر
.title {
text-decoration-style: dotted;
text-decoration-line: underline;
text-decoration-color: blue;
}
ةsياغة المختزلs ولكن يُمكن استخدام الص،Firefox انتبه إىل أن الخاصيات التالية مدعومة فقط في متصفح
text-decoration-line
text-decoration-color
text-decoration-style
.)CSS أو غيرها من وحداتem أوpx( رقم صحيح موجب أو سالب يحدد المسافة بإحدى الوحدات •
.نسبة مئوية •
:مثال
HTML ملف •
<p>
<span class="normal">This is an example, showing the effect of
"word-spacing".</span><br>
<span class="narrow">This is an example, showing the effect of
"word-spacing".</span><br>
<span class="extensive">This is an example, showing the effect of
"word-spacing".</span><br>
</p>
CSS ملف •
170
CSS مالحظات للعاملين بلغة التنسيقات األساسية للعناصر
:مثال
<style>
.multi-columns {
-moz-column-count: 2;
-webkit-column-count: 2;
column-count: 2;
}
</style>
:النتيجة
171
CSS مالحظات للعاملين بلغة التنسيقات األساسية للعناصر
:مثال
<div id="multi-columns">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut
labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborumGoalKicker.com
– CSS Notes for Professionals 194
</div>
<style>
.multi-columns {
-moz-column-width: 100px;
-webkit-column-width: 100px;
column-width: 100px;
}
</style>
:النتيجة
172
CSS مالحظات للعاملين بلغة التنسيقات األساسية للعناصر
:مثال
<div class="content">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam
nonummy nibh
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut
wisi enim
ad minim veniam, quis nostrud exerci tation ullamcorper suscipit
lobortis nisl
ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in
hendrerit in vulputate velit esse molestie consequat, vel illum dolore
eu
feugiat nulla facilisis at vero eros et accumsan et iusto odio
dignissim qui
blandit praesent luptatum zzril delenit augue duis dolore te feugiat
nulla
facilisi. Nam liber tempor cum soluta nobis eleifend option congue
nihil
imperdiet doming id quod mazim placerat facer possim assum.
</div>
173
CSS مالحظات للعاملين بلغة التنسيقات األساسية للعناصر
<style>
content {
-webkit-column-count: 3; /* Chrome, Safari, Opera */
-moz-column-count: 3; /* Firefox */
column-count: 3;
}
</style>
:مثال
<section>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
At vero eos et accusam et
justo duo dolores et ea rebum.</p>
<p> Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
dolor sit amet. Lorem
ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
eirmod tempor invidunt ut labore
et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
accusam et justo duo dolores et ea
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem
ipsum dolor sit amet.</p>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
At vero eos et accusam et
justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea
takimata sanctus est Lorem ipsum
dolor sit amet.</p>
</section>
<style>
section {
columns: 3;
column-gap: 40px;
column-rule: 2px solid gray;
}
</style>
174
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
الحرف النصي الذي سيدخله المستخدم) .الشكل االفتراضي لمؤشssر اإلدخssال هssو خssط رأسssي يssومض لتسssهيل
مالحظته ،ويكون لونه االفتراضي هو األسود ،لكن يمكن تعديله باستخدام هذه الخاصية.
مثال:
><style
{ #example
;caret-color: red
}
></style
النصssية ،text-decorationوتضssبط ً
أيضssا قيمssة الكلمssة المحجssوزة ،currentColorوالssتي يمكن أن
تستخدم كقيمsة غsير مباشsرة في الخاصsيات األخsرى الsتي ال تأخsذ لونهssا من الخاصsية colorمباشsر ًة (مثsل
الخاصية .)border-color
6.5.1استخدام currentColor
مثال:
{ div
;color: red
;border: 5px solid currentColor
;box-shadow: 0 0 5px currentColor
}
في المثال أعاله ،اسsتُخدمت الكلمssة المحجssوزة currentColorإلعطssاء اإلطssار نفس اللssون المحسssوب
175
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
{ div
;color: blue
;border: 3px solid currentColor
;color: green
}
بما أن currentColorتأخذ القيمة المحسوبة computed valueللخاصية ،فإنَّها في هذا المثال ستأخذ
هنالك حاالت يرث االبن اللون من العنصر األب ،في المثال أدنssاه تَssرِث الخاصssية currentColorاللssون
{ .parent-class
;color: blue
}
{ .parent-class .child-class
;border-color: currentColor
}
يُمكن اسsssتخدام currentColorلتsssوريث اللsssون للخsssواص الsssتي ال ترثsssه عsssاد ًة مثsssل الخاصsssية
{ .parent-class
;color: blue
}
{ .parent-class .child-class
;background-color: currentColor
}
176
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
{ .some-class
;color: blue
}
الكلمات المحجوزة في CSSغير حساسة لحالة األحرف ،فالقيم ،blueو ،Blueو BLUEكلها تشير للون الست
عشري .#0000FF
إن أردت االطالع عىل قائمة كل الكلمات المحجوزة لأللوان ،فارجع إىل قسم الكلمات المحجsوزة لأللsوان من
واألخضsssر ،واألزرق المكونsssة للsssون ،ويأخsssذ كsssل زوج قيمsssة تsssتراوح بين 00إىل ( FFأو بين 0و 255في
النظام العشري).
عدد األلوان التي يُمكن تمثيلها باستخدام النظام الست عشري هو 256^3أي 16,777,216لون.
الصياغة:
;color: #rrggbb
color: #rgb
177
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
حيث:
مثال:
{ .some-class
;color: #0000FF
}
{ .also-blue
;color: #00F
}
القيم الست عشرية لأللوان غير حساسة لحالة األحرف ،فالقيمتان 0000FFو #0000ffتشيران لنفس اللون.
مصادر إضافية:
6.5.4الدالة rgb
ترميز rgbهو المكافئ العشري للترميز الست عشssري لأللssوان ،ويُعَ بِّر عن األلssوان األحمssر واألخضssر واألزرق
بقيم رقميssة بين 0و ( 255تمثssل المكافئssات العشssرية للقيم 00و FFعىل التssوالي) ،أو بنسssب مئويssة بين %0
و .%100
{ .some-class
color: rgb(0, 0, 255); /* blue color */
}
{ .also-blue
color: rgb(0%, 0%, 100%); /* blue color */
}
178
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
الصيغة العامة:
6.5.5الدالة rgba
ترميز rgbaهو نفس ترميز rgbمع إضافة قيمة أخيرة تُمثل نسssبة تعssتيم اللssون ،opacityوتأخssذ قيم بين
{ .red
*/أحمر معتم بالكامل *color: rgba(255, 0, 0, 1); /
}
{ .red-50p
% */أحمر شفاف بنسبة color: rgba(255, 0, 0, 0.5); /* 50
}
الصيغة العامة:
6.5.6الدالة hsl
ترمز hslللكلمات صبغة ( )hueوتستعمل لتحديد اللssون ،إشssباع ( )saturationوتسssتعمل لتحديssد تركssيز
اللون ،إضاءة ( )lightnessوتستعمل لتحديد كمية اللون األبيض في اللون ،تحدد قيمة الصبغة بزاوية بين صssفر
{ p
color: hsl(240, 100%, 50%); /* Blue */
}
179
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
الصيغة العامة:
الوصف القيمة
تُحدد زاوية بين صفر و 360درجة ،حيث تمثل الزاوية 0اللون األحمر ،و 60للون األصفر،
و 120للون األخضر ،و 180للون األزرق السماوي ،و 240لألزرق ،و 300للبنفسجي ،و360 <>hue
لألحمر ً
أيضا.
تُحدد درجة َ
تشبُّع اللون بنسبة مئوية ،حيث %0تعني أن اللون غير مشبع (تدرج رمادي)،
<>saturation
و %100تعني أن اللون مشبع بالكامل (لون واضح).
تُحدد إضاءة اللون بنسبة مئوية ،حيث تشير %0للون األسود (مظلم بالكامل) ،وتشير
<>lightness
%100للون األبيض.
6.5.7الدالة hsla
ترميز hslaهو نفس ترميز hslمع إضافة قيمة أخssيرة تُمثssل نسssبة تعssتيم اللssون ،opacityوتأخssذ قيم بين
180
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
الصيغة العامة:
6.5.8التعتيم
تستخدم الخاصية opacityلتحديد درجة تعتيم العنصر وتأخذ قيم رقمية بين صفر (شفاف بالكامل أو غير
مثال:
حيث:
الصيغة العامة:
;cursor: value
الوصف القيمة
تُخفي مؤشر الفأرة. none
البرنامج يجري مهمة في الخلفية ،وال يمكن أن يتفاعل المستخدم معه. wait
181
مالحظات للعاملين بلغة CSS التنسيقات األساسية للعناصر
الوصف القيمة
يشير المؤشر إىل أنَّ شيًئا ما تحَرَّك. move
األشكال المتاحة:
6.6.1الخاصية pointer-event
تُحدد الخاصية pointer-eventكيف سيتعامل العنصر مع مؤشر الفأرة .مثال:
{ .disabled
;pointer-events: none
}
davidwalsh •
182
.7تنسيق الخلفيات Backgrounds
تُمكنك CSSمن اختيار ألوان ،أو تدرجات لونية ،أو صور كخلفيات للعناصر ،والتحكم في حجمها ،وموضعها،
::first-letterو .::first-line
><style
{ div
;background-color: red
}
></style
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
فمثاًل يكون اللون #ff0000هو اللون األحمر ،حيث يُمثل بssالحرفين ffاللssذان يمثالن المقابssل السssت عشssري
للرقم .256
يُمكن تقسم الترميز الست عشري لأللوان إىل ثالثة أقسام ،كل منها يتكون من حssرفين ويُمثssل أحssد األلssوان
األحمر أو األخضر أو األزرق (عىل الترتيب من اليسار إىل اليمين) ،وفي حssال كssانت الحssروف الممثلssة لكssل لssون
متشssابهه ،يمكن اختصssار الترمssيز السssت عشssري إىل ثالث أحssرف ،فعىل سssبيل المثssال يُمكن اختصssار اللssون
#ff0000إىل .#f00
{ body
background-color: #de1205; /* red */
}
{ .main
background-color: #00f; /* blue */
}
يُمكِّن ترميز RGBaمن إضافة ُمعامل أخير يُسمى معامل ألفا ،ويُحدد درجة تعتيم/شفافية العنصر ،وتssتراوح
{ header
background-color: rgba(0, 0, 0); /* black */
}
{ footer
background-color: rgba(0, 0, 0, 0.5); /* black with 50% opacity */
}
184
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
إضاءة lightnessوتستعمل لتحديد كمية اللون األبيض في اللون ،وتحدد قيمة الصبغة بزاويsة بين صssفر و 360
يُمكِّن ترميز HSLaمن إضافة ُمعامل أخير يُسمى معامل ألفا ،ويُحدد درجة تعتيم/شفافية العنصر ،وتssتراوح
{ li a
*/أخضر *background-color: hsl(120, 100%, 50%); /
}
{ #p1
*/أخضر مع شفافية *background-color: hsla(120, 100%, 50%, 0.3); /
}
)(linear-gradient •
)(repeating-linear-gradient •
)(radial-gradient •
)(repeating-radial-gradient •
185
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
الوصف القيمة
يُمكن أن يأخذ قيم مثل ،to topأو ،to bottomأو ،to rightأو ،to leftأو تأخذ
زاوية تبدأ من األعىل وتدور في اتجاه عقارب الساعة ،وتُقاس بالوحدات ،degأو <>direction
،gradأو ،radأو .turnوإذا لم تُحدد هذه القيمة يكون التدرج من أعىل ألسفل.
تُحدد قائمة من األلوان ،ويُمكن إتباع كل لون بنسبة مئوية أو مسافة تُحدد
الموضع الذي س ُيعرض فيه اللون (اختاري) ،مثل: <>color-stop-list
yellow 10% rgba(0,0,0, 0.5) 40px, #fff 100%
مثال عىل إ نشاء تدرج لوني يتجه من اليمين إىل اليسار ويتدرج بين اللونين األحمر واألزرق:
{ .linear-gradient
background-color: linear-gradient(to left, red, blue); /* you can
also use 270deg */
}
{ .diagonal-linear-gradient
;)background-color: linear-gradient(to left top, red, yellow 10%
}
يُمكنك تحديد أي عدد من النقاط اللونيssة في التsدرج اللssوني والفصsل بينهsا بفاصsلة ،كمsا هsو موضsح في
المثال التالي:
{ .linear-gradient-rainbow
background-color: linear-gradient(to left, red, orange, yellow,
;)green ,blue, indigo, violet
}
{ .radial-gradient-simple
;)background: radial-gradient(red, blue
}
{ .radial-gradient
background: radial-gradient(circle farthest-corner at top left,
;)red, blue
186
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
}
حيث:
:circleشكل التدرج اللوني ،ويمكن أن تكون circleأو ellipseوهي القيمة االفتراضية. •
:farthest-cornerكلمة محجوزة تُحدد حجم الشكل النهائي ،ويمكن أن تكون closest-sideأو •
7.2.3التدرجات ُ
المتكررة Repeating Gradients
تأخذ التدرجات اللونية المتكررة نفس معامالت التدرجات اللونية العاديssة ،ولكنهssا تُكssرر التssدرج اللssوني عىل
خلفية العنصر.
{ .bullseye
background: repeating-radial-gradient(red, red 10%, white 10%,
;)white 20%
}
{ .warning
background: repeating-linear-gradient(-45deg, yellow, yellow 10%,
;)black 10%, black 20%
}
حيث:
:-45degزاوية تبدأ من األعىل وتدور في اتجاه عقارب الساعة ،وتُقاس بالوحدات degأو gradأو rad •
أو .turn
:top leftاتجاه التدرج اللوني ،وتأخذ topأو bottomعىل المحور Yوالقيمة leftأو rightعىل •
المحور .X
:yellow 10%قائمة األلssوان ،ويُمكن إتبssاع كssل لssون بنسssبة مئويssة أو مسssافة تُحssدد الموضssع الssذي •
187
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
{ .myClass
;)'background-image: url('/path/to/image.jpg
}
ويُمكن تحديد عدد من الصور والفصل بينها بفاصلة ،وتكون النتيجة أن تظهر الصور مترادفة حسssب تssرتيب
كتابتها في الشيفرة.
{ .myClass
background-image: url('/path/to/image.jpg'),
;)'url('/path/to/image2.jpg
}
حيث:
التكبير أو التصغير في االتجاهين األفقي والرأسي ،أو تأخذ قيمتين تحددان التكبير أو التصغير في كل اتجssاه عىل
حدة.
تُحافظ القيمة autoللخاصية background-sizeعىل نسبة أبعاد الصورة (نسبة االرتفssاع إىل العssرض)،
فعىل سبيل المثال إذا كان لدينا صورة بحجم ،256px * 256pxفإن جميع القواعد أدناه متكافئة وتؤدي لعرض
;background-size: 50px
188
CSS مالحظات للعاملين بلغة Backgrounds تنسيق الخلفيات
ً ويُمكن
.أيضا استعمال نسب مئوية لتحديد التكبير أو التصغير للصورة
#withbackground {
background-image: url('to/some/background.png');
background-size: 100% 66%;
width: 200px;
height: 200px;
padding: 0;
margin: 0;
}
:النتيجة
189
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
للمحافظة عىل نسبة أبعاد الصورة عنssد اسssتخدامها لتغطيssة عنصssر أو وضssعها داخلssه يجب اسssتخدام القيم
افترض أن المساحة البيضاء في الصورة أعاله تُمثل شاشة العرض الخاصة بك ،استخدام القيمssة contain
للخاصssية background-sizeسssيؤدي إىل تكبsير أو تصssغير الصsورة بحيث يُطssابق أحsد أبعادهssا أحsد بُعssدي
أما القيمة coverفستؤدي إىل تكبير الصورة بحيث تطابق أبعادها أبعاد الصندوق ،مع قص األجزاء الزائssدة
190
CSS مالحظات للعاملين بلغة Backgrounds تنسيق الخلفيات
:مثال
CSS ملف •
/********************************************
Additional styles for the explanation boxes
*********************************************/
191
CSS مالحظات للعاملين بلغة Backgrounds تنسيق الخلفيات
}
div + div {
clear: both;
border-top: 1px dashed silver;
padding-top:1ex;
}
div > div::after {
background-color: #000;
color: #fefefe
margin: 1ex;
padding: 1ex;
opacity: 0.8;
display: block;
width: 10ex;
font-size: 0.7em;
content: attr(class);
}
HTML ملف •
<div>
<div class="contain"></div>
<p>Note the grey background. The image does not cover the whole
region, but it's fully
<em>contained</em>.
</p>
</div>
<div>
<div class="cover"></div>
<p>Note the ducks/geese at the bottom of the image. Most of the
water is cut, as well as a part
of the sky. You don't see the complete image anymore, but
neither do you see any background color;
the image <em>covers</em> all of the <code><div></code>.</p>
</div>
:النتيجة
192
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
مثال:
الصورة أعاله تحتوي عىل عدد من الصssور ،ويمكن اسssتعمال كssل واحssدة منهssا منفssردة كمssا هssو موضssح في
الشيفرة التالية:
193
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
{ .icon
;)”background: url(“icons-sprite.png
;display: inline-block
;height: 20px
;width: 20px
}
{ .icon1
;background-position: 0px 0px
}
{ .icon2
;background-position: -20px 0px
}
{ .icon3
;background-position: -40px 0px
}
الوصف الوحدة
تُحدد اإلزاحة األفقية لصورة الخلفية كنسبة من عرض الصورة ،واإلزاحة الرأسية كنسبة من
%value% value
ارتفاعها.
valuepx
تُحدد اإلزاحات األفقية والرأسية بالبكسالت ،وتُقاس المسافة من أعىل ويسار الصورة.
valuepx
مثال:
{ .myClass
;)'background-image: url('path/to/image.jpg
;background-position: 50% 50%
}
باإلضافة للخاصية المختزلة background-positionوالتي تُحدد اإلزاحتان األفقية والرأسية معً sا ،يُمكن
استخدام:
194
CSS مالحظات للعاملين بلغة Backgrounds تنسيق الخلفيات
background-origin الخاصية7.5.1
يةssة الخاصssانت قيمssال كss وفي ح،ةssورة الخلفيssع صss موضbackground-origin يةssدد الخاصssتُح
ا هيssية لهssة االفتراضss والقيم،أثيرssية أي تssذه الخاصssون لهss فلن يكfixed هيbackground-attachment
.padding-box
الوصف القيمة
ً
.نسبة لصندوق الحواشي يُحدد الموضع padding-box
ً
.نسبة لصندوق اإلطارات يُحدد الموضع border-box
ّ
.نسبة لصندوق المحتوى يُحدد الموضع context-box
:مثال
HTML ملف •
<p>background-origin: border-box:</p>
<div class="example example2">
<h2>Lorem Ipsum Dolor</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed
diam nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
195
CSS مالحظات للعاملين بلغة Backgrounds تنسيق الخلفيات
<p>background-origin: content-box:</p>
<div class="example example3">
<h2>Lorem Ipsum Dolor</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed
diam nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation
ullamcorper suscipit lobortis nisl ut
aliquip ex ea commodo consequat.</p>
</div>
CSS ملف •
.example {
width: 300px;
border: 20px solid black;
padding: 50px;
background: url(https://static.pexels.com/photos/6440/magazines-
desk-work-workspace-medium.jpg);
background-repeat: no-repeat;
}
.example1 {}
.example2 { background-origin: border-box; }
.example3 { background-origin: content-box; }
:النتيجة
196
CSS مالحظات للعاملين بلغة Backgrounds تنسيق الخلفيات
#mydiv {
background-image: url(img_1.png), /* top image */
url(img_2.png), /* middle image */
url(img_3.png); /* bottom image */
background-position: right bottom,
left top,
right top;
background-repeat: no-repeat,
repeat,
no-repeat;
197
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
}
ومن الممكن ً
أيضا استخدام الصياغة المختزلة للخاصية كما هو موضح في المثال التالي:
{ #mydiv
background: url(img_1.ong) right bottom no-repeat,
url(img_2.png) left top repeat,
;url(img_3.png) right top no-repeat
}
يُمكنك ً
أيضا إضافة تدرج لوني مع الصورة:
{ #mydiv
background: url(image.png) right bottom no-repeat,
;)linear-gradient(to bottom, #fff 0%, #000 100%
}
7.5.3الخاصية background-attachment
تُحدد الخاصية background-attachmentما إذا كانت صورة الخلفيssة ثابتssة fixedأم أنهssا تتحssرك مssع
الوصف القيمة
تتحرك صورة الخلفية مع العنصر. scroll
مثال:
{ body
;)'background-image: url('img.jpg
;background-attachment: fixed
}
198
CSS مالحظات للعاملين بلغة Backgrounds تنسيق الخلفيات
:أمثلة
background-attachment: scroll •
body {
background-image: url('image.jpg');
background-attachment: scroll;
}
background-attachment: fixed •
body {
background-image: url('image.jpg');
background-attachment: fixed;
}
background-attachment: local •
div {
background-image: url('image.jpg');
background-attachment: local;
}
background-clip الخاصية7.5.4
ةsانت الخلفيs سوا ًء ك، أين ستتوقف خلفية العنصر عىل حدود العنصرbackground-clip تُحدد الخاصية
ً
.>image< صورة > أوcolor< لونًا
الوصف القيمة
. لكنها ستقع تحته،)border( ستمتد الخلفية إىل الحافة الخارجية لإلطار border-box
:مثال
HTML ملف •
199
CSS مالحظات للعاملين بلغة Backgrounds تنسيق الخلفيات
<p>background-origin: border-box:</p>
<div class="example example2">
<h2>Lorem Ipsum Dolor</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed
diam nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation
ullamcorper suscipit lobortis nisl ut
aliquip ex ea commodo consequat.</p>
</div>
<p>background-origin: content-box:</p>
<div class="example example3">
<h2>Lorem Ipsum Dolor</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed
diam nonummy nibh euismod
tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci tation
ullamcorper suscipit lobortis nisl ut
aliquip ex ea commodo consequat.</p>
</div>
CSS ملف •
.example {
width: 300px;
border: 20px solid black;
padding: 50px;
background: url(https://static.pexels.com/photos/6440/magazines-
desk-work-workspace-medium.jpg);
200
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
;background-repeat: no-repeat
}
}{ .example1
} ;.example2 { background-origin: border-box
} ;.example3 { background-origin: content-box
7.5.5الخاصية background-repeat
تُحدد الخاصية background-repeatكيف ستتكرر صورة الخلفية؛ إذ يمكن أن تتكرر صورة الخلفية عىل
المحور األفقي ،أو عىل المحور الرأسي ،أو عىل كال المحوري ،ويمكن أاّل تتكرر أبدًا.
{ div
;)"background-image: url("image.jpg
;background-repeat: repeat-y
}
النتيجة:
7.5.6الخاصية background-blend-mode
ً
بعضا ومع لون الخلفية تُحدد الخاصية background-blend-modeكيف تمتزج صور الخلفية مع بعضها
المحدَّد للعنصر.
ُ
201
مالحظات للعاملين بلغة CSS تنسيق الخلفيات Backgrounds
{ .my-div
;width: 300px
;height: 200px
;background-size: 100%
;background-repeat: no-repeat
background-image: linear-gradient(to right, black 0%,white 100%),
url('https://static.pexels.com/photos/54624/strawberry-fruit-red-
;)'sweet-54624-medium.jpeg
;background-blend-mode:saturation
}
عىل الخلفية فقط يجب استخدام ترميز RGBaلأللوان كما هو موضح في المثال أدناه
/* Fallback for web browsers that don't support RGBa */
;)background-color: rgb(0, 0, 0
إصدار
الوصف الخاصية
CSS
1+ المراد استخدامها كخلفية.
الصورة ُ background-image
202
CSS مالحظات للعاملين بلغة Backgrounds تنسيق الخلفيات
إصدار
الوصف الخاصية
CSS
3+ .مركز الخلفية background-origin
ً
نسبة لصندوق المحتوى أو صندوق تحدد كيف ستعرض الخلفية
3+ background-clip
.اإلطارات أو صندوق الحواشي
:الصيغة العامة
background: red;
203
.8تنسيق الصور
الم ِّ
رشحات Filters ُ 8.1
تُستخدم الخاصssية filterلتطssبيق تssأثيرات مثssل تغيssير اللssون وتssأثير الضssبابية عىل الصssور والخلفيssات
الوصف الدالة
تُ َط ِبق تأثير الضبابية عىل الصورة ُ
المحدَّدة. ()blur
الم ِّ
رشحات filterفي المتصفحات القديمة. يجب استخدام البادئة -webkitلدعم خاصية ُ
CSS مالحظات للعاملين بلغة تنسيق الصور
blur الدالة8.2
:مثال
HTML ملف •
CSS ملف •
img {
-webkit-filter: blur(1px);
filter: blur(1px);
}
:النتيجة
dropshadow الدالة8.3
:مثال
HTML ملف •
<p>
My shadow always follows me.
</p>
CSS ملف •
205
CSS مالحظات للعاملين بلغة تنسيق الصور
p {
-webkit-filter: drop-shadow(10px 10px 1px green);
filter: drop-shadow(10px 10px 1px green);
}
:النتيجة
hue-rotate الدالة8.4
:مثال
HTML ملف •
CSS ملف •
img {
-webkit-filter: hue-rotate(120deg);
filter: hue-rotate(120deg);
}
:النتيجة
206
CSS مالحظات للعاملين بلغة تنسيق الصور
invert الدالة8.5
:مثال
HTML ملف •
<div></div>
CSS ملف •
div {
width: 100px;
height: 100px;
background-color: white;
-webkit-filter: invert(100%);
filter: invert(100%);
}
:النتيجة
ِّ إضافة ُم8.6
رشحات متعددة
ِّ الم
.رشحات والفصل بينها بفاصلة ُ يُمكن تطبيق عدد من
:مثال
HTML ملف •
CSS ملف •
img {
-webkit-filter: brightness(200%) grayscale(100%) sepia(100%)
invert(100%);
207
مالحظات للعاملين بلغة CSS تنسيق الصور
النتيجة:
الوصف المعامل
رابط يُشير لعنصر SVGأو ملف SVGخارجي يحوي تعريف مسار القطع. clip-source
تُحدد شكل مسار القطع ،وتأخذ القيمة () insetأو () circleأو () ellipseأو
basic-shape
().polygon
تُحدد كيف ستُكرر صورة القناع عىل المحورين األفقي والرأسي ،وتأخذ القيمة
repeat-style
repeat-xأو repeat-yأو repeatأو spaceأو roundأو .no-repeat
تُحدد الصندوق الذي سيأخذ شكل القطع ،وتأخذ القيمة content-boxأو geometry-box
padding-boxأو ّ أو margin-boxأو fill-boxأو stroke-boxأو
208
مالحظات للعاملين بلغة CSS تنسيق الصور
الوصف المعامل
.view-boxلمزيد من المعلومات انظر توثيق .W3C
تُحدد حجم صورة القناع ،ولها صياغة مماثلة لصياغة الخاصية background-
bg-size
.size
تُحدد عملية التركيب التي ستُطبَّق عىل طبقات القناع ،وتأخذ إحدى القيم addأو compositing-
substractأو excludeأو .multiplyلمزيد من المعلومات انظر توثيق .W3C operator
8.7.1القطع Clipping
تجهة ،ويكون العنصر خssارج هssذه المسssارات شssفا ًفا ،أمssا الشssكل ُ
المحssدد بالمسssار القواطع هي مسارات ُم ِ
معتما.
ً فيكون
مثال:
المعتم (المرئي) من العنصر عىل شكل دائرة مركزها هو نفس مركز العنصر وقطرها 100بكسل.
يكون الجزء ُ
8.7.2القناع
تستخدم لتحديد قناع يوضع فوق العنصر ويحدد األجزاء المرئية والمعتمة منssه ،وهنssاك نوعssان من األقنعssة،
أما أقنعة اإلضاءة ،فيمكنك هذا النوع من وضع قناع ذو تssدرج رمssادي فssوق العنصssر ،بحيث يكssون العنصssر
معتما ،بينما يكون الجssزء الواقssع تحت الجssزء األبيض من القنssاع شssفا ًفا ،ويتssدرج
ً تحت الجزء األسود من القناع
مثال:
209
مالحظات للعاملين بلغة CSS تنسيق الصور
وأما أقنعة ألفا ،فيكون الجزء من العنصر الواقssع تحت الجssزء الشssفاف من القنssاع مرئ ًيssا بينمssا يكssون بssاقي
في المثال التالي ،استُخ ِدم قناع بتدرج خطي ذو لون أبيض في أقصى اليسssار ويصssبح شssفا ًفا كلمssا اتجهت
لليمين ،وتصبح الصورة شفافة في المكان الذي يكون فيه القناع شفا ًفا.
><style
{ div
;height: 200px
;width: 200px
;)'background: url('http://lorempixel.com/200/200/nature/1
;)mask-image: linear-gradient(to right, white, transparent
}
></style
><div></div
النتيجة:
210
CSS مالحظات للعاملين بلغة تنسيق الصور
<style>
div {
width: 200px;
height: 200px;
background: url(http://lorempixel.com/200/200/abstract/6);
mask-image: radial-gradient(circle farthest-side at center,
transparent 49%, white 50%);
}
</style>
<div></div>
<style>
div {
height: 200px;
width: 400px;
background-image: url(http://lorempixel.com/400/200/nature/4);
mask-image: linear-gradient(to top right, transparent 49.5%,
white 50.5%), linear-gradient(to top
211
CSS مالحظات للعاملين بلغة تنسيق الصور
<div></div>
:النتيجة
القواطع8.8.1
<style>
div {
width: 200px;
height: 200px;
212
مالحظات للعاملين بلغة CSS تنسيق الصور
;background: teal
;)clip-path: polygon(0 0, 0 100%, 100% 50%
}
></style
><div></div
المثال أعاله يوضح كيفية استخدام الخاصية clip-pathلقطع الشكل المربع إىل شكل مثلث ،يبدأ القطع
في الحافة العُ ليا باتجاه اليسار (عند النقطة ،)0 0ومن ثمة يتجه إىل أسفل اليسار (النقطة ،)0 %100وأخيرًا إىل
منتصف الضلع األيمن (عند النقطة ،)%50 %100وتحدد هذه النقاط الثالث رؤوس المثلث.
النتيجة:
مثال:
><style
{ div
;width: 200px
;height: 200px
;background: teal
;)clip-path: circle(30% at 50% 50%
}
></style
><div></div
المثال أعاله يوضح كيفية إنشاء شكل دائري باستخدام الخاصية ،clip-pathويكون الناتج هو شكل دائري
نصف قطره %30من عرض العنصر األصلي ،ومركزه هو نفس مركز العنصر.
213
مالحظات للعاملين بلغة CSS تنسيق الصور
)circle(radius at x y
8.9الخاصية object-fit
تُحدد الخاصية object-fitكيف يتناسب العنصر مع صندوق ذو ارتفاع وعرض محددين ،وغالبًا ما تستخدم
;object-fit: fill
النتيجة:
تُمدد fillالصورة لملء صندوق المحتوى بغض النظر عن نسبة العرض إىل االرتفاع األصلية للصورة.
;object-fit: contain
النتيجة:
214
مالحظات للعاملين بلغة CSS تنسيق الصور
تُحافظ containعىل نسبة االرتفاع إىل العرض األصلية للصورة عن طريق مالئمتها ألحد بُعssدي الصssندوق
وضبط البعد اآلخر بنا ًء عىل نسبة االرتفاع إىل العرض األصلية.
;object-fit: cover
النتيجة:
تُمدد coverالصورة لملء صندوق المحتوى ،مع الحفاظ عىل نسبة العssرض إىل االرتفssاع األصsلية للصssورة
;object-fit: none
215
مالحظات للعاملين بلغة CSS تنسيق الصور
النتيجة:
;object-fit: scale-down
النتيجة:
216
Floats العنارص العائمة.9
HTML ملف •
:CSS ملف •
مالحظات للعاملين بلغة CSS العناصر العائمة Floats
{ img
;float:left
;margin-right:1rem
}
النتيجة:
الوصف القيمة
تسمح بتعويم العناصر عىل الجانبين. none
218
CSS مالحظات للعاملين بلغة Floats العناصر العائمة
الوصف القيمة
.تمنع تعويم العناصر عىل الجانبين both
:مثال
<html>
<head>
<style>
img {
float: left;
}
p.clear {
clear: both;
}
</style>
</head>
<body>
<img src="https://static.pexels.com/photos/69372/pexels-photo-
69372-medium.jpeg" width="100">
<p>Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
Lorem ipsum Lorem ipsum Lorem
ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum </p>
<p class="clear">Lorem ipsum Lorem ipsum Lorem ipsum Lorem
ipsum Lorem ipsum Lorem ipsum
Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
Lorem ipsum </p>
</body>
</html>
Clearfix مفهوم9.3
: واألمثلة التالية توضح كيفية استخدامه،float هو مفهوم آخر مرتبط خاصيةclearfix مفهوم
.cf:after {
content: "";
219
مالحظات للعاملين بلغة CSS العناصر العائمة Floats
;display: table
}
{ .cf:after
;clear: both
}
cf:before,
{ .cf:after
*/انظر الملاحظة رقم content: " "; /* 1
*/انظر الملاحظة رقم display: table; /* 2
}
{ .cf:after
;clear: both
}
مالحظات:
.1إضافة حرف الفراغ للعناصر الزائفة :afterو :beforeيمنع ظهور فراغات حول العنصر.
.2يجب استعمال tableبدال ً عن blockفي حال استخدام :beforeالحتواء هوامش العنصر االبن.
بعضها البعض.
مثال:
><div
><p>This is DIV 1</p
></div
><div
><p>This is DIV 2</p
></div
220
CSS مالحظات للعاملين بلغة Floats العناصر العائمة
اىل حاوية سطرية (أي تأخذ فقط عرض محتواها وتوضع العناصر اإلخوة لها متجاورةdiv يمكن تحويل عنصر
:مثال
:HTML ملف •
<div class="outer-div">
<div class="inner-div1">
<p>This is DIV 1</p>
</div>
<div class="inner-div2">
<p>This is DIV 2</p>
</div>
</div>
:CSS ملف •
.inner-div1 {
width: 50%;
margin-right:0px;
float:left;
background : #337ab7;
padding:50px 0px;
221
مالحظات للعاملين بلغة CSS العناصر العائمة Floats
}
{ .inner-div2
;width: 50%
;margin-right:0px
;float:left
;background : #dd2c00
;padding:50px 0px
}
{ p
;text-align:center
}
النتيجة:
>"<div class="wrapper
>"<div class="sidebar
><h2>Sidebar</h2
222
CSS مالحظات للعاملين بلغة Floats العناصر العائمة
:CSS ملف •
.wrapper {
width: 600px;
padding: 20px;
background-color: pink;
/* 1 * انظر الملاحظة/
overflow:hidden;
}
.sidebar {
width: 150px;
float: left;
background-color: blue;
}
.content {
width: 450px;
float: right;
background-color: yellow;
223
CSS مالحظات للعاملين بلغة Floats العناصر العائمة
overflow: hidden ليس لديها ارتفاع محدد وي ُجبر استعمال القاعدةfloating elements العناصر العائمة
:HTML ملف •
<div class="wrapper">
<div class="left-sidebar">
<h1>Left Sidebar</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</div>
<div class="content">
<h1>Content</h1>
<p>Class aptent taciti sociosqu ad litora torquent per
conubia nostra, per inceptos himenaeos.
Curabitur sodales ligula in libero. Sed dignissim lacinia
nunc. Curabitur tortor. Pellentesque
nibh. Aenean quam. In scelerisque sem at dolor. Maecenas
mattis. Sed convallis tristique sem. Proin
ut ligula vel nunc egestas porttitor. Morbi lectus risus,
iaculis vel, suscipit quis, luctus non,
massa. </p>
</div>
<div class="right-sidebar">
<h1>Right Sidebar</h1>
<p>Fusce ac turpis quis ligula lacinia aliquet.</p>
</div>
</div>
:CSS ملف •
.wrapper {
224
CSS مالحظات للعاملين بلغة Floats العناصر العائمة
width:600px;
background-color:pink;
padding:20px;
overflow:hidden;
}
.left-sidebar {
width:150px;
background-color:blue;
float:left;
}
.content {
width:300px;
background-color:yellow;
float:left;
}
.right-sidebar {
width:150px;
background-color:green;
float:right;
}
:HTML ملف •
<div class="sidebar">
<h1>Sidebar</h1>
<img src="http://lorempixel.com/150/200/" />
</div>
<div class="content">
<h1>Content</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Integer nec odio. Praesent libero. Sed
225
CSS مالحظات للعاملين بلغة Floats العناصر العائمة
cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh
elementum imperdiet. Duis sagittis
ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta.
Mauris massa. Vestibulum lacinia
arcu eget nulla. </p>
<p>Class aptent taciti sociosqu ad litora torquent per conubia
nostra, per inceptos himenaeos.
Curabitur sodales ligula in libero. Sed dignissim lacinia nunc.
Curabitur tortor. Pellentesque
nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis.
Sed convallis tristique sem. Proin
ut ligula vel nunc egestas porttitor. Morbi lectus risus,
iaculis vel, suscipit quis, luctus non,
massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris
ipsum. Nulla metus metus, ullamcorper
vel, tincidunt sed, euismod in, nibh.</p>
</div>
:CSS ملف •
.sidebar {
/* `display:table;` shrink-wraps the column */
display:table;
float:left;
background-color:blue;
}
.content {
/* `overflow:hidden;` prevents `.content` from flowing under
`.sidebar` */
overflow:hidden;
background-color:yellow;
}
ُ رssط بالعنصssتي تُحيssاحة الss وهي المس،ويمssاحة التعssكل مسss شshape-outside يةssتُحدد الخاص
َّومsَالمع
226
CSS مالحظات للعاملين بلغة Floats العناصر العائمة
الوصف المعامل
. (المساحة حول العنصر العائم) ال تتأثرfloat area تعني أن مساحة التعويم none
،ellipse)( أو،circle)( أوinset)( تُحدد شكل مساحة التعويم وتأخذ إحدى القيم
basic-shape
.polygon)( أو
:مثال
CSS ملف •
img:nth-of-type(1) {
shape-outside: circle(80px at 50% 50%);
float: left;
width: 200px;
}
img:nth-of-type(2) {
shape-outside: circle(80px at 50% 50%);
float: right;
width: 200px;
}
p {
text-align: center;
line-height: 30px;
}
HTML ملف •
<img src="http://images.clipartpanda.com/circle-clip-art-
circlergb.jpg">
<img src="http://images.clipartpanda.com/circle-clip-art-
circlergb.jpg">
<p>Some paragraph whose text content is required to be wrapped such
that it follows the curve of
the circle on either side. And then there is some filler text just
to make the text long enough.
Lorem Ipsum Dolor Sit Amet....</p>
227
مالحظات للعاملين بلغة CSS العناصر العائمة Floats
shape-outsideلن يطفو النص حول الشكل الssدائري للصssورة وإنمssا سssيطفو حssول النمssوذج الصssندوقي ذو
ولكن عند استخدام الخاصية shape-outsideيُعاد تعريف الشكل الخارجي للعنصssر ويصssبح دائريًssا ممssا
يجعل النص يطفو حول الدائرية التخيلية التي ترسمها هذه الخاصية ،كما هو موضح في الصورة التالية:
.shape-outsideمثال:
{ img:nth-of-type
;)shape-outside: circle(80px at 50% 50%
;shape-margin: 10px
;float: left
;width: 200px
}
{ )img:nth-of-type(2
;)shape-outside: circle(80px at 50% 50%
;shape-margin: 10px
;float: right
;width: 200px
}
{ p
;text-align: center
;line-height: 30px
}
228
CSS مالحظات للعاملين بلغة Floats العناصر العائمة
HTML ملف •
<img src="http://images.clipartpanda.com/circle-clip-art-
circlergb.jpg">
<img src="http://images.clipartpanda.com/circle-clip-art-
circlergb.jpg">
<p>Some paragraph whose text content is required to be wrapped such
that it follows the curve of
the circle on either side. And then there is some filler text just
to make the text long enough.
Lorem Ipsum Dolor Sit Amet....</p>
ندوقssكل صssروف أن شssو معssا هss وكم،رssول العنصssالت حss بكس10 رضssامش بعssفي هذا المثال ُأضيف ه
. إلعادة تعريف الشكل وجعله دائريًاshape-margin لذلك يجب استخدام الخاصية،الهوامش مربع
229
.10االنتقاالت Transitionsوالحركات
Animations
الوصف الخاصية
تُستعمل لتحديد خاصيات CSSالتي ستخضع لتأثير االنتقال. transition-property
تُحدِّد الزمن الذي يجب انتظاره بين وقوع الحدث الذي سيؤدي إىل
transition-delay
بدء تأثير االنتقال وبين بداية التأثير
إليك مثال بسssيط لتغيssير لssون العنصssر من اللssون األحمssر إىل اللssون األخضssر تssدريجًا باسssتعمال الخاصssية
{ div
;width: 150px
;height: 150px
;background-color: red
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
{ div:hover
;background-color: green
}
><div></div
أربعة معامالت:
( )0،0و P3في النقطة ( ،)1،1وبالتالي يجب أن تكون قيم معامالت الدالة cubic-bezierبين صفر وواحد.
231
CSS مالحظات للعاملين بلغة Animations والحركاتTransitions االنتقاالت
ح فيssو موضssا هss كمcubic-bezier ةssتخدام دالssار ع باسssات التسssع منحنيssير عن جميssيُمكن التعب
:المثال التالي
:مثال
CSS ملف •
div {
height: 100px;
width: 100px;
232
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
{ div:hover
;height: 200px
;width: 200px
}
><div></div
شرح الخاصيات:
:transition-propertyتُحدِّد هذه الخاصية الخاصيات التي ستخضssع لتssأثير االنتقssال .وفي هssذا •
المثال سيزيد ارتفاع وعرض الحاوية تدريج ًيا عند تمرير مؤشر الفأرة فوقها.
:transition-durationتُحدِّد الزمن الذي سيستغرقه تأثير االنتقال للوصssول إىل القيمssة النهائيssة •
للخاصية .وفي هذا المثال تستغرق الخاصية heightثانية واحدة لالنتقال من القيمssة 100بكسssل إىل
:transition-delayتُحدِّد الزمن الذي يجب انتظاره بين وقوع الحدث الذي سssيؤدي إىل بssدء تssأثير •
االنتقال وبين بداية التأثير .وفي هذا المثال يبدأ تأثير االنتقال للخاصية heightلحظ ًيssا (أي فssور تمريssر
مؤشر الفأرة فوق الحاوية) ،بينما يبدأ تأثير االنتقال للخاصية widthبعد مرور ثانية واحدة من ذلك.
مثال:
233
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
{ .example
;height: 100px
;background: #fff
}
{ .example:hover
;height: 120px
;background: #ff0000
}
عند تمرير مؤشر الفأرة عىل أي عنصر يمتلك الصنف .exampleيتحول االرتفssاع مباشssرة إىل 120بكسssل
ويتغير لون الخلفية إىل اللون األحمر ،#ff0000وبإضافة خاصية transitionيُمكن التحكم في المدة الزمنية
{ .example
...
;transition: all 400ms ease
}
transitionفيها.
{ .example
;transition: all 400ms ease
;-moz-transition: all 400ms ease
;-webkit-transition: all 400ms ease
}
234
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
الوصف المعامل
تحدِّد خاصيات CSSالتي ستتأثر بالحركات. property
تُستَعمل لوصف كيف ستتأثر القيم الوسطية لخاصيات CSSبالحركة ،أي أنها تسمح لك
timing-
بتحديد منحني التسار ع acceleration curveللحركة خالل دورة واحدة .انظر دليل
function
منحنيات التسار ع.
ً
مباشرة ،أو ً
فترة من الزمن ،أو البدء تُحدِّد متى ستبدأ الحركة ،ويمكنك تأخير بدء الحركة
delay
ً
مباشرة لكن مع تجاوز جزء من دورة الحركة. البدء
مثال:
{ @keyframes rainbow-background
} ;{ background-color: #ff0000
8.333% } ;{ background-color: #ff8000
} ;16.667% { background-color: #ffff00
} ;25.000% { background-color: #80ff00
} ;33.333% { background-color: #00ff00
} ;41.667% { background-color: #00ff80
} ;50.000% { background-color: #00ffff
} ;58.333% { background-color: #0080ff
} ;66.667% { background-color: #0000ff
} ;75.000% { background-color: #8000ff
} ;83.333% { background-color: #ff00ff
} ;91.667% { background-color: #ff0080
} ;100.00% { background-color: #ff0000
}
{ .RainbowBackground
;animation: rainbow-background 5s infinite
}
235
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
{ @keyframes rainbow-background
} ;{background-color: #ff0000
}
تمثل القيمة %0نُقطة بداية الحركة ،أي األنماط التي ستُطبق عند بدء الحركة ،وتنتقل الحركة تلقائ ًيا للنُقطة
الثانيsssة عنsssد مsssرور %8.333من زمن الحركsssة ،ومن ثم إىل النقطsssة الثالثsssة عنsssد مsssرور %16.667من زمن
الحركة وهكذا.
{ .Rainbowbackground
;animation: rainbow-background 5s infinite
}
..RainbowBackground
( : animation-iteration-countاختياري) يُحدِّد عدد تكرارات الحركة ،ويأخذ القيمة infinite •
( : animation-delayاختياري) يُحدِّد متى سssتبدأ الحركssة ،ويُمكن أن يأخssذ قيم موجبssة أو سssالبة أو •
صفر وهي القيمة االفتراضية له .القيم السssالبة تعssني أن الحركssة سssتبدأ ُمتقدمssة قلياًل حسssب المقssدار
المحدد.
تأخذ الخاصية background-colorفي المثsال التssالي القيمsة FF0000#عنsد النقطsتين %0و %100
لذلك يُمكن تعريف هاتين النقطتين بسطر واحد كما هو موضح بالشيفرة التالية:
236
CSS مالحظات للعاملين بلغة Animations والحركاتTransitions االنتقاالت
-webkit ةssافة البادئssة يجب إضssفحات القديمss@ في المتصkeyframes إن أردت استعمال قاعدة،انتبه
@-webkit-keyframes {}
-webkit-animation: ...
/* * ترتيب الخاصيات/
animation: <duration> <timing-function> <delay> <iteration-count>
<direction> <fill-mode> <play-state> <name>
/* * ترتيب الخاصيات/
animation: <duration> <linear> <delay> <name>
animation: 3s slidein;
/* * ترتيب الخاصيات/
animation: <duration> <name>
animation-duration: 3s;
animation-timing-function: ease-in;
animation-delay: 1s;
animation-iteration-count: 2;
animation-direction: reverse;
animation-fill-mode: both;
animation-play-state: paused;
237
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
animation-name: slidein
تحسين أداء هاتين الخاصssيتين باسssتخدام الخاصssية will-changeالssتي تُخssبر المتصssفح أن هنssاك جssزء من
الصفحة قابل للتغيير في لحظssة زمنيssة معينssة .تأخssذ الخاصssية will-changeأسssماء الخاصssيات الssتي تتssأثر
بالخاصية transitionأو بالقاعدة @keyframesوتخبر المتصفح أن هذه الخاصيات ستتغير في لحظة ما.
{ .example
...
;will-change: transform, opacity
}
التي تأخذها هذه الخاصية إلنشاء تحويالت ثنائية األبعاد ،ويُغطي الفصل القادم التحويالت ثالثية األبعاد.
تُستخدم إلعادة تحجيم أحد العناصر عىل المحورين Xو Yمما يؤدي إىل تكبيره
(scale(x,y
أو تصغيره.
تستخدم لجعل العنصر منحر ًفا ،أي كأنَّنا أمسكنا بضلعين متقابلين من
المستطيل وحركناهما باتجاهين مختلفين ،مما يؤدي إىل تحويل المستطيل (skew(x,y
إىل متوازي أضالع.
تستخدم لجعل العنصر منحر ًفا في االتجاه األفقي (محور .)X (skewX(x
تستخدم لجعل العنصر منحر ًفا في االتجاه الرأسي (محور .)Y (skewY(y
238
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
10.7.1الدالة rotate
الممssرَّرة إليssه،
تستخدم الدالة )( rotateلتدوير العنصر في الفضاء ثنائي األبعاد بمقدار الزاوية <ُ >angle
القيم الموجبة للزاوية ستؤدي إىل تدوير العنصر باتجاه عقارب الساعة ،أما القيم السالبة تُ َ sد ِّور العنصssر في عكس
مثال:
><div class="rotate"></div
{ .rotate
;width: 100px
;height: 100px
;background: teal
;)transform: rotate(45deg
}
ويكssون مركssز الssدوران بشssكل افتراضssي في منتصssف العنصssر ،ويمكن تغيssيره عن طريssق الخاصssية
10.7.2الدالة scale
تستخدم الدالة )( scaleإلعادة تحجيم أحد العناصر مما يssؤدي إىل تكبssيره أو تصssغيره ،وتأخssذ هssذه الدالssة
قيمتين رقميتين < ،>numberالقيمة األوىل sxتؤدي إىل إعادة تحجيم العنصر عىل المحور ،Xأما القيمة الثانيssة
ً
واحدة سيفترض المتصفح أن القيمتان sxو syمتساويتان. ً
قيمة syفتُعيد تحجيمه عىل المحور ،Yوإذا و ّفرنا
239
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
المحدَّد.
السالبة ،لكنها لن تؤدي إىل إعادة تحجيم العنصر وإنما قلبه ( )flipفي االتجاه ُ
مثال:
><div class="scale"></div
{ .scale
;width: 100px
;height: 100px
;background: teal
;)transform: scale(0.5, 1.3
}
10.7.3الدالة skew
تسssتخدم الدالssة )( skewلجعssل العنصssر منحر ًفssا ،أي كأنَّنssا أمسssكنا بضssلعين متقssابلين من المسssتطيل
وحرَّكناهما باتجاهين مختلفين ،مما يردي إىل تحويل المستطيل إىل متوازي أضالع.
ً
قيمة واحد ًة أو قيمتين ،وكال القيمتين هي زاوية ،تؤدي القيمssة األوىل إىل انحssراف العنصssر تأخذ هذه الدالة
عىل المحور ،Xوتؤدي الثانية إىل انحراف العنصر عىل المحور ،Yإذا لم تتوافر القيمة الثانية فستُع ّد أنها صفر.
مثال:
><div class="skew"></div
{ .skew
;width: 100px
;height: 100px
;background: teal
;)transform: skew(20deg, -30deg
}
240
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
10.7.4التحويالت ُ
المتعددة
يُمكن إضافة عدد من التحويالت للعنصر كما هو موضح في المثال التالي:
هذه الشيفرة تُ َد ِّور العنصsر 15درجsة في اتجsاه عقsارب السsاعة ومن ثم تحركsه التجsاه اليمين بمقsدار 200
بكسل ،ويجب مالحظة أن المحاور ستُدور مع العنصر مما يجعل اتجاه التحريك مائل بزاوية 15درجة.
لتحريك العنصر أفق ًيا يجب تغيير ترتيب الخواص كما هو موضح في المثال التالي:
><style
{ .transform
;)transform: translateX(200px) rotate(15deg
}
></style
><div class="transform"></div
النتيجة:
241
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
10.7.5دالة translate
الممsرَّرة إىل الدالssة ،إذ تمثsل القيمsة األوىل
تسssتخدم الدالssة )( translateلتحريsك العنصsر وفsق القيم ُ
التحريك عىل المحور ،Xوتمثل القيمة الثانية التحريssك عىل المحssور ،Yوإذا لم تُحssدد القيمssة الثانيssة فسssيتحرَّك
ً
مئويsssة ً
نسsssبة العنصsssر عىل المحsssور Xفقsssط؛ ويمكن أن تكsssون كال القيمsssتين طsssواًل مطل ًقsssا < >lengthأو
القيم الموجبة ستؤدي إىل تحريك العنصر في االتجاه الموجب للمحور ،والقيم السالبة ستحركه عكس ذلك.
مثال:
><div class="translate"></div
{ .translate
;width: 100px
;height: 100px
;background: teal
;)transform: translate(200px, 50%
}
ويمكن تحريssك العنصssر عىل محssور Xفقssط باسssتعمال الخاصssية translateXأو عىل محssور Yفقssط
{ .translate
;)transform: translateX(200px
}
{ .translate
;)transform: translateY(50%
}
242
CSS مالحظات للعاملين بلغة Animations والحركاتTransitions االنتقاالت
transform-origin الخاصية10.7.6
،رssتجرى عىل العنصssتي سssويالت الssداثيات للتحss بتحديد مبدأ اإلحtransform-origin تسمح الخاصية
داثيات عىلssددان اإلحssان تحssية قيمتssذه الخاصss وتأخذ ه،والقيمة االفتراضية لمبدأ اإلحداثيات هي مركز العنصر
:مثال
HTML ملف •
CSS ملف •
transform {
display: inline-block;
width: 200px;
height: 100px;
background: teal;
transition: transform 1s;
}
.origin1 {
transform-origin: 0 0;
}
.origin2 {
transform-origin: 100% 0;
}
.transform:hover {
transform: rotate(30deg);
}
CSS ملف •
243
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
{ div.needle
;margin: 100px
;height: 150px
;width: 150px
;)transform: rotateY(85deg) rotateZ(45deg
background-image: linear-gradient(to top left, #555 0%, #555
;)40%, #444 50%, #333 97%
;box-shadow: inset 6px 6px 22px 8px #272727
}
><div class="needle"></div
عندما نُطبق خاصية التدوير ،rotateيحدث الدوران حول محور Zفقط ،وفي أفضل األحوال يكون الشssكل
الناتج هو شكل الماس ( ،)diamond shapeلذلك نُضssيف الخاصssية rotateYلضssغط العنصssر في محssور Y
ناتج هذا المثال هو إبرة (مؤشر بوصلة) ترتكز عىل طرفها ،وإلنشssاء إبssرة ترتكssز عىل قاعssدتها يجب اسssتبدال
244
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
>"<div id="title
>"<h1 data-content="HOVER
Hover
></h1
></div
245
CSS مالحظات للعاملين بلغة Animations والحركاتTransitions االنتقاالت
*{margin:0;padding:0;}
html,body{
height:100%;
width:100%;
overflow:hidden;
background:#0099CC;
}
#title{
position:absolute;
top:50%; left:50%;
transform:translate(-50%,-50%);
perspective-origin:50% 50%;
perspective:300px;
}
h1{
text-align:center;
font-size:12vmin;
font-family: 'Open Sans', sans-serif;
color:rgba(0,0,0,0.8);
line-height:1em;
transform:rotateY(50deg);
perspective:150px;
perspective-origin:0% 50%;
}
h1:after{
content:attr(data-content);
position:absolute;
left:0;top:0;
transform-origin:50% 100%;
transform:rotateX(-90deg);
color:#0099CC;
}
#title:before{
content:'';
position:absolute;
top:-150%; left:-25%;
246
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
;width:180%; height:328%
;)background:rgba(255,255,255,0.7
;transform-origin: 0 100%
;)transform: translatez(-200px) rotate(40deg) skewX(35deg
;border-radius:0 0 100% 0
}
النتيجة:
10.9.1الخاصية backface-visibility
تُحدد الخاصية backface-visibilityمsا إذا كsان الوجsه الخلفي للعنصsر ظsاه ًرا للمسsتخدم ،ويكsون
الوجه الخلفي للعنصر ذو خلفية شفافة ،ويسمح بعرض صssورة معكوسssة ( )mirroredللوجssه األمssامي للعنصssر،
:initialتُ ِ
رجع القيمة االبتدائية للخاصية. •
مثال:
247
CSS مالحظات للعاملين بلغة Animations والحركاتTransitions االنتقاالت
<style>
.flip {
-webkit-transform: rotateY(180deg);
-moz-transform: rotateY(180deg);
-ms-transform: rotateY(180deg);
-webkit-backface-visibility: visible;
-moz-backface-visibility: visible;
-ms-backface-visibility: visible;
}
.flip.back {
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
}
</style>
:مثال
HTML ملف •
<div class="cube">
<div class="cubeFace"></div>
<div class="cubeFace face2"></div>
</div>
CSS ملف •
body {
perspective-origin: 50% 100%;
perspective: 1500px;
overflow: hidden;
}
248
CSS مالحظات للعاملين بلغة Animations والحركاتTransitions االنتقاالت
.cube {
position: relative;
padding-bottom: 20%;
transform-style: preserve-3d;
transform-origin: 50% 100%;
transform: rotateY(45deg) rotateX(0);
}
.cubeFace {
position: absolute;
top: 0;
left: 40%;
width: 20%;
height: 100%;
margin: 0 auto;
transform-style: inherit;
background: #C52329;
box-shadow: inset 0 0 0 5px #333;
transform-origin: 50% 50%;
transform: rotateX(90deg);
backface-visibility: hidden;
}
.face2 {
transform-origin: 50% 50%;
transform: rotatez(90deg) translateX(100%) rotateY(90deg);
}
.cubeFace:before, .cubeFace:after {
content: '';
position: absolute;
width: 100%;
height: 100%;
transform-origin: 0 0;
background: inherit;
box-shadow: inherit;
backface-visibility: inherit;
}
.cubeFace:before {
249
CSS مالحظات للعاملين بلغة Animations والحركاتTransitions االنتقاالت
top: 100%;
left: 0;
transform: rotateX(-90deg);
}
.cubeFace:after {
top: 0;
left: 100%;
transform: rotateY(90deg);
}
المتصفحات البادئة
Android, , وما بعدOpera 12 اإلصدارات األحدث من,Google Chrome, Safari
-webkit-
Blackberry, UC
-o-
12 حتى اإلصدارOpera
-xv-
:مثال
transition خاصية •
div {
-webkit-transition: all 4s ease;
-moz-transition: all 4s ease;
-o-transition: all 4s ease;
transition: all 4s ease;
}
transform خاصية •
div {
-webkit-transform: rotate(45deg);
250
مالحظات للعاملين بلغة CSS االنتقاالت Transitionsوالحركات Animations
;)-moz-transform: rotate(45deg
;)-ms-transform: rotate(45deg
;)-o-transform: rotate(45deg
;)transform: rotate(45deg
}
للمزيد من التفاصيل حول التحريك ،ننصحك بقراءة هذه السلسلة ،المرجع الشامل إىل التحريك عبر .CSS
251
.11استعالمات الوسائط Media Queries
تسمح استعالمات الوسائط media queriesبتطssبيق أنمssاط CSSمختلفssة بنssا ًء عىل نssوع جهssاز العssرض
(شاشة أو طابعة أو غير ذلك) وحجمه ،ف ُيحدَّد نوع الجهssاز عن طريssق نsوع الوسssط ،media typeبينمssا تُحsدد
مواصفات الجهاز األخرى مثل اللون وأبعاد شاشة العرض باستخدام خاصيات الوسط .media features
{ ]@media [...
*/القواعد التي ُ
ستطبق عند استيفاء شروط استعلامات الوسيط */
}
{ @media print
*/القواعد التي ُ
ستطبق عند استيفاء شروط استعلامات الوسيط */
}
مثال:
.1يجب عرض الصفحة عىل شاشة ،أي أاَّل تكون مطبوعة أو ما شابه ذلك.
تُطبق القاعدة background-color: skyblueفي حال تحقق الشرطين أعاله ويُصssبح لssون الصssفحة
أزرق سماوي.
تطبق قواعد استعالمات الوسائط بشكل ديناميكي ،أي أنه إذا ُعرضت الصفحة عىل جهاز يستوفي شsروطها
فإنها تُطبق قواعد CSSالخاصة به ،ويتوقف تطبيق هذه القواعد عند تغيير جهاز العرض.
في المثال أعاله ،إذا كان عرض شاشة العرض في البداية أقل من 720بكسل تُطبssق القاعssدة ويُصssبح لssون
الصفحة أزرق سماوي .إذا َقلَّص المستخدم عرض الشاشة (عن طريق تصغير حجم المتصssفح مثاًل ) إىل أقssل من
720بكسل يتوقف تطبيق القاعدة ويتغير لون الصفحة للون المحدد خارج .media query
الوصف المعامل
(اختياري) يُعرِّف الوسط (الجهاز) الذي تُعرض عليه الصفحة، mediatype
(اختياري) يُطبِّق أنماط CSSعىل كل األجهزة عدا الجهاز المحدد به. not
يُحدِّد خاصيات استعالمات الوسائط .الجدول التالي يبين الخاصيات المتاحة. media feature
253
مالحظات للعاملين بلغة CSS استعالمات الوسائط Media Queries
{ @media print
{ html
;background-color: white
}
}
يُمكن إضافة المعامل notقبل نوع الجهsاز لتطsبيق قواعsد CSSعىل كssل األجهsزة عsدا الجهssاز المحsدد ،أو
المعامل onlyوالذي يُطبق قواعد CSSعىل الجهاز المحدد فقط كما هو موضح في األمثلة التالية:
254
مالحظات للعاملين بلغة CSS استعالمات الوسائط Media Queries
Webkitإاَّل انه قد يكون مفيدًا في بعض األحيان ،يوضح المثال التالي كيفية استعمالها:
معلومات أساسية:
الفيزيائية ،وغالبًا ما تكون البكسالت الفيزيائية ثابتة لكل أجهزة العرض بينما تتغير البكسالت المنطقيssة
مع وضوح الشاشة ،فكلَّما زاد وضوح الشاشة تزيد جودة البكسالت.
نسبة بكسالت الجهاز ( )device pixel ratioهي نسبة البكسالت الفيزيائية إىل المنطقية .عىل سبيل •
المثال األجهsزة ،MacBook Pro Retinaو iPhone4لهsا نسsبة بكسssالت ،2أي أن عssدد البكسsالت
255
مالحظات للعاملين بلغة CSS استعالمات الوسائط Media Queries
يوضح الجدول التالي خاصيات الوسيط أو الجهاز media featuresالتي يمكن التعامل معها:
الوصف الخاصية
aspect-ratioنسبة ارتفاع الجهاز إىل عرضه.
تُشير إىل عدد ال ِبتَّات (الثنائيات) المستعملة لتمثيل اللون في جهاز العرض المستهدف،
color
وتكون قيمتها صفر إذا كان الجهاز غير ملون.
تُحدِّد ما إذا كان الجهاز شبكي أم انه يستخدم الصور النقطية. gird
تشير إىل عدد ال ِبتَّات (الثنائيات) في البكسل الواحد عىل جهاز عرض ذو تدرج رمادي. monochrome
تُحدد اتجاه التدوير (أفقي أو رأسي) الذي تُطبَّق فيه قواعد .CSS orientation
الوصف الخاصية
تُطبق أنماط CSSفقط عىل األجهزة التي تطابق نسبة ارتفاعها إىل عرضها
device-aspect-ratio
النسبة المحددة بهذه الخاصية.
256
مالحظات للعاملين بلغة CSS استعالمات الوسائط Media Queries
تُحدد خاصية widthفي استعالمات الوسائط عرض المساحة الفعلية المستعملة لعssرض المحتssوى ،بينمssا
تستخدم العديد من األجهزة عدد من البكسالت الفيزيائية لتمثيل بكسل فيزيssائي واحsد .عىل سssبيل المثsال
وضوح شاشة جهاز iPhone 6 Plusهو 1242 × 2208لكنَّ مساحة العرض الفعلية هي ،414 × 736أي أن
،Responsive web designوذلك ألنها تمكن من تطssبيق قواعssد CSSمختلفssة بنssا ًء عىل حجم ونssوع الجهssاز
257
مالحظات للعاملين بلغة CSS استعالمات الوسائط Media Queries
{ .site-title
;font-size: 80%
}
}
الوصف القيمة
تُضاف فواصل الصفحات تلقائ ًيا. auto
دائما.
ً تُضيف فواصل الصفحات always
تستخدم هذه الخواص عند طباعة صفحات الويب ،لذلك من الشائع استخدامها مع استعالمات الوسائط
مثال:
258
مالحظات للعاملين بلغة CSS استعالمات الوسائط Media Queries
{ @media print
{ p
;page-break-inside: avoid
}
{ h1
;page-break-before: always
}
{ h2
;page-break-after: avoid
}
}
مالحظات:
القاعدة األوىل تمنع إضافة فواصل الصفحات داخل الفقرة ،وبمعssنى آخssر أنهssا تمنssع فصssل الفقssرة عىل •
صفحتين.
القاعدة الثانية تضيف تبدأ صفحة جديدة قبل كssل عناصssر h1أي أن كssل عنصssر h1سssيبدأ في صssفحة •
جديدة.
القاعدة الثالثة تمنع بدء صفحة جديدة بعد عناصر .h2 •
الوصف المعامل
تكون صحيحة إذا كانت الخاصية المحددة مدعومة في المتصفح الذي تُعرض عليه
()property: value
الصفحة.
تكون صحيحة إذا وفقط إذا تحقق الشرطان معً ا. and
11.9استخدام @supports
تسssتعمل @supportsلمعرفssة مssا إذا كssانت الخاصssية مدعومssة في المتصssفح أم ال وتطبيقهssا إذا كssانت
مدعومة ،مثال:
259
CSS مالحظات للعاملين بلغة Media Queries استعالمات الوسائط
من الجيد وضع الجمل المنطقية بين قوسين كما هو موضح في المثال التالي،ولتسهيل قراءة الشيفرة
260
CSS مواضيع متقدمة في.12
Functions الدوال12.1
calc الدالة12.1.1
عssتخدامها في أي موضss ويمكن اس،CSS ياتssابية عىل قيم خاصss بإجراء عمليات حسcalc)( تسمح الدالة
>number< > وtime< > وangle< > وpercentage< > وlength< اتssواع البيانssتخدام أنsه باسssمح فيsس
َ ُي
.>integer< و
#div1 {
position: absolute;
left: 50px;
width: calc(100% - 100px);
border: 1px solid black;
background-color: yellow;
padding: 5px;
text-align: center
}
12.1.2الدالة attr
المحدَّد واسssتخدامها في أنمssاط ،CSS
تستخدم الدالة () attrللحصول عىل قيمة إحدى خاصيات العنصر ُ
ويمكن استعمالها ً
أيضا عىل العناصsر الزائفsة pseudo-elementsوفي هsذه الحالsة ستُسsتخدَم قيمsة خاصsية
العنصر األصل.
مثال:
><blockquote data-mark='"'></blockquote
blockquote[data-mark]::before,
{ blockquote[data-mark]::after
;)content: attr(data-mark
}
12.1.3الدالة var
تستخدم الدالة () varللوصول لمتغيرات .CSS
مثال:
{ :root
;--primary-color: blue
}
{ selector
;)color: var(--primary-color
}
262
مالحظات للعاملين بلغة CSS مواضيع متقدمة في CSS
12.1.4الدالة radial-gradient
تستخدم الدالة )( radial-gradientإلنشاء تsدرج لsوني بين لsونين أو أكsثر عىل شsكل أشsعة تبsدأ من
مثال:
12.1.5الدالة linear-gradient
تستخدم الدالة )( linear-gradientإلنشاء تدرج لوني بين لونين أو أكثر عىل امتداد خط مستقيم،
مثال:
12.2المتغريات :الخاصيات ُ
المخصصة في CSS
أسssماء الخاصssيات الssتي تُسssبَق بشssرطتين --مثssل --example-nameتُم ِّثل الخاصssيات المخصصssة
ٌ
قيمة يمكن إعادة استخدامها في المستند عبر الدالة )(.var custom propertiesالتي تُسنَد لها
مثااًل من الشائع إعادة استخدام نفس اللون في عدة أمsاكن في الصssفحة ،لsذلك من األفضsل إنشsاء متغsير
يحمل قيمة هذا اللون واستخدامه مما يُس ِّهل البحث عنه وتعديله في المستقبل.
{ :root
;--red: #b00
;--blue: #4679bd
;--grey: #ddd
}
{ .Bx1
;)color: var(--red
;)background-color: var(--grey
;)border: 1px solid var(--red
}
263
CSS مالحظات للعاملين بلغة CSS مواضيع متقدمة في
:مثال
:root {
--W200: 200px;
--W100: 10px;
}
.Bx2 {
width: var(--W200);
height: var(--W200);
margin: var(--W10);
}
HTML ملف •
CSS ملف •
.button {
--color: green;
padding: .5rem;
border: 1px solid var(--color);
color: var(--color);
}
.button:hover {
--color: blue;
}
.button-red {
--color: red;
}
264
مالحظات للعاملين بلغة CSS مواضيع متقدمة في CSS
النتيجة:
/* The variable names below are all different variables */
; --pcolor:
; --Pcolor:
; --pColor:
يجب أن يكون لكل متغير قيمة (حرف المسافة ( )spaceقيمة صالحة للمتغير) ،مثال:
متغيرات CSSال تدعم التسلسل ،أي ال يمكن استخدام الدالة )( varداخل دالة أخرى ،مثال:
265
CSS مالحظات للعاملين بلغة CSS مواضيع متقدمة في
/* Invalid */
.logo{
--logo-url: 'assets/img/logo.png';
background: url(var(--logo-url));
}
/* Valid */
.logo{
--logo-url: url('assets/img/logo.png');
background: var(--logo-url);
}
/* Invalid */
--width: 10;
width: var(--width)px;
/* Valid */
--width: 10px;
width: var(--width);
/* Valid */
--width: 10;
width: calc(1px * var(--width)); /* multiply by 1 unit to convert */
width: calc(1em * var(--width));
:مثال
HTML ملف •
<div></div>
266
CSS مالحظات للعاملين بلغة CSS مواضيع متقدمة في
<div></div>
<div></div>
<div></div>
CSS ملف •
:root{
--width: 25%;
--content: 'This is desktop';
}
div{
width: calc(var(--width) - 20px);
height: 100px;
}
div:before{
content: var(--content);
}
/* Other Styles */
body {
padding: 10px;
}
div{
267
مالحظات للعاملين بلغة CSS مواضيع متقدمة في CSS
;display: flex
;align-items: center
;justify-content: center
;font-weight:bold
;float:left
;margin: 10px
;border: 4px solid black
;background: red
}
ً
كاملة في المتصفح): النتيجة (الصورة متحركة اضغط عليها لرؤيتها
هذه العقد ما يُعرف بنموذج كائنات CSSأو CSSOMوهو اختصار . CSS Object Model
268
مالحظات للعاملين بلغة CSS مواضيع متقدمة في CSS
.3يدمج المتصفح بين DOMو CSSOMإلنشاء شجرة العرض التي تُمثل الصفحة.
إليك المثال التالي حول إضافة صورة الخلفية background-imageباستخدام نموذج الكائنات .CSSOM
أواُل يجب الحصول عىل نقاط مرجعية تمثل بداية ونهاية القواعد في وثيقة .CSS
stylesheet.insertRule("body { background-image:
url('http://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico'); }",
;)end
في شيفرتك.
BEM •
OOCSS •
SMACSS •
269
مالحظات للعاملين بلغة CSS مواضيع متقدمة في CSS
12.4.1نمط BEM
هي منهجية ُصممت من قبssل شssركة التكنولوجيssا الروسssية ،Yandexومن ثم اكتسssبت شssعبية كبssيرة بين
مبرمجين الويب في الواليات المتحدة و أوروبا الغربية ومنها إىل بقية العالم ،وتُشssير BEMإىل الكلمssات ،Block
و ،containerو ،menuوغيرها.
:Elementsأو العناصر ،وهي أجزاء من الكُتل والتي ليس لها معنى محدد ،مثل ،menu itemوlist •
itemوغيرها.
:Modifiersأو الصفات التعريفية ،وتستخدم لتغيssير طريقssة عssرض أو سssلوك العنصssر ،مثssل الخssواص •
أنماط الكتل ال تعتمد بأي شكل من األشكال عىل بقية العناصر في الصفحة. •
يجب أن تكون أسماء الكُتل قصيرة ،مع تجنب استخدام المحارف ( )-و (_). •
.blockname__element-name--modifiername
مثال:
><style
form { } // Block
.form--theme-xmas { } // Block + modifier
.form--simple { } // Block + modifier
.form__input { } // Block > element
.form__submit { } // Block > element
.form__submit--disabled { } // Block > element + modifier
></style
270
مالحظات للعاملين بلغة CSS مواضيع متقدمة في CSS
للتفصيل أكثر حول ،BEMننصحك باإلطالع عىل مقال «دليلك إىل منهجية .»BEM
271
.13تنسيقات المتصفحات المخصصة
وأداءها
تُضيف المتصفحات تلقائ ًيا بعض األنماط عىل عناصر ،HTMLوتختلssف هssذه األنمssاط بssاختالف المتصssفح
مما يتسبب في ظهور الصفحة بأشكال مختلفة عند عرضها عىل متصفحات مختلفة ،ولتفssادي هssذا األمssر يجب
توحيد أنماط المتصفحات ،ومن الشائع استخدام مكتبة normalize.cssوالتي تضssبط بعض األنمssاط وتُصssحح
لتوحيدها في جميع المتصفحات ،بينما تُزيsل الثانيsة جميsع األنمsاط االفتراضsية من العناصsر ،ممsا يعsني أنsك
/**
* 1. توحيد نوع الخط في جميع المتصفحات
* 2. تصحيح ارتفاع السطر وتوحيده في جميع المتصفحات
* 3. Safari منع تعديل حجم الخط عند تغيير اتجاه العرض في متصفح
*/
/* Document
======================================================================
==== */
html {
font-family: sans-serif; /* 1 */
line-height: 1.15; /* 2 */
-ms-text-size-adjust: 100%; /* 3 */
-webkit-text-size-adjust: 100%; /* 3 */
}
/*
======================================================================
==== */
/**
* إزالة الهوامش
*/
body {
273
مالحظات للعاملين بلغة CSS تنسيقات المتصفحات المخصصة وأداءها
;margin: 0
}
**/
تصحيح طريقة العرض *
*/
article,
aside,
footer,
header,
nav,
{ section
;display: block
}
**/
تصحيح حجم الخط والهوامش *
*/
{ h1
;font-size: 2em
;margin: 0.67em 0
}
العاشر واإلصدارات التي تليه ،مما يسمح للمبرمج بضبط األنماط بنا ّء عىل ما إذا كان المستخدم يسssتخدم وضssع
active •
black-on-white •
white-on-black •
مثال:
274
مالحظات للعاملين بلغة CSS تنسيقات المتصفحات المخصصة وأداءها
;background: #fff
;color: #000
}
}
في هذا المثال يتغير لون خلفية العنصر headerإىل اللون األبيض ولون الكتابة للون األسود إذا كان وضssع
مثال:
في هذا المثال يتغير لون خلفية العنصر headerإىل اللون األسود ولون الكتابة للون األبيض إذا كان وضssع
13.3أداء المتصفحات
{ #box
;left: 0
;top: 0
;transition: left 0.5s, top 0.5s
;position: absolute
;width: 50px
;height: 50px
;background-color: gray
275
مالحظات للعاملين بلغة CSS تنسيقات المتصفحات المخصصة وأداءها
}
{ #box.active
;left: 100px
;top: 100px
}
تستغرق الصفحة حوالي 11.7ملي ثانية للتحميل ،ومن ثم تستغرق 9.8ملي ثانية إلعssادة رسssم الصssندوق
ولتحسين األداء وتسريع تحميل الصفحة يجب استخدام الخssواص transformو opacityللحصssول عىل
276
مالحظات للعاملين بلغة CSS تنسيقات المتصفحات المخصصة وأداءها
{ #box
;left: 0
;top: 0
;position: absolute
;width: 50px
;height: 50px
;background-color: gray
;transition: transform 0.5s
;)transform: translate3d(0, 0, 0
}
#box.active
;)transform: translate3d(100px, 100px, 0
}
تستغرق الصفحة حوالي 1.3ملي ثانية للتحميل ،ومن ثم تستغرق 2.0ملي ثانية إلعادة رسم الصندوق في
الموضع الجديد.
277
مالحظات للعاملين بلغة CSS تنسيقات المتصفحات المخصصة وأداءها
278
أحدث إصدارات أكاديمية حسوب