سبک و الگوی جعبه
CSS تعیین میکند هر عنصر چه ظاهری دارد و چقدر جا میگیرد. در سلام هر ویژگی CSS را مثل یک ویژگی عنصر مینویسید، با فاصله به جای خط تیره، و مترجم پیش از ساخته شدن صفحه آن را بررسی میکند. این درس از صفر شروع میکند: مقدارها چطور نوشته میشوند، الگوی جعبه عنصر را چطور اندازه میگیرد، و کدام ویژگیها اندازه، فضا، نمایش و سرریز را تعیین میکنند.
ویژگیهای سبک همان ویژگیهای عنصرند
ویژگی سبک درست مثل هر ویژگی دیگر نوشته میشود: نام = مقدار درون عنصر. در نامها به جای خط تیرهی CSS فاصله میآید، پس max-width میشود بیشینه عرض و border-radius میشود گردی کادر. نام غلط خطای ترجمه است و پیام نزدیکترین نام درست را پیشنهاد میدهد. نامهای انگلیسی هم در هر پرونده کار میکنند. برای بعضی ویژگیها چند نام فارسی هست: فضا و حاشیه هر دو marginاند، و فاصله و فاصله داخلی هر دو padding. در این درس همیشه نام کوتاهتر را میبینید.
سبکها روی خود عنصر نمیمانند. مترجم سبکهای هر عنصر را در یک قاعده زیر یک کلاس کوتاه تولیدشده جمع میکند و قاعدهها را در برگهی سبک میگذارد. جعبه: فاصله = 20 پس زمینه = "#eef" پایان به <div class="a"> و قاعدهی .a{padding:20px;background:#eef} تبدیل میشود. عنصرهایی که سبکهایشان یکی است یک کلاس را میان خود شریک میشوند و صفحه کوچک میماند.
میتوانید به عنصر کلاس خودتان را هم بدهید، اما نام کلاس باید یک مجموعه سبک را بگوید. اگر دو عنصر یک کلاس را با سبکهای متفاوت بگیرند، مترجم بهجای اینکه یکی بیصدا دیگری را بپوشاند با خطای E136 میایستد. به هر کدام کلاس جدا بدهید، کلاس را بردارید و بگذارید مترجم نام بگذارد، یا کلاس مشترک را یکبار با قاعدهی سراسری سبک بدهید (پایینتر آمده).
مقدارها
بیشتر مقدارها از چهار نوعاند. عدد تنها هر جا طول بخواهند پیکسل است: فاصله = 24 یعنی 24px و 1.5 یعنی 1.5px. ویژگیهایی که عدد ساده میگیرند، مثل ارتفاع خط و نسبت ابعاد، آن را همان عدد نگه میدارند. رشته هر چیز دیگری را در خود جا میدهد: یکا، رنگهایی که با # شروع میشوند، چند کلمه. کلیدواژه را میشود بدون گیومه نوشت: نمایش = فلکس، سرریز = پنهان، رنگ = سفید؛ هر کلیدواژه را به فارسی یا همان واژهی انگلیسی CSS میتوانید نوشت، اما کلیدواژهی فارسی چندکلمهای مثل "جعبه کادر" باید میان گیومه باشد. و تابع با آرگومان ساده را هم میشود بیگیومه نوشت، مثل پس زمینه = rgb(37, 99, 235).
چند طول در یک رشته یک میانبر میسازند. فاصله = "8 40" یعنی 8px 40px: عدد اول برای بالا و پایین است و دوم برای چپ و راست. تا چهار مقدار مجاز است، عدد بییکا px میگیرد و عددی که یکا دارد آن را نگه میدارد، پس "1rem 2" یعنی 1rem 2px.
صفحه:
عنوان = "مقدارهای سبک"
سراسری: اندازه جعبه = "border-box" پایان
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = "p" فضا = "0 0 10px" جهت متن = ltr پایان
پاراگراف: محتوا = "فاصله\u200e = 24" فاصله = 24 پس زمینه = "#e0f2fe" پایان
پاراگراف: محتوا = "فاصله\u200e = 8 40" فاصله = "8 40" پس زمینه = "#dcfce7" پایان
پاراگراف: محتوا = "کادر\u200e = 3px dashed" فاصله = 12 کادر = "3px dashed #0f766e" پایان
پاراگراف: محتوا = "عرض\u200e = 60%" فاصله = 12 عرض = "60%" پس زمینه = "#fef9c3" پایان
پاراگراف:
محتوا = "پس زمینه\u200e = linear-gradient(...)"
فاصله = 12
رنگ = white
پس زمینه = "linear-gradient(90deg, #0f766e, #2563eb)"
پایان
پایانمقدارها را میشود هنگام ترجمه هم حساب کرد: فاصله = گام * 2 + "px" از یک ثابت استفاده میکند (بخش «ثابتها و بخشها» پایینتر نشان میدهد چطور تعریف میشود) و + عدد و یکا را به متن میچسباند.
هر مقداری که # یا % دارد، یا درون تابع یکا دارد، یا فهرستی با فاصله است، باید میان گیومه باشد. مترجم نوع بیگیومهاش را نمیپذیرد، و calc() بیگیومه بدتر است: پذیرفته میشود و بیصدا به یک calc() خالی تبدیل میشود. همیشه عرض = "calc(100% - 20px)" بنویسید.
یکاها
طول یک عدد است و یک یکا. آنهایی که همیشه به کار میبرید:
px: یک پیکسل CSS. برای کادرها و جزئیات ریز خوب است.rem: اندازهی قلم صفحه، بهطور معمول ۱۶ پیکسل. اندازهی بر پایهیremوقتی خواننده قلم مرورگر را بزرگ میکند بزرگ میشود، پس برای متن و فاصلهها از آن استفاده کنید.em: اندازهی قلم خود عنصر، که باعث میشود فاصلهی درونی با اندازهی متن همان جعبه تغییر کند.%: سهمی از والد. برای عرض و فاصلهها و فضاهای افقی پهنای والد است و برای ارتفاع، ارتفاع والد.vwوvh: یک صدم پهنا یا ارتفاع پنجره.vminوvmaxکوچکتر یا بزرگتر آن دو را برمیدارند.ch: پهنای رقم 0 در قلم کنونی.بیشینه عرض = "65ch"سطرهای متن را در طولی خوانا نگه میدارد.cmوmmوin: طولهای دنیای واقعی، برای چاپ.
صفحه:
عنوان = "یکاها"
سراسری: اندازه جعبه = "border-box" پایان
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = "p" فضا = "0 0 8px" فاصله = "6px 10px" پس زمینه = "#99f6e4" فضای سفید = "بدون پیچش" جهت متن = ltr پایان
پاراگراف: محتوا = "200px" عرض = "200px" پایان
پاراگراف: محتوا = "12rem" عرض = "12rem" پایان
پاراگراف: محتوا = "50%" عرض = "50%" پایان
پاراگراف: محتوا = "40vw" عرض = "40vw" پایان
پاراگراف: محتوا = "24ch" عرض = "24ch" پایان
پاراگراف: محتوا = "5cm" عرض = "5cm" پایان
پایانیکای fr، سهمی از فضای آزاد در شبکه، به درس چیدمان تعلق دارد.
رنگها
هر جا رنگ بخواهند میتوانید آن را با هر نمادگذاری CSS بنویسید. رنگ متن، پسزمینه و پرکنندههای پرزرقوبرق درس خودشان را دارند (پسزمینهها و رنگها)؛ اینجا فقط فهرست راههای نوشتن مقدار است.
- نام:
teal،crimson،whiteیا نام فارسی مثلسفید. - هگز:
"#0f766e"، شکل کوتاه"#fa0"و با شفافیت"#0f766e80". rgb(37, 99, 235): قرمز، سبز و آبی از ۰ تا ۲۵۵. برای شفافیت"rgb(37 99 235 / 50%)"بنویسید.hsl(160, 84%, 39%): فام بهصورت زاویه روی چرخ رنگ، بعد اشباع و روشنایی. با دست تنظیمش آسان است.oklch(0.7 0.15 30): روشنایی، غلظت و فام در فضایی که گامهای برابر برابر دیده میشوند.color-mix(in srgb, red 40%, white): آمیزهی دو رنگ.transparentوcurrentColor. دومی رنگ متن خود عنصر است، پس کادری که با آن نوشته شود همرنگ متن میماند.
صفحه:
عنوان = "رنگها"
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = "p" فضا = "0 0 6px" فاصله = "8px 12px" جهت متن = ltr پایان
پاراگراف: محتوا = "teal" پس زمینه = teal رنگ = white پایان
پاراگراف: محتوا = "#f59e0b" پس زمینه = "#f59e0b" پایان
پاراگراف: محتوا = "rgb(37, 99, 235)" پس زمینه = rgb(37, 99, 235) رنگ = white پایان
پاراگراف: محتوا = "hsl(160, 84%, 39%)" پس زمینه = "hsl(160, 84%, 39%)" پایان
پاراگراف: محتوا = "oklch(0.7 0.15 30)" پس زمینه = "oklch(0.7 0.15 30)" پایان
پاراگراف: محتوا = "color-mix(in srgb, red 40%, white)" پس زمینه = "color-mix(in srgb, red 40%, white)" پایان
جعبه:
پس زمینه = "#fde68a"
فاصله = 6
پاراگراف: محتوا = "transparent: دیدن آنچه پشت آن است" پس زمینه = transparent پایان
پایان
پاراگراف: محتوا = "currentColor: کادر همرنگ متن" رنگ = "#7c3aed" کادر = "3px solid currentColor" پایان
پایانالگوی جعبه
هر عنصر یک جعبهی مستطیل است با چهار لایه، از درون به بیرون. محتوا متن یا فرزندان است. فاصله (padding) جای خالی میان محتوا و کادر است و پسزمینهی عنصر در آن دیده میشود. کادر (border) خطی است که دور فاصله میکشد. فضا (margin) جای خالی بیرون کادر است که جعبههای دیگر را دور نگه میدارد. فاصله و فضا هر دو یک تا چهار مقدار میگیرند، به ترتیب بالا، راست، پایین، چپ، و هر طرف ویژگی خودش را هم دارد: فاصله بالا، فضا چپ و مانند آن.
صفحه:
عنوان = "جعبهی عنصر"
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
جعبه:
پس زمینه = "#e5e7eb"
عرض = 320
جعبه:
فضا = 24
کادر = "8px solid #1d4ed8"
فاصله = 24
پس زمینه = "#bfdbfe"
جعبه:
پس زمینه = white
فاصله = 8
محتوا = "محتوا"
پایان
پایان
پایان
پاراگراف: محتوا = "خاکستری: فضای بیرون جعبه (فضا). خط آبی تیره: کادر. آبی روشن: فاصلهی درونی. سفید: محتوا." پایان
پایانپرسش بعدی این است که عرض = 240 چه چیزی را اندازه میگیرد. بهطور پیشفرض (content-box) فقط محتوا را، پس جعبهای با ۲۰ پیکسل فاصلهی درونی و کادر ۶ پیکسلی در هر طرف در واقع 240 + 40 + 12 = 292 پیکسل پهنا دارد، و چیدمانی از چند جعبهی اینچنینی هرگز آنطور که نوشتهاید جمع نمیشود. با اندازه جعبه = "border-box" عرض فاصله و کادر را هم شامل میشود و ۲۴۰ یعنی ۲۴۰. دکمه را بزنید تا همان جعبه را با هر دو روش اندازهگیری ببینید.
واردسازی دام
صفحه:
عنوان = "اندازه جعبه"
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = ".border" اندازه جعبه = "border-box" پایان
جعبه:
شناسه = "b"
عرض = 240
فاصله = 20
کادر = "6px solid #0f766e"
پس زمینه = "#ccfbf1"
محتوا = "عرض = 240"
پایان
پاراگراف: شناسه = "out" محتوا = "عرض جعبه اکنون 292 پیکسل است" پایان
دکمه:
محتوا = "تغییر اندازه جعبه"
کلیک = ():
دام.تعویض کلاس(دام.با شناسه("b")، "border")
پهنا := دام.دریافت خاصیت عددی(دام.با شناسه("b")، "offsetWidth")
دام.تنظیم متن(دام.با شناسه("out")، "عرض جعبه اکنون " + پهنا + " پیکسل است")
پایان
پایان
پایانبرای همین تقریباً هر صفحه با یک سطر ثابت شروع میشود. عنصر سراسری بدون گزینشگر روی همهی عنصرهای صفحه اثر میگذارد:
سراسری: اندازه جعبه = "border-box" پایان
عرض، ارتفاع و حدشان
عرض و ارتفاع اندازه را تعیین میکنند. بهطور پیشفرض یک بلوک به پهنای والدش است و به بلندی محتوایش، و auto نام همین پیشفرض است. درصد سهمی از والد است، هرچند ارتفاع درصدی فقط وقتی کار میکند که والد ارتفاع خودش را داشته باشد. چون اندازهی ثابت با عوض شدن پنجره یا متن میشکند، بیشتر وقتها بهجایش حد میگذارید: کمینه عرض و بیشینه عرض، کمینه ارتفاع و بیشینه ارتفاع. کمینه بر بیشینه برتری دارد و بیشینه بر عرض. اندازههای min-content، max-content و fit-content جعبه را با متنش اندازه میکنند. نسبت ابعاد جعبه را در شکلش نگه میدارد ("16 / 9")، وقتی یک ضلع را بدهید و ضلع دیگر را آزاد بگذارید.
صفحه:
عنوان = "اندازهها"
سراسری: اندازه جعبه = "border-box" پایان
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = "p" فضا = "0 0 8px" فاصله = 10 پس زمینه = "#e0e7ff" جهت متن = ltr پایان
پاراگراف: محتوا = "کمینه عرض\u200e = 12rem, بیشینه عرض\u200e = 24rem, عرض\u200e = 50%" عرض = "50%" کمینه عرض = "12rem" بیشینه عرض = "24rem" پایان
پاراگراف: محتوا = "عرض\u200e = clamp(10rem, 40%, 20rem)" عرض = "clamp(10rem, 40%, 20rem)" پایان
پاراگراف: محتوا = "ارتفاع\u200e = 4rem" ارتفاع = "4rem" پایان
جعبه:
عرض = 200
نسبت ابعاد = "16 / 9"
پس زمینه = "#c7d2fe"
فاصله = 10
جهت متن = ltr
محتوا = "نسبت ابعاد\u200e = 16 / 9"
پایان
پایاندستور آمادهی بسیار رایج عرض = "100%" است با بیشینه عرض = "40rem"، و گاهی فضا = "0 auto" برای وسطچین: جعبهای که روی تلفن همهی صفحه را پر میکند و روی نمایشگر بزرگ از رشد میایستد.
ویژگیهای منطقی
چپ و راست جهتهای فیزیکیاند. صفحهی انگلیسی سطرهایش را از چپ شروع میکند، صفحهی فارسی از راست، و چیدمانی که با فضا چپ ساخته شده برای زبان دیگر باید دوباره نوشته شود. ویژگیهای منطقی سمتها را با جریان متن نام میبرند. راستای خطی (inline) راستایی است که متن در آن میرود و راستای بلوکی (block) راستایی است که سطرها در آن روی هم مینشینند. در فارسی و انگلیسی خطی افقی است و بلوکی عمودی، و آغاز جایی است که سطر از آن شروع میشود: در فارسی راست، در انگلیسی چپ.
پس اندازه خطی همان عرض است و اندازه بلوکی همان ارتفاع، فضا ابتدا و فاصله انتها سمتهای آغاز و پایان سطرند، و فضا بلوکی و فاصله بلوکی بالا و پایین. نمونهی زیر به دو جعبه دقیقاً یک سبک را میدهد و جهت را روی پوششهایشان میگذارد: تورفتگی و خط کناری خودشان جابهجا میشوند.
صفحه:
عنوان = "ویژگیهای منطقی"
سراسری: اندازه جعبه = "border-box" پایان
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = "p" فضا = "0 0 12px" پایان
جعبه:
جهت = ltr
پاراگراف:
اندازه خطی = "70%"
فضا ابتدا = 40
فاصله خطی = "24 8"
فاصله بلوکی = 10
کادر خطی آغاز = "6px solid #0f766e"
پس زمینه = "#ccfbf1"
محتوا = "جهت چپ به راست: آغاز همان سمت چپ است"
پایان
پایان
جعبه:
جهت = rtl
پاراگراف:
اندازه خطی = "70%"
فضا ابتدا = 40
فاصله خطی = "24 8"
فاصله بلوکی = 10
کادر خطی آغاز = "6px solid #0f766e"
پس زمینه = "#ccfbf1"
محتوا = "جهت راست به چپ: همان سبکها، آینهوار"
پایان
پایان
پایانبرای سایتی با هر دو زبان، ویژگیهای منطقی معمولاً انتخاب بهتریاند. چپ و راست را وقتی به کار ببرید که واقعاً صفحهنمایش را میخواهید، مثلاً سایهای که باید به راست بیفتد.
فضاها در عمل
چهار قاعده دربارهی فضا بیشتر شگفتیها را توضیح میدهد.
- وسطچین کردن. بلوکی که عرض دارد و
فضا = "0 auto"وسط مینشیند:autoفضای آزاد را میان دو سمت تقسیم میکند. بلوک بدون عرض همهی والد را پر میکند و چیزی برای تقسیم نمیماند. - ادغام شدن. وقتی دو بلوک زیر هماند، فضای میانشان مجموع دو فضا نیست، بزرگتر از آن دو است.
فضا پایین = 40بالایفضا بالا = 20فاصلهی ۴۰ میگذارد. همین میان والد و نخستین یا آخرین فرزندش هم رخ میدهد، وقتی چیزی (فاصله، کادر، ارتفاع) جدایشان نکند. فضاها درون چیدمان فلکس یا شبکه هرگز ادغام نمیشوند. - فضای منفی. فضا میتواند منفی باشد و عنصر را به همسایهاش یا بیرون والدش میکشد. کم استفاده کنید؛ ساختار واقعی را پنهان میکند.
- کدام را به کار ببرم. فاصله وقتی که جا باید بخشی از جعبه باشد و پسزمینهاش را نشان دهد، فضا وقتی که باید جعبههای دیگر را دور کند.
صفحه:
عنوان = "فضای بیرونی"
سراسری: اندازه جعبه = "border-box" پایان
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = "p" فضا = 0 فاصله = 10 پس زمینه = "#fed7aa" جهت متن = ltr پایان
پاراگراف: محتوا = "عرض\u200e = 240, فضا\u200e = 0 auto 30px" عرض = 240 فضا = "0 auto 30px" پایان
پاراگراف: محتوا = "فضا پایین\u200e = 40" فضا پایین = 40 پایان
پاراگراف: محتوا = "فضا بالا\u200e = 20" فضا بالا = 20 پس زمینه = "#fdba74" پایان
پاراگراف: محتوا = "فضا بالا\u200e = -12, فضا چپ\u200e = 40" فضا بالا = -12 فضا چپ = 40 پس زمینه = "#fb923c" پایان
پایاننمایش و دیدپذیری
نمایش تعیین میکند عنصر چطور در چیدمان شرکت کند. بلوکی سطر تازه شروع میکند و همهی پهنا را میگیرد، خطی درون سطر متن مینشیند و عرض و ارتفاع را نادیده میگیرد، و "خطی بلوکی" در سطر مینشیند ولی از آنها پیروی میکند. فلکس و شبکه عنصر را به ظرفی تبدیل میکنند که فرزندانش را میچیند، که موضوع کامل درس چیدمان است. محتوایی (contents) جعبهی خود عنصر را برمیدارد و میگذارد فرزندانش طوری در چیدمان والد شرکت کنند که انگار خودش نیست، و "ریشه جریان" (flow-root) جعبهای میسازد که هر چه درونش است، شناورها هم، در خود نگه میدارد. هر عنصر پیشفرضی دارد: جعبه بلوکی است و تکه خطی.
صفحه:
عنوان = "نمایش"
سراسری: اندازه جعبه = "border-box" پایان
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = "span" عرض = 90 ارتفاع = 40 فاصله = 6 فضا = 2 پس زمینه = "#bbf7d0" کادر = "1px solid #15803d" پایان
سرتیتر: اندازه = 3 محتوا = "خطی (پیشفرض تکه)" پایان
جعبه:
تکه: محتوا = "یک" پایان
تکه: محتوا = "دو" پایان
تکه: محتوا = "سه" پایان
پایان
سرتیتر: اندازه = 3 محتوا = "خطی بلوکی" پایان
جعبه:
تکه: نمایش = "خطی بلوکی" محتوا = "یک" پایان
تکه: نمایش = "خطی بلوکی" محتوا = "دو" پایان
تکه: نمایش = "خطی بلوکی" محتوا = "سه" پایان
پایان
سرتیتر: اندازه = 3 محتوا = "بلوکی" پایان
جعبه:
تکه: نمایش = بلوکی محتوا = "یک" پایان
تکه: نمایش = بلوکی محتوا = "دو" پایان
پایان
پایانبرای پنهان کردن عنصر دو راه دارید که رفتارشان فرق دارد. نمایش = هیچ عنصر را کاملاً از صفحه برمیدارد: جعبهای ندارد و عنصرهای بعدی بالا میآیند. دیدپذیری = پنهان فقط رسم شدنش را متوقف میکند: جایش میماند. در هر دو حالت نمیشود روی عنصر کلیک کرد، صفحهکلید نمیتواند روی آن تمرکز کند و صفحهخوانها از آن میگذرند. دو دکمهی زیر سبک را از یک اسکریپت تنظیم میکنند تا بتوانید پاراگرافِ بعدی را تماشا کنید.
واردسازی دام
صفحه:
عنوان = "پنهان کردن"
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
دکمه:
محتوا = "نمایش: هیچ"
کلیک = ():
اگر دام.دریافت سبک(دام.با شناسه("target")، "display") == "none":
دام.تنظیم سبک(دام.با شناسه("target")، "display"، "")
وگرنه:
دام.تنظیم سبک(دام.با شناسه("target")، "display"، "none")
پایان
پایان
پایان
دکمه:
محتوا = "دیدپذیری: پنهان"
کلیک = ():
اگر دام.دریافت سبک(دام.با شناسه("target")، "visibility") == "hidden":
دام.تنظیم سبک(دام.با شناسه("target")، "visibility"، "")
وگرنه:
دام.تنظیم سبک(دام.با شناسه("target")، "visibility"، "hidden")
پایان
پایان
پایان
پاراگراف: محتوا = "پیش از" پس زمینه = "#e5e7eb" پایان
پاراگراف: شناسه = "target" محتوا = "عنصر هدف" پس زمینه = "#fca5a5" پایان
پاراگراف: محتوا = "پس از" پس زمینه = "#e5e7eb" پایان
پایانسرریز
وقتی محتوا از جعبهاش بزرگتر است، سرریز تکلیف را روشن میکند. با نمایان (پیشفرض) بیرون میریزد و روی همسایهها میافتد. پنهان آن را در کادر میبرد، پیمایشی همیشه نوار پیمایش نشان میدهد، و خودکار فقط وقتی چیزی برای پیمایش هست که تقریباً همیشه همان است که میخواهید. بریده مثل پنهان میبرد ولی هرگز پیمایش را، حتی از یک اسکریپت، مجاز نمیکند، و تنها مقداری است که با فضا برش سرریز کار میکند. سرریز افقی و سرریز عمودی یک راستا را جدا تعیین میکنند و سرریز بلوکی و سرریز خطی شکل منطقی آنهایند که امروز مرورگرهای کمتری میشناسند.
صفحه:
عنوان = "سرریز"
سراسری: اندازه جعبه = "border-box" پایان
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
جعبه:
نمایش = فلکس
پیچش آرایش = "wrap"
شکاف = "40 24"
جعبه: عرض = 150 ارتفاع = 90 فاصله = 8 کادر = "2px solid #6366f1" اندازه قلم = 14 سرریز = نمایان محتوا = "نمایان: متنی که از جعبهاش بلندتر است، پس یا بیرون میریزد، یا بریده میشود، یا نوار پیمایش میگیرد." پایان
جعبه: عرض = 150 ارتفاع = 90 فاصله = 8 کادر = "2px solid #6366f1" اندازه قلم = 14 سرریز = پنهان محتوا = "پنهان: متنی که از جعبهاش بلندتر است، پس یا بیرون میریزد، یا بریده میشود، یا نوار پیمایش میگیرد." پایان
جعبه: عرض = 150 ارتفاع = 90 فاصله = 8 کادر = "2px solid #6366f1" اندازه قلم = 14 سرریز = خودکار محتوا = "خودکار: متنی که از جعبهاش بلندتر است، پس یا بیرون میریزد، یا بریده میشود، یا نوار پیمایش میگیرد." پایان
جعبه: عرض = 150 ارتفاع = 90 فاصله = 8 کادر = "2px solid #6366f1" اندازه قلم = 14 سرریز = پیمایشی محتوا = "پیمایشی: متنی که از جعبهاش بلندتر است، پس یا بیرون میریزد، یا بریده میشود، یا نوار پیمایش میگیرد." پایان
پایان
پایانجعبهای با ارتفاع ثابت و متنی زیاد دلیل همیشگی روی هم افتادن متن با پاراگراف بعدی است. کمینه ارتفاع را ترجیح بدهید، یا عمداً به جعبه یک مقدار سرریز بدهید. مقدارهای پنهان، پیمایشی و خودکار همچنین جلوی بیرون زدن فضای فرزند از جعبه را میگیرند و باعث میشوند جعبه شناورهای درونش را در خود نگه دارد.
calc و min و max و clamp و var
CSS هر جا طول بخواهد میتواند حساب هم بکند. calc() یکاها را قاطی میکند: "calc(100% - 80px)" یعنی همهچیز جز ۸۰ پیکسل، و فاصله دو طرف + و - لازم است. min() کوچکترین آرگومانهایش را برمیدارد و max() بزرگترین را، پس "min(100%, 20rem)" یعنی «حداکثر 20rem». clamp(کمینه, مطلوب, بیشینه) هر دو در یکی است: "clamp(1rem, 4vw, 2rem)" اندازهی قلمی است که با پنجره بزرگ و کوچک میشود ولی میان ۱ و ۲ rem میماند.
var() یک ویژگی سفارشی CSS را میخواند، مقداری که خودتان نام میگذارید. اینها در CSS خام اعلان میشوند، که آن را به یک عنصر سبک بالای صفحه میدهید. نام با دو خط تیره شروع میشود و پایینتر با "var(--brand)" در هر جا به کار میرود.
صفحه:
عنوان = "تابعهای CSS"
سبک: محتوا = ":root { --brand: #0f766e; --gap: 14px }" پایان
سراسری: اندازه جعبه = "border-box" پایان
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = "p" فضا = "0 0 10px" فاصله = "var(--gap)" جهت متن = ltr پایان
پاراگراف: محتوا = "عرض = calc(100% - 80px)" عرض = "calc(100% - 80px)" پس زمینه = "#e0f2fe" پایان
پاراگراف: محتوا = "عرض = min(100%, 20rem)" عرض = "min(100%, 20rem)" پس زمینه = "#dcfce7" پایان
پاراگراف: محتوا = "عرض = max(50%, 18rem)" عرض = "max(50%, 18rem)" پس زمینه = "#fef9c3" پایان
پاراگراف: محتوا = "اندازه قلم = clamp(1rem, 4vw, 2rem)" اندازه قلم = "clamp(1rem, 4vw, 2rem)" پس زمینه = "#fce7f3" پایان
پاراگراف: محتوا = "پس زمینه = var(--brand)" پس زمینه = "var(--brand)" رنگ = white پایان
پایانتفاوتش با ثابتهای سلام در این است که مقدار کِی معلوم میشود. ثابت هنگام ترجمه ثابت میشود. ویژگی سفارشی در مرورگر زندگی میکند، پس میتواند با اندازهی پنجره، با قاعدهی حالت تاریک، یا از یک اسکریپت عوض شود.
قاعدههای سراسری
سبک روی خود عنصر ابزار درست برای همان عنصر است. عنصر سراسری برای هر چیز دیگر است: قاعده برای یک نوع کامل عنصر، یا برای کل صفحه. گزینشگرش هر گزینشگر CSS است که به شکل متن نوشته میشود. نام برچسب همهی عنصرهای آن نوع را سبک میدهد، ".tip" همهی عنصرهای آن کلاس را، "#lead" یک عنصر با آن شناسه را، و "li:nth-child(odd)" یا "nav a" بر پایهی جایگاه یا مکان برمیگزینند. گزینشگر را نگذارید تا قاعده برای هر عنصر اعمال شود، که همان کار سطر اندازه جعبه بالاست.
صفحه:
عنوان = "قاعدههای سراسری"
سراسری: اندازه جعبه = "border-box" پایان
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 ارتفاع خط = 1.9 پایان
سراسری: گزینشگر = "h2" رنگ = "#0f766e" فضا = "0 0 8px" پایان
سراسری: گزینشگر = ".tip" پس زمینه = "#fef3c7" کادر راست = "4px solid #f59e0b" فاصله = "8px 12px" پایان
سراسری: گزینشگر = "#lead" اندازه قلم = 20 پایان
سراسری: گزینشگر = "li:nth-child(odd)" پس زمینه = "#f1f5f9" پایان
سرتیتر: اندازه = 2 محتوا = "سه نوع گزینشگر" پایان
پاراگراف: شناسه = "lead" محتوا = "یک برچسب، یک کلاس و یک شناسه، همه یکبار سبک میگیرند." پایان
پاراگراف: کلاس = "tip" محتوا = "هر عنصری با کلاس tip این ظاهر را میگیرد." پایان
فهرست:
مورد: محتوا = "ردیفهای فرد سایه دارند" پایان
مورد: محتوا = "ردیفهای زوج ندارند" پایان
مورد: محتوا = "دوباره فرد" پایان
پایان
پایاندو نکته. گزینشگر همانطور که نوشتهاید به برگهی سبک میرود، پس مترجم نمیتواند بگوید غلط نوشتهاید. و وقتی دو قاعده به یک عنصر برسند آن که اختصاصیتر است برنده میشود: کلاس بر برچسب میچربد و شناسه بر کلاس. سراسری را برای پیشفرضها و کلاسهای مشترک به کار ببرید و سبک خود عنصر را برای آنچه یکتاست.
ثابتها و بخشها
یک عدد را یکبار بنویسید و همهجا به کار ببرید. پایا (const) بالای صفحه مقداری را نگه میدارد که هنگام ترجمه حساب میشود، و مقدار سبکها میتوانند در عبارت از آن استفاده کنند: فاصله = گام * 2 + "px". بخش (component) همین کار را برای یک تکهی کامل صفحه میکند: پارامتر میگیرد، درختی از عنصرهای سبکدار میسازد، و محتوا: پایان جایی را نشان میدهد که فرزندان هر بار استفاده در آن مینشینند. پارامترها در سبکها هم کار میکنند: مقداری مثل سرریز = حالت پارامتر حالت را میخواند. استفادههایی که سبک یکسان دارند یک کلاس تولیدشده را شریک میشوند، پس کارتی که ده بار به کار رود یک قاعده میافزاید.
پایا گام := 16
پایا رنگاصلی := "#0f766e"
بخش کارت(عنوان، متن، فام):
جعبه:
فاصله = گام
فضا = "0 0 " + گام + "px"
کادر = "2px solid " + فام
گردی کادر = گام / 2 + "px"
سرتیتر: اندازه = 3 محتوا = عنوان رنگ = فام فضا = "0 0 6px" پایان
پاراگراف: محتوا = متن فضا = 0 پایان
محتوا: پایان
پایان
پایان
صفحه:
عنوان = "کارتهای قابل استفادهی دوباره"
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = گام * 2 + "px" پایان
کارت: عنوان = "سریع" متن = "به کد ماشین ساخته میشود." فام = رنگاصلی پایان
کارت: عنوان = "ایمن" متن = "هنگام ترجمه بررسی میشود." فام = "#2563eb"
پاراگراف: محتوا = "حتی سبکهای صفحه." رنگ = "#64748b" پایان
پایان
پایاننکردن کار اضافه در صفحههای بزرگ
سه ویژگی به بارگذاری و پیمایش سریعتر یک صفحهی بلند کمک میکنند، به بهای چند قول. محدودسازی (contain) به مرورگر میگوید درون عنصر بر هیچ چیز بیرون اثر نمیگذارد، پس یک تغییر درونی هرگز لازم نمیکند همهی صفحه دوباره چیده شود. دیدپذیری محتوا = خودکار جلوتر میرود: مرورگر تا وقتی عنصر دور از صفحهنمایش است آن را رسم و چیدمان نمیکند. چون عنصر کنار گذاشتهشده ارتفاعی ندارد، با اندازه ذاتی محدود یک حدس اضافه کنید، auto 600px یعنی «پس از دیدن، اندازهی واقعی را به کار ببر و پیش از آن ۶۰۰ پیکسل». آن را برای بخشهای صفحهای بلند به کار ببرید، نه صفحههای کوچک که فقط خطر میافزاید.
بخش:
دیدپذیری محتوا = خودکار
اندازه ذاتی محدود = "auto 600px"
سرتیتر: اندازه = 2 محتوا = "پایین صفحه" پایان
پاراگراف: محتوا = "فقط وقتی رسم میشود که خواننده نزدیکش برسد." پایان
پایان
بازنشانی و اندازهی فیلد
همه ویژگیها (all) همهی ویژگیهای یک عنصر را یکجا بازنشانی میکند. فقط کلیدواژههایی که برای هر ویژگی کار میکنند مجازند: initial، inherit، unset و revert. اول آن را بنویسید و بعد سبکهایی را که میخواهید برگردانید، همانطور که نمونهی مرجع دکمهای را به جعبهای ساده تبدیل میکند. اندازه فیلد = محتوا میگذارد کادر نوشتن با تایپ کاربر بزرگ شود، بیاسکریپت، در مرورگرهایی که آن را پشتیبانی میکنند. ویژگیهای appearance، resize و zoom در درس واکنشگرا آمدهاند.
صفحه:
عنوان = "اندازه فیلد"
سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
سراسری: گزینشگر = "p" فضا = "0 0 8px" پایان
پاراگراف: محتوا = "در کادر بنویسید: با متن بزرگ میشود." پایان
ورودی:
شناسه = "name"
اندازه فیلد = محتوا
کمینه عرض = "6ch"
بیشینه عرض = "100%"
فاصله = 6
اندازه قلم = 18
جانگهدار = "نام شما"
پایان
پاراگراف: محتوا = "بدون آن، کادر نوشتن همیشه یک پهنای ثابت دارد:" فضا بالا = 24 پایان
ورودی: فاصله = 6 اندازه قلم = 18 جانگهدار = "نام شما" پایان
پایانمرجع: اندازه، فضا، نمایش و سرریز
همهی ویژگیهای این درس زیر آمدهاند، با آنچه میپذیرند و یک نمونهی کوتاه که مترجم بررسی کرده است. نامهای انگلیسی در هر پرونده کار میکنند و درسهای فارسی نامهای فارسی را به کار میبرند. اول عنصر سراسری، بعد ویژگیها در گروهها.
قاعدهی سراسری
سراسری (English: global)
قاعدهی سبک را برای کل صفحه مینویسد، نه برای یک عنصر. بدون گزینشگر قاعده برای همهی عنصرها اعمال میشود و جای مناسبی برای بازنشانیهایی مثل اندازه جعبه است. با گزینشگر برای هر چیزی که گزینشگر پیدا کند اعمال میشود. هر ویژگی سبکی را میگیرد، با پیشوندهای اشاره، تمرکز و مانند آن.
سراسری: گزینشگر = ".tip" پس زمینه = "#fef3c7" فاصله = 12 اشاره پس زمینه = "#fde68a" پایان
| ویژگی | کار آن | نمونه |
|---|---|---|
گزینشگرselector | یک گزینشگر CSS به شکل متن: برچسبی مثل "h2"، کلاس ".card"، شناسه "#intro"، حالتی مثل "a:hover"، جایگاهی مثل "li:nth-child(odd)" یا ترکیبی مثل "nav a". متن همانطور که هست به برگهی سبک میرود، پس مترجم آن را بررسی نمیکند. [string] | سراسری: گزینشگر = "li:nth-child(odd)" پس زمینه = "#f1f5f9" پایان |
عرض، ارتفاع و شکل
هر اندازه یک شکل فیزیکی دارد (عرض، ارتفاع) و یک شکل منطقی (اندازه خطی، اندازه بلوکی)، و از هر کدام یک کمینه و یک بیشینه.
| ویژگی | کار آن و مقدارهای قابل قبول | نمونه |
|---|---|---|
عرضwidth width | پهنای عنصر. عدد تنها پیکسل است. auto (پیشفرض) میگذارد بلوک همهی پهنای والد را بگیرد، درصد سهمی از پهنای والد است و min-content، max-content و fit-content جعبه را با متنش اندازه میکنند. با اندازه جعبهی پیشفرض فقط پهنای محتواست. [length / percentage / auto, min-content, max-content, fit-content] | جعبه: عرض = "60%" پس زمینه = "#bfdbfe" فاصله = 8 محتوا = "۶۰ درصد والد" پایان |
کمینه عرضmin width min-width | کوچکترین پهنایی که عنصر میتواند داشته باشد. بر عرض و بیشینه عرض هر دو برتری دارد. برای اینکه ستون با کوچک شدن پنجره خوانا بماند. [length / percentage / auto, min-content, max-content, fit-content] | جعبه: عرض = "20%" کمینه عرض = 160 پس زمینه = "#bfdbfe" فاصله = 8 محتوا = "هرگز کمتر از ۱۶۰ پیکسل نمیشود" پایان |
بیشینه عرضmax width max-width | بزرگترین پهنایی که عنصر میتواند داشته باشد؛ none (پیشفرض) یعنی بدون حد. جفت کلاسیک آن عرض = "100%" با بیشینه عرض = "40rem" است: روی تلفن تمام پهنا، روی نمایشگر بزرگ طول سطری راحت. [length / percentage / none, min-content, max-content, fit-content] | جعبه: بیشینه عرض = "24rem" پس زمینه = "#bfdbfe" فاصله = 8 محتوا = "تا جایی که والد اجازه بدهد پهن میشود، ولی هرگز بیشتر از 24rem نمیشود." پایان |
ارتفاعheight height | ارتفاع عنصر. auto (پیشفرض) جعبه را به بلندی محتوایش میکند. درصد فقط وقتی کار میکند که والد خودش ارتفاعی داشته باشد. ارتفاع ثابت با محتوای بیشتر به انتخابی برای سرریز نیاز دارد. [length / percentage / auto, min-content, max-content, fit-content] | جعبه: ارتفاع = 80 پس زمینه = "#bbf7d0" فاصله = 8 محتوا = "۸۰ پیکسل بلند" پایان |
کمینه ارتفاعmin height min-height | کوچکترین ارتفاعی که عنصر میتواند داشته باشد. بر خلاف ارتفاع ثابت میگذارد جعبه وقتی محتوا جا میخواهد بلندتر شود، و برای کارتها و بخشها انتخاب امنتری است. [length / percentage / auto, min-content, max-content, fit-content] | جعبه: کمینه ارتفاع = 100 پس زمینه = "#bbf7d0" فاصله = 8 محتوا = "دستکم ۱۰۰ پیکسل، اگر لازم شد بلندتر" پایان |
بیشینه ارتفاعmax height max-height | بزرگترین ارتفاعی که عنصر میتواند داشته باشد؛ none یعنی بدون حد. با سرریز = خودکار جعبهای میدهد که وقتی محتوا از حد بلندتر شد پیمایشپذیر میشود. [length / percentage / none, min-content, max-content, fit-content] | جعبه: بیشینه ارتفاع = 60 سرریز = خودکار پس زمینه = "#bbf7d0" فاصله = 8 محتوا = "متنی بلند که در شصت پیکسل جا نمیشود، پس جعبه به جای بلندتر شدن نوار پیمایش میگیرد و میماند همانجا که هست." پایان |
اندازه خطیinline size inline-size | اندازه در راستایی که متن میرود: در صفحههای فارسی و انگلیسی پهنا و در حالتهای نوشتاری عمودی ارتفاع. شکل منطقی عرض است، پس چیدمانی که با آن نوشته شده با عوض شدن حالت نوشتار هم درست میماند. مقدارها همان مقدارهای عرض است. [length / percentage / auto, min-content, max-content, fit-content] | جعبه: اندازه خطی = "50%" پس زمینه = "#e9d5ff" فاصله = 8 محتوا = "اندازه خطی ۵۰ درصد" پایان |
کمینه اندازه خطیmin inline size min-inline-size | شکل منطقی کمینه عرض: کوچکترین اندازه در راستای متن. [length / percentage / auto, min-content, max-content, fit-content] | جعبه: اندازه خطی = "20%" کمینه اندازه خطی = 160 پس زمینه = "#e9d5ff" فاصله = 8 محتوا = "هرگز کمتر از ۱۶۰ پیکسل نمیشود" پایان |
بیشینه اندازه خطیmax inline size max-inline-size | شکل منطقی بیشینه عرض: بزرگترین اندازه در راستای متن. بیشینه اندازه خطی = "60ch" طول سطرها را در هر زبان و جهتی نزدیک شصت نویسه نگه میدارد. [length / percentage / none, min-content, max-content, fit-content] | جعبه: بیشینه اندازه خطی = "30ch" پس زمینه = "#e9d5ff" فاصله = 8 محتوا = "در این جعبه یک سطر متن هرگز از سی نویسه بلندتر نمیشود." پایان |
اندازه بلوکیblock size block-size | اندازه در راستای عمود بر جهت متن: در صفحههای فارسی و انگلیسی ارتفاع. شکل منطقی ارتفاع است و مقدارهایش همان است. [length / percentage / auto, min-content, max-content, fit-content] | جعبه: اندازه بلوکی = 70 پس زمینه = "#e9d5ff" فاصله = 8 محتوا = "اندازه بلوکی ۷۰" پایان |
کمینه اندازه بلوکیmin block size min-block-size | شکل منطقی کمینه ارتفاع: کوچکترین اندازه در راستای عمود بر متن. [length / percentage / auto, min-content, max-content, fit-content] | جعبه: کمینه اندازه بلوکی = 90 پس زمینه = "#e9d5ff" فاصله = 8 محتوا = "دستکم ۹۰ پیکسل" پایان |
بیشینه اندازه بلوکیmax block size max-block-size | شکل منطقی بیشینه ارتفاع: بزرگترین اندازه در راستای عمود بر متن. با سرریز جعبهی پیمایشپذیر میدهد. [length / percentage / none, min-content, max-content, fit-content] | جعبه: بیشینه اندازه بلوکی = 50 سرریز = خودکار پس زمینه = "#e9d5ff" فاصله = 8 محتوا = "متنی بلند که بیشتر از پنجاه پیکسل ارتفاع میخواهد، پس پیمایش میشود." پایان |
نسبت ابعادaspect ratio aspect-ratio | جعبه را در شکلی ثابت نگه میدارد: پهنا بخش بر ارتفاع، به شکل "16 / 9" یا یک عدد مثل 1.5. وقتی اثر دارد که یکی از دو اندازه auto باشد، پس پهنا بدهید و بگذارید ارتفاع دنبالش بیاید. auto نسبت طبیعی تصویر یا ویدیو را، اگر داشته باشد، به کار میبرد. [ratio / auto] | جعبه: عرض = 240 نسبت ابعاد = "16 / 9" پس زمینه = "#c7d2fe" محتوا = "۱۶ به ۹" پایان |
اندازه جعبهbox sizing box-sizing | اینکه عرض و ارتفاع چه چیزی را اندازه میگیرند. content-box ("جعبه محتوا"، پیشفرض) فقط محتواست و فاصلهی درونی و کادر روی آن اضافه میشوند. border-box ("جعبه کادر") فاصلهی درونی و کادر را هم شامل میشود و جعبه دقیقاً به اندازهای است که نوشتهاید. بیشتر صفحهها یک بار با یک قاعدهی سراسری آن را برای همهی عنصرها میگذارند. [content-box, border-box] | جعبه: اندازه جعبه = "border-box" عرض = 200 فاصله = 20 کادر = "4px solid teal" محتوا = "دقیقاً ۲۰۰ پیکسل پهنا" پایان |
فضا
جای خالی بیرون کادر. فضا همهی سمتها را تعیین میکند، شکلهای بالا، راست، پایین و چپ یک سمت فیزیکی را، و شکلهای بلوکی و خطی جهت متن را دنبال میکنند.
| ویژگی | کار آن و مقدارهای قابل قبول | نمونه |
|---|---|---|
فضاmargin margin | فضای بیرون کادر. یک مقدار برای هر چهار طرف است، دو مقدار یعنی بالا و پایین سپس چپ و راست ("10 20")، سه مقدار بالا، افقی، پایین، و چهار مقدار از بالا و در جهت عقربههای ساعت. auto فضای آزاد را تقسیم میکند، پس "0 auto" جعبهای را که عرض دارد وسط میگذارد. مقدار منفی مجاز است. درصد سهمی از پهنای والد است. [length / percentage / auto; up to 4 values] | جعبه: فضا = "10 40" پس زمینه = "#fed7aa" محتوا = "فضا = 10 40" پایان |
فضا بالاmargin top margin-top | فضای بالای جعبه. فضای عمودی بلوکهای همسایه جمع نمیشود، بلکه به بزرگتر از آن دو تبدیل میشود. [length / percentage / auto] | جعبه: فضا بالا = 30 پس زمینه = "#fed7aa" محتوا = "۳۰ پیکسل فضا در بالا" پایان |
فضا راستmargin right margin-right | فضای سمت راست جعبه، هر جهتی که متن داشته باشد. فضا چپ = auto جعبه را به لبهی راست میراند. وقتی سمت باید به زبان بستگی داشته باشد فضا انتها بهتر است. [length / percentage / auto] | جعبه: عرض = 200 فضا چپ = auto پس زمینه = "#fed7aa" محتوا = "به راست رانده شده" پایان |
فضا پایینmargin bottom margin-bottom | فضای پایین جعبه. فضای عمودی بلوکهای همسایه به بزرگتر از آن دو تبدیل میشود. [length / percentage / auto] | جعبه: فضا پایین = 30 پس زمینه = "#fed7aa" محتوا = "۳۰ پیکسل فضا در پایین" پایان |
فضا چپmargin left margin-left | فضای سمت چپ جعبه، هر جهتی که متن داشته باشد. فضا راست = auto جعبه را به لبهی چپ میراند و اگر هر دو سمت auto باشند جعبه وسط میماند. [length / percentage / auto] | جعبه: عرض = 200 فضا چپ = 60 پس زمینه = "#fed7aa" محتوا = "۶۰ پیکسل از چپ" پایان |
فضا بلوکیmargin block margin-block | فضا در آغاز و پایان راستای بلوک، که در صفحههای فارسی و انگلیسی بالا و پایین است. یک مقدار هر دو را میگذارد، دو مقدار یعنی آغاز و سپس پایان. [length / percentage / auto; up to 2 values] | جعبه: فضا بلوکی = "20 40" پس زمینه = "#fed7aa" محتوا = "۲۰ پیش از آن، ۴۰ پس از آن" پایان |
فضا بلوکی ابتداmargin block start margin-block-start | فضای پیش از جعبه در راستای بلوک: در صفحههای فارسی و انگلیسی بالا. [length / percentage / auto] | جعبه: فضا بلوکی ابتدا = 24 پس زمینه = "#fed7aa" محتوا = "۲۴ پیکسل پیش از آن" پایان |
فضا بلوکی انتهاmargin block end margin-block-end | فضای پس از جعبه در راستای بلوک: در صفحههای فارسی و انگلیسی پایین. [length / percentage / auto] | جعبه: فضا بلوکی انتها = 24 پس زمینه = "#fed7aa" محتوا = "۲۴ پیکسل پس از آن" پایان |
فضا خطیmargin inline margin-inline | فضا در آغاز و پایان راستای متن، که در انگلیسی چپ و راست و در فارسی راست و چپ است. یک مقدار هر دو را میگذارد، دو مقدار یعنی آغاز و سپس پایان. [length / percentage / auto; up to 2 values] | جعبه: فضا خطی = "10 60" پس زمینه = "#fed7aa" محتوا = "۱۰ در آغاز، ۶۰ در پایان" پایان |
فضا ابتداmargin inline start margin-inline-start | فضا در سمتی که متن از آن شروع میشود: در انگلیسی چپ، در فارسی راست. برای تورفتگیها همین سمت را به کار ببرید، چون با زبان جابهجا میشود. [length / percentage / auto] | جعبه: فضا ابتدا = 40 پس زمینه = "#fed7aa" محتوا = "با تورفتگی از سمت آغاز" پایان |
فضا انتهاmargin inline end margin-inline-end | فضا در سمتی که متن در آن تمام میشود: در انگلیسی راست، در فارسی چپ. [length / percentage / auto] | جعبه: فضا انتها = 40 پس زمینه = "#fed7aa" محتوا = "فضایی که در سمت پایان میماند" پایان |
فاصله
جای خالی درون کادر. همان مجموعهی سمتهای فضا را دارد و هرگز auto یا مقدار منفی نمیگیرد.
| ویژگی | کار آن و مقدارهای قابل قبول | نمونه |
|---|---|---|
فاصلهpadding padding | فضای میان محتوا و کادر، درون جعبه. پسزمینهی عنصر در آن دیده میشود. یک مقدار برای هر چهار طرف است، دو مقدار یعنی بالا و پایین سپس چپ و راست، سه مقدار بالا، افقی، پایین، و چهار مقدار از بالا و در جهت عقربههای ساعت. منفی یا auto نمیشود. [length / percentage; up to 4 values] | جعبه: فاصله = "8 24" پس زمینه = "#bbf7d0" محتوا = "فاصله = 8 24" پایان |
فاصله بالاpadding top padding-top | فاصلهی درونی بالای محتوا. [length / percentage] | جعبه: فاصله بالا = 30 پس زمینه = "#bbf7d0" محتوا = "۳۰ پیکسل فاصلهی درونی در بالا" پایان |
فاصله راستpadding right padding-right | فاصلهی درونی سمت راست محتوا، هر جهتی که متن داشته باشد. [length / percentage] | جعبه: فاصله راست = 60 پس زمینه = "#bbf7d0" محتوا = "۶۰ پیکسل فاصلهی درونی در راست" پایان |
فاصله پایینpadding bottom padding-bottom | فاصلهی درونی پایین محتوا. [length / percentage] | جعبه: فاصله پایین = 30 پس زمینه = "#bbf7d0" محتوا = "۳۰ پیکسل فاصلهی درونی در پایین" پایان |
فاصله چپpadding left padding-left | فاصلهی درونی سمت چپ محتوا، هر جهتی که متن داشته باشد. [length / percentage] | جعبه: فاصله چپ = 60 پس زمینه = "#bbf7d0" محتوا = "۶۰ پیکسل فاصلهی درونی در چپ" پایان |
فاصله بلوکیpadding block padding-block | فاصلهی درونی در آغاز و پایان راستای بلوک، که در صفحههای فارسی و انگلیسی بالا و پایین است. یک مقدار هر دو را میگذارد، دو مقدار یعنی آغاز و سپس پایان. [length / percentage; up to 2 values] | جعبه: فاصله بلوکی = "4 20" پس زمینه = "#bbf7d0" محتوا = "۴ پیش از آن، ۲۰ پس از آن" پایان |
فاصله بلوکی ابتداpadding block start padding-block-start | فاصلهی درونی پیش از محتوا در راستای بلوک: در صفحههای فارسی و انگلیسی بالا. [length / percentage] | جعبه: فاصله بلوکی ابتدا = 24 پس زمینه = "#bbf7d0" محتوا = "۲۴ پیکسل پیش از آن" پایان |
فاصله بلوکی انتهاpadding block end padding-block-end | فاصلهی درونی پس از محتوا در راستای بلوک: در صفحههای فارسی و انگلیسی پایین. [length / percentage] | جعبه: فاصله بلوکی انتها = 24 پس زمینه = "#bbf7d0" محتوا = "۲۴ پیکسل پس از آن" پایان |
فاصله خطیpadding inline padding-inline | فاصلهی درونی در آغاز و پایان راستای متن، که در انگلیسی چپ و راست و در فارسی راست و چپ است. یک مقدار هر دو را میگذارد، دو مقدار یعنی آغاز و سپس پایان. [length / percentage; up to 2 values] | جعبه: فاصله خطی = "30 10" پس زمینه = "#bbf7d0" محتوا = "۳۰ در آغاز، ۱۰ در پایان" پایان |
فاصله ابتداpadding inline start padding-inline-start | فاصلهی درونی در سمتی که متن از آن شروع میشود: در انگلیسی چپ، در فارسی راست. [length / percentage] | جعبه: فاصله ابتدا = 40 پس زمینه = "#bbf7d0" محتوا = "۴۰ پیکسل فاصلهی درونی در سمت آغاز" پایان |
فاصله انتهاpadding inline end padding-inline-end | فاصلهی درونی در سمتی که متن در آن تمام میشود: در انگلیسی راست، در فارسی چپ. [length / percentage] | جعبه: فاصله انتها = 40 پس زمینه = "#bbf7d0" محتوا = "۴۰ پیکسل فاصلهی درونی در سمت پایان" پایان |
سرریز
آنچه برای محتوایی که جا نمیشود رخ میدهد.
| ویژگی | کار آن و مقدارهای قابل قبول | نمونه |
|---|---|---|
سرریزoverflow overflow | اینکه با محتوایی که از جعبهاش بزرگتر است چه میشود. visible (نمایان، پیشفرض) میگذارد بیرون بریزد، hidden (پنهان) آن را میبرد، clip (بریده) میبرد و دیگر هیچ راه پیمایشی نمیگذارد، scroll (پیمایشی) همیشه نوار پیمایش نشان میدهد و auto (خودکار) فقط در صورت نیاز. یک مقدار هر دو جهت را تعیین میکند و دو مقدار یعنی افقی و سپس عمودی. [visible, hidden, clip, scroll, auto; up to 2 values] | جعبه: عرض = 160 ارتفاع = 50 سرریز = خودکار کادر = "1px solid #94a3b8" محتوا = "متنی که از جعبهی کوچکش بلندتر است، پس باید جایی برود." پایان |
سرریز افقیoverflow x overflow-x | اینکه با محتوایی که برای جعبه خیلی پهن است چه میشود. مقدارها همان مقدارهای سرریز است. اگر یک محور را چیزی غیر از visible بگذارید، visible در محور دیگر به auto تبدیل میشود. [visible, hidden, clip, scroll, auto] | جعبه: عرض = 160 سرریز افقی = پیمایشی فضای سفید = "بدون پیچش" کادر = "1px solid #94a3b8" محتوا = "یک سطر بلند که شکسته نمیشود و از لبهی جعبه بیرون میزند." پایان |
سرریز عمودیoverflow y overflow-y | اینکه با محتوایی که برای جعبه خیلی بلند است چه میشود. مقدارها همان مقدارهای سرریز است. auto انتخاب همیشگی برای پنلی با ارتفاع ثابت است. [visible, hidden, clip, scroll, auto] | جعبه: ارتفاع = 50 عرض = 160 سرریز عمودی = خودکار کادر = "1px solid #94a3b8" محتوا = "متنی که از جعبهی کوچکش بلندتر است، پس باید جایی برود." پایان |
سرریز بلوکیoverflow block overflow-block | سرریز در راستای بلوک (عمودی در صفحههای فارسی و انگلیسی). شکل منطقی سرریز عمودی است. هنوز فقط بعضی مرورگرها آن را میفهمند، پس امروز سرریز عمودی انتخاب امنتری است. [visible, hidden, clip, scroll, auto] | جعبه: اندازه بلوکی = 50 اندازه خطی = 160 سرریز بلوکی = خودکار کادر = "1px solid #94a3b8" محتوا = "متنی که از جعبهی کوچکش بلندتر است، پس باید جایی برود." پایان |
سرریز خطیoverflow inline overflow-inline | سرریز در راستای متن (افقی در صفحههای فارسی و انگلیسی). شکل منطقی سرریز افقی است. هنوز فقط بعضی مرورگرها آن را میفهمند، پس امروز سرریز افقی انتخاب امنتری است. [visible, hidden, clip, scroll, auto] | جعبه: اندازه خطی = 160 سرریز خطی = پیمایشی فضای سفید = "بدون پیچش" کادر = "1px solid #94a3b8" محتوا = "یک سطر بلند که شکسته نمیشود و از انتها بیرون میزند." پایان |
لنگر سرریزoverflow anchor overflow-anchor | لنگر پیمایش را روشن (auto، پیشفرض) یا خاموش (none) میکند. لنگر پیمایش ترفند مرورگر است برای اینکه وقتی محتوای بالای چیزی که میخوانید بار میشود یا اندازه عوض میکند، آن چیز سر جایش بماند. فقط برای پیمایشگری خاموشش کنید که برنامهی خودش جای پیمایش را اداره میکند. [CSS-wide keywords only] | جعبه: ارتفاع = 60 سرریز = خودکار لنگر سرریز = none کادر = "1px solid #94a3b8" محتوا = "متنی که از جعبهی کوچکش بلندتر است، پس باید جایی برود." پایان |
فضا برش سرریزoverflow clip margin overflow-clip-margin | وقتی سرریز = بریده است، محتوا تا چه فاصلهای بیرون از لبهی جعبه هنوز رسم میشود تا بریده شود: طولی مثل "12px"، و اگر بخواهید پیش از آن content-box، padding-box یا border-box که میگوید از کدام لبه اندازه گرفته شود. با مقدارهای دیگر سرریز اثری ندارد. [CSS-wide keywords only] | جعبه: سرریز = بریده فضا برش سرریز = "12px" کادر = "2px solid #6366f1" فاصله = 8 عرض = 140 ارتفاع = 40 محتوا = "متنی که از جعبهی کوچکش بلندتر است، پس باید جایی برود." پایان |
نمایش و محدودسازی
اینکه عنصر چطور در چیدمان شرکت میکند، رسم میشود یا نه، و مرورگر از چه چیزی میتواند بگذرد.
| ویژگی | کار آن و مقدارهای قابل قبول | نمونه |
|---|---|---|
نمایشdisplay display | اینکه عنصر چگونه در چیدمان شرکت میکند. block (بلوکی) سطر تازه شروع میکند و همهی پهنا را میگیرد، inline (خطی) میان سطر متن مینشیند و عرض و ارتفاع را نادیده میگیرد، inline-block ("خطی بلوکی") مثل متن مینشیند ولی عرض و ارتفاع را میپذیرد، none (هیچ) عنصر را از صفحه برمیدارد، flex (فلکس) و grid (شبکه) فرزندان را در ردیف یا ستونها میچینند، flow-root ("ریشه جریان") جعبهای میسازد که شناورهایش را در خود نگه میدارد، و contents (محتوایی) جعبه را برمیدارد ولی فرزندان را نگه میدارد. هر عنصر پیشفرض خودش را دارد: تکه درونخطی و جعبه بلوکی است. [block, inline, inline-block, flex, inline-flex, grid, ...] | جعبه: نمایش = فلکس شکاف = 8 تکه: محتوا = "یک" پس زمینه = "#bbf7d0" فاصله = 8 پایان تکه: محتوا = "دو" پس زمینه = "#bbf7d0" فاصله = 8 پایان پایان |
دیدپذیریvisibility visibility | عنصر را پنهان میکند ولی جایش را نگه میدارد: hidden (پنهان) جای خالی میگذارد و visible (نمایان) پیشفرض است. بر خلاف نمایش = هیچ فضا همچنان گرفته میشود. عنصر پنهان را نمیشود کلیک کرد یا روی آن تمرکز داد و صفحهخوانها آن را رد میکنند. collapse ردیف یا ستون جدول را برمیدارد و جایش را آزاد میکند، و جاهای دیگر مثل hidden رفتار میکند. [visible, hidden, collapse] | جعبه: دیدپذیری = پنهان پس زمینه = "#fca5a5" فاصله = 8 محتوا = "من دیده نمیشوم، ولی جایم میماند" پایان |
محدودسازیcontain contain | به مرورگر قول میدهد که درون عنصر بر بقیهی صفحه اثر نمیگذارد، پس مرورگر میتواند از بخشی از کار بگذرد. layout، paint، size، inline-size و style قولهای جداگانهاند؛ content یعنی چیدمان، نقاشی و سبک؛ strict اندازه را هم به آنها میافزاید؛ none قولی نمیدهد. با size جعبه دیگر با محتوایش بزرگ نمیشود، پس اندازهای برایش بگذارید. [none, strict, content, size, inline-size, layout, ...; up to 4 values] | جعبه: محدودسازی = "content" پس زمینه = "#fef9c3" فاصله = 8 محتوا = "ابزاری که درونش هرگز چیدمان بیرون را عوض نمیکند" پایان |
دیدپذیری محتواcontent visibility content-visibility | میگذارد مرورگر کار بخشهایی از صفحه را که روی صفحهنمایش نیستند نکند. auto (خودکار) عنصر را تا وقتی به ناحیهی دیدهشونده نزدیک نشده کنار میگذارد، hidden (پنهان) همیشه کنارش میگذارد ولی وضع رسمشدهاش را نگه میدارد (دوباره نشان دادنش از نمایش = هیچ ارزانتر است)، و visible پیشفرض است. auto را با اندازه ذاتی محدود جفت کنید تا نوار پیمایش نپرد. [visible, auto, hidden] | جعبه: دیدپذیری محتوا = خودکار اندازه ذاتی محدود = "auto 120px" پس زمینه = "#fef9c3" فاصله = 8 محتوا = "بخشی بلند که پایین صفحه است" پایان |
اندازه ذاتی محدودcontain intrinsic size contain-intrinsic-size | اندازهای که مرورگر برای عنصری فرض میکند که محتوایش کنار گذاشته شده (با دیدپذیری محتوا) یا با size محدود شده است. یک یا دو طول، عرض و بعد ارتفاع. auto در ابتدا، مثل "auto 300px"، یعنی آخرین اندازهی واقعی را به کار ببر و تا آن زمان ۳۰۰ پیکسل. [length; up to 4 values] | جعبه: دیدپذیری محتوا = خودکار اندازه ذاتی محدود = "auto 300px 200px" پس زمینه = "#fef9c3" فاصله = 8 محتوا = "جانگهدار با عرض ۳۰۰ و ارتفاع ۲۰۰" پایان |
عرض ذاتی محدودسازیcontain intrinsic width contain-intrinsic-width | فقط بخش عرض اندازه ذاتی محدود: عرضی که برای عنصر کنار گذاشتهشده یا اندازهمحدود فرض میشود، اگر خواستید با auto در ابتدا. [length; up to 2 values] | جعبه: دیدپذیری محتوا = خودکار عرض ذاتی محدودسازی = "auto 300px" پس زمینه = "#fef9c3" فاصله = 8 محتوا = "عرض فرضی ۳۰۰ پیکسل" پایان |
ارتفاع ذاتی محدودسازیcontain intrinsic height contain-intrinsic-height | فقط بخش ارتفاع اندازه ذاتی محدود: ارتفاعی که برای عنصر کنار گذاشتهشده یا اندازهمحدود فرض میشود، اگر خواستید با auto در ابتدا. [length; up to 2 values] | جعبه: دیدپذیری محتوا = خودکار ارتفاع ذاتی محدودسازی = "auto 200px" پس زمینه = "#fef9c3" فاصله = 8 محتوا = "ارتفاع فرضی ۲۰۰ پیکسل" پایان |
اندازه ذاتی محدودسازی خطیcontain intrinsic inline size contain-intrinsic-inline-size | شکل منطقی عرض ذاتی محدودسازی: اندازه در راستای متن که برای عنصر کنار گذاشتهشده یا اندازهمحدود فرض میشود. [length; up to 2 values] | جعبه: دیدپذیری محتوا = خودکار اندازه ذاتی محدودسازی خطی = "auto 300px" پس زمینه = "#fef9c3" فاصله = 8 محتوا = "۳۰۰ پیکسل فرضی در راستای متن" پایان |
اندازه ذاتی محدودسازی بلوکیcontain intrinsic block size contain-intrinsic-block-size | شکل منطقی ارتفاع ذاتی محدودسازی: اندازه در راستای عمود بر متن که برای عنصر کنار گذاشتهشده یا اندازهمحدود فرض میشود. [length; up to 2 values] | جعبه: دیدپذیری محتوا = خودکار اندازه ذاتی محدودسازی بلوکی = "auto 200px" پس زمینه = "#fef9c3" فاصله = 8 محتوا = "۲۰۰ پیکسل فرضی در راستای عمود بر متن" پایان |
بازنشانی و اندازهی فیلد
| ویژگی | کار آن و مقدارهای قابل قبول | نمونه |
|---|---|---|
همه ویژگیهاall all | همهی ویژگیهای سبک عنصر را یکجا بازنشانی میکند. فقط کلیدواژههای همگانی CSS مجازند: initial (پیشفرض خود ویژگی)، inherit، unset (اگر ویژگی بهطور معمول ارث میبرد ارث ببر، وگرنه initial) و revert (برگهی سبک مرورگر). آن را اول بنویسید و بعد سبکهایی را که میخواهید برگردانید. به جهت متن دست نمیزند. [CSS-wide keywords only] | دکمه: همه ویژگیها = unset فاصله = "8 16" پس زمینه = "#0f766e" رنگ = white نشانگر = pointer محتوا = "دکمهای بدون ظاهر مرورگر" پایان |
اندازه فیلدfield sizing field-sizing | میگذارد کادر نوشتن، ناحیهی متن یا فهرست انتخابی خودش را با چیزی که دارد اندازه کند. content (محتوا) با نوشتن کاربر بزرگ و کوچک میشود و fixed (ثابت، پیشفرض) همان اندازهی ثابت همیشگی را نگه میدارد. مرورگری که آن را نمیشناسد اندازهی ثابت را نگه میدارد، پس صفحه باز هم کار میکند. [fixed / content] | ورودی: اندازه فیلد = محتوا کمینه عرض = "8ch" فاصله = 6 جانگهدار = "اینجا بنویسید" پایان |
خودتان امتحان کنید
- کارتی بسازید با
فاصله = 24، کادر وبیشینه عرض = "24rem". پنج تا از آن را در یک ستون بگذارید وفضا = "0 auto 16px"بدهید. فاصلهی میان دو کارت ۱۶ پیکسل است یا ۳۲؟ - نمونهی جعبه را بردارید و بالایش
سراسری: اندازه جعبه = "border-box" پایانبنویسید. کدام اندازهها عوض میشوند و چرا جعبه کوچکتر به نظر میرسد؟ - جعبهای ۱۵۰ در ۱۰۰ با یک جملهی بلند درونش بسازید و همهی مقدارهای
سرریزرا امتحان کنید. بعدارتفاع = 100را باکمینه ارتفاع = 100عوض کنید. - همهی
فضا چپوفضا راستیک صفحه را با شکلهای منطقی عوض کنید، بعدجهت = ltrرا به صفحه بدهید و نتیجه را ببینید.