انتخابگرهای بیشتر و تصویر پسزمینه
تا اینجا تنها سه انتخابگر بلد بودیم. در این فصل چهار انتخابگر تازه یاد میگیریم که کد CSS را کوتاهتر و دقیقتر میکنند.
۱. انتخابگر گروهی
گاهی چند عنصر مختلف باید استایل یکسانی بگیرند. به جای تکرار، نامشان را با ویرگول پشت سر هم مینویسیم.
/* روش طولانی */
h1 { color: #2f4f4f; }
h2 { color: #2f4f4f; }
h3 { color: #2f4f4f; }
/* روش کوتاه با انتخابگر گروهی */
h1, h2, h3 {
color: #2f4f4f;
font-family: Tahoma, sans-serif;
}
انتخابگر گروهی: نمونه 01-group-selector
شرح مثال
ویرگول بین انتخابگرها معنی «و» میدهد: این قانون روی
h1 و h2 و h3، هر سه، اعمال میشود. هر نوع انتخابگری را
میشود در گروه آورد، حتی مخلوطی از تگ و کلاس و آیدی:
h1, .title, #main { ... }
h1, h2 با h1 h2 دو چیز کاملاً متفاوتاند.
اولی یعنی «h1 و h2»، دومی یعنی «هر h2 که داخل یک h1 باشد».
فراموش کردن یک ویرگول، رایجترین دلیل «چرا استایلم اعمال نمیشود» است.
۲. انتخابگر فرزندی
این انتخابگر میگوید «تنها عنصرهایی که داخل فلان عنصر هستند». فاصله بین دو نام، همین معنی را میدهد.
/* فقط پاراگرافهایی که داخل جعبه معرفی هستند */
.intro p {
color: #555555;
font-size: 18px;
}
/* فقط لینکهایی که داخل منو هستند */
.menu a {
color: white;
text-decoration: none;
}
/* فقط موردهای فهرستی که داخل پاورقی هستند */
.footer li {
color: gray;
}
انتخابگر فرزندی: نمونه 02-descendant-selector
شرح مثال
فرض کنید صفحه شما بیست لینک دارد اما تنها میخواهید لینکهای منو سفید باشند. اگر بنویسید a { color: white; } همه لینکها سفید میشوند و لینکهای وسط متن ناخوانا. با .menu a تنها لینکهای داخل منو را هدف میگیریم.
این انتخابگر تا هر عمقی کار میکند. اگر لینک داخل یک li و آن هم داخل یک ul و آن هم داخل menu. باشد، بار دیگر .menu a پیدایش میکند.
بدون آن، مجبور بودید به تکتک عنصرها کلاس بدهید. با آن، به والد یک کلاس میدهید و همه فرزندانش را کنترل میکنید. این یعنی HTML تمیزتر و CSS کوتاهتر.
۳. انتخابگر سراسری
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Tahoma, sans-serif;
}
انتخابگر سراسری: نمونه 03-universal-selector
شرح مثال
علامت ستاره یعنی «هر عنصری در صفحه، بدون استثنا». این همان کدی است که در فصل چهارم معرفی شد و از این پس در ابتدای هر فایل CSS مینویسیمش.
دلیل هر خط:
-
margin: 0وpadding: 0فاصلههای پیشفرض مرورگر را پاک میکنند. مرورگرها خودشان به عنوانها و پاراگرافها فاصله میدهند و این فاصله در مرورگرهای مختلف کمی فرق دارد. با صفر کردن، از یک نقطه شروع یکسان و قابل پیشبینی آغاز میکنیم. -
box-sizing: border-boxهمان راهحل فصل قبل. -
font-familyقلم را برای کل صفحه یکسان میکند و در فصل بعد کامل توضیح داده میشود.
انتخابگر سراسری روی هزاران عنصر اعمال میشود و اگر بسیار از آن استفاده کنید، مرورگر کند میشود. معمولاً تنها یک بار در ابتدای فایل و برای همین سه چهار خط از آن استفاده میکنیم.
۴. شبهکلاس hover
تا اینجا استایلها ثابت بودند. حالا اولین استایل «واکنشی» را میبینیم: استایلی که تنها وقتی موس روی عنصر میرود اعمال میشود.
.btn {
background-color: #2f4f4f;
color: white;
padding: 12px 25px;
border-radius: 8px;
text-decoration: none;
}
.btn:hover {
background-color: #ff6347;
}
.card:hover {
border-color: #ff6347;
}
a:hover {
color: #ff6347;
}
شبهکلاس hover: نمونه 04-pseudo-class-hover
شرح مثال
hover: با دو نقطه به انتخابگر میچسبد و یعنی «در حالتی که موس روی این عنصر است». به این نوع انتخابگر شبهکلاس میگویند، چون مانند کلاس عمل میکند اما ما آن را در HTML ننوشتهایم؛ مرورگر خودش بر اساس وضعیت کاربر آن را اعمال و بعد برمیدارد.
دقت کنید که در قانون hover: تنها چیزی را مینویسیم که میخواهیم تغییر کند. بقیه ویژگیها از قانون اصلی سر جایشان میمانند. اینجا تنها رنگ پسزمینه عوض میشود و padding و گردی گوشه دستنخورده باقی میمانند.
وقتی موس روی چیزی میرود و آن چیز واکنش نشان میدهد،
کاربر میفهمد که «این قابل کلیک است». یک دکمه بدون
hover: شبیه یک تصویر بیجان است.
در فصل هشتم یاد میگیریم این تغییر را نرم و تدریجی هم بکنیم.
گوشی موس ندارد، پس hover: روی آن عملاً کار نمیکند. هیچوقت اطلاعات مهم را تنها با hover نشان ندهید، چون کاربر موبایل هرگز آن را نخواهد دید.
۵. تصویر پسزمینه
body {
background-image: url('images/pattern.png');
}
.hero {
height: 400px;
background-image: url('images/school.jpg');
}
تصویر پسزمینه: نمونه 05-background-image
شرح مثال
مسیر تصویر داخل url() و بین گیومه نوشته میشود.
قوانین مسیر دقیقاً همانهایی است که در فصل دوم دیدیم،
با یک تفاوت مهم: مسیر نسبت به محل فایل CSS
محاسبه میشود، نه فایل HTML. اگر فایل CSS شما در پوشه دیگری باشد،
باید مسیر را از آنجا حساب کنید.
تفاوت با تگ img
<img> | background-image | |
|---|---|---|
| کجا نوشته میشود | HTML | CSS |
| چه زمانی استفاده کنیم | تصویر بخشی از محتواست | تصویر تنها تزیین است |
| نمونه | عکس یک محصول، عکس پروفایل | پسزمینه سربرگ، بافت تزیینی |
| متن جایگزین دارد | بله، با alt |
خیر |
سؤال ساده برای تصمیمگیری: اگر این تصویر حذف شود، آیا معنی صفحه ناقص میشود؟
اگر بله، از img استفاده کنید. اگر نه، پسزمینه بهتر است.
۶. تنظیمات تصویر پسزمینه
تصویر پسزمینه به تنهایی معمولاً نتیجه خوبی نمیدهد. اگر تصویر کوچک باشد تکرار میشود و اگر بزرگ باشد بریده میشود. سه ویژگی این را کنترل میکنند.
.hero {
height: 400px;
background-image: url('images/school.jpg');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
.pattern {
background-image: url('images/dot.png');
background-repeat: repeat;
}
.corner-logo {
background-image: url('images/logo.png');
background-repeat: no-repeat;
background-position: top left;
background-size: 80px;
}
تنظیمات پسزمینه: نمونه 06-background-position-size-repeat
شرح مثال
background-repeat تکرار تصویر را کنترل میکند:
| مقدار | نتیجه |
|---|---|
repeat | پیشفرض. تصویر مانند کاشی در هر دو جهت تکرار میشود. |
no-repeat | تنها یک بار نمایش داده میشود. |
repeat-x | تنها به صورت افقی تکرار میشود. |
repeat-y | تنها به صورت عمودی تکرار میشود. |
background-size اندازه تصویر را تعیین میکند:
| مقدار | نتیجه |
|---|---|
cover |
تصویر کل جعبه را پر میکند. نسبت تصویر حفظ میشود اما ممکن است لبههایش بریده شود. پرکاربردترین حالت. |
contain |
کل تصویر دیده میشود، اما ممکن است بخشی از جعبه خالی بماند. |
100px 50px |
اندازه دقیق و دستی. |
background-position میگوید کدام قسمت تصویر دیده شود. مقدارهای رایج: center، top، bottom یا ترکیبی مانند top left. وقتی از cover استفاده میکنید، center معمولاً بهترین انتخاب است، چون مهمترین بخش هر عکسی معمولاً وسطش است.
برای هر سربرگ بزرگ با عکس، این سه خط را با هم بنویسید. این ترکیب باعث میشود عکس در هر اندازه صفحهای درست و بدون کشیدگی دیده شود.
background-size: cover;
background-position: center;
background-repeat: no-repeat;
۷. نمونه نهایی فصل
<body>
<div class="hero">
<h1>مؤسسه فنی و آموزشی کادوس</h1>
<p>آموزش مهارتهای واقعی بازار کار</p>
</div>
<div class="menu">
<a href="#">خانه</a>
<a href="#">دورهها</a>
<a href="#">تماس</a>
</div>
<div class="content">
<h2>درباره ما</h2>
<p>ما از سال ۱۳۹۰ در حال آموزش هستیم.</p>
<a href="#" class="btn">مشاهده دورهها</a>
</div>
</body>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Tahoma, sans-serif;
}
.hero {
height: 350px;
background-image: url('images/campus.jpg');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
color: white;
padding: 120px 40px;
text-align: center;
}
.menu {
background-color: #2f4f4f;
padding: 15px;
text-align: center;
}
.menu a {
color: white;
text-decoration: none;
padding: 8px 18px;
}
.menu a:hover {
color: #ff6347;
}
.content {
padding: 40px;
}
h1, h2 {
margin-bottom: 15px;
}
.content h2 {
color: #2f4f4f;
}
.btn {
display: inline-block;
background-color: #2f4f4f;
color: white;
text-decoration: none;
padding: 12px 28px;
border-radius: 8px;
margin-top: 20px;
}
.btn:hover {
background-color: #ff6347;
}
نمونه نهایی فصل: نمونه 07-final-example
شرح مثال
هر چهار انتخابگر تازه این فصل در این کد استفاده شدهاند:
- سراسری: قانون ستاره در بالای فایل، پایه کار را یکدست میکند.
-
گروهی:
h1, h2به هر دو عنوان با یک قانون فاصله پایین میدهد. - فرزندی:
.menu aتنها لینکهای منو را سفید میکند و.content h2تنها عنوان داخل محتوا را رنگ میدهد. دقت کنید لینکbtn.که داخل محتواست، رنگ سفید منو را نمیگیرد. - hover: هم روی لینکهای منو و هم روی دکمه، تا کاربر بفهمد اینها قابل کلیک هستند.
در بخش hero. هم سه تنظیم پسزمینه را با هم میبینید. padding: 120px 40px باعث میشود متن در ارتفاع سربرگ پایینتر بیاید و وسطتر به نظر برسد. در فصل هفتم روش بسیار بهتری برای وسطچین کردن عمودی یاد میگیریم.
یک نکته تازه هم اینجا هست: display: inline-block روی دکمه. چون a یک عنصر درونخطی است، padding عمودی روی آن درست عمل نمیکند. این خط رفتارش را عوض میکند تا مانند یک جعبه واقعی رفتار کند. درباره display در فصل ششم و هفتم بیشتر میخوانیم.
پوشه 05-selectors-and-background شامل نمونههای
01-group-selector تا 07-final-example.
خلاصه فصل
| انتخابگر یا ویژگی | معنی |
|---|---|
h1, h2, h3 | گروهی: هر سه |
.menu a | فرزندی: لینکهای داخل منو |
* | سراسری: همه عنصرها |
a:hover | وقتی موس روی لینک است |
background-image | تصویر پسزمینه |
background-size: cover | پر کردن کامل جعبه |
background-position: center | نمایش مرکز تصویر |
background-repeat: no-repeat | بدون تکرار |
تمرینهای فصل پنج
- یک منوی افقی با پنج لینک بسازید که با رفتن موس روی هر کدام، رنگش عوض شود.
- یک سربرگ بزرگ با تصویر پسزمینه بسازید و هر سه تنظیم پسزمینه را روی آن اعمال کنید.
- یک بار
background-sizeرا ازcoverبهcontainعوض کنید و تفاوت را ببینید. - با انتخابگر گروهی، هر شش سطح عنوان را با یک قانون همرنگ کنید.
- در صفحهای که دو گروه لینک دارد، با انتخابگر فرزندی تنها یکی از گروهها را استایل بدهید.