درس ۳۱ از ۴۵ · صفحه‌های وب

سبک و الگوی جعبه

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.

web-css-values.salam
صفحه:
    عنوان = "مقدارهای سبک"
    سراسری: اندازه جعبه = "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: طول‌های دنیای واقعی، برای چاپ.
web-css-units.salam
صفحه:
    عنوان = "یکاها"
    سراسری: اندازه جعبه = "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. دومی رنگ متن خود عنصر است، پس کادری که با آن نوشته شود هم‌رنگ متن می‌ماند.
web-css-colors.salam
صفحه:
    عنوان = "رنگ‌ها"
    سراسری: گزینشگر = "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) جای خالی بیرون کادر است که جعبه‌های دیگر را دور نگه می‌دارد. فاصله و فضا هر دو یک تا چهار مقدار می‌گیرند، به ترتیب بالا، راست، پایین، چپ، و هر طرف ویژگی خودش را هم دارد: فاصله بالا، فضا چپ و مانند آن.

web-css-box.salam
صفحه:
    عنوان = "جعبه‌ی عنصر"
    سراسری: گزینشگر = "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" عرض فاصله و کادر را هم شامل می‌شود و ۲۴۰ یعنی ۲۴۰. دکمه را بزنید تا همان جعبه را با هر دو روش اندازه‌گیری ببینید.

web-css-boxsizing.salam
واردسازی دام

صفحه:
    عنوان = "اندازه جعبه"
    سراسری: گزینشگر = "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")، وقتی یک ضلع را بدهید و ضلع دیگر را آزاد بگذارید.

web-css-sizes.salam
صفحه:
    عنوان = "اندازه‌ها"
    سراسری: اندازه جعبه = "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) راستایی است که سطرها در آن روی هم می‌نشینند. در فارسی و انگلیسی خطی افقی است و بلوکی عمودی، و آغاز جایی است که سطر از آن شروع می‌شود: در فارسی راست، در انگلیسی چپ.

پس اندازه خطی همان عرض است و اندازه بلوکی همان ارتفاع، فضا ابتدا و فاصله انتها سمت‌های آغاز و پایان سطرند، و فضا بلوکی و فاصله بلوکی بالا و پایین. نمونه‌ی زیر به دو جعبه دقیقاً یک سبک را می‌دهد و جهت را روی پوشش‌هایشان می‌گذارد: تورفتگی و خط کناری خودشان جابه‌جا می‌شوند.

web-css-logical.salam
صفحه:
    عنوان = "ویژگی‌های منطقی"
    سراسری: اندازه جعبه = "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 فاصله‌ی ۴۰ می‌گذارد. همین میان والد و نخستین یا آخرین فرزندش هم رخ می‌دهد، وقتی چیزی (فاصله، کادر، ارتفاع) جدایشان نکند. فضاها درون چیدمان فلکس یا شبکه هرگز ادغام نمی‌شوند.
  • فضای منفی. فضا می‌تواند منفی باشد و عنصر را به همسایه‌اش یا بیرون والدش می‌کشد. کم استفاده کنید؛ ساختار واقعی را پنهان می‌کند.
  • کدام را به کار ببرم. فاصله وقتی که جا باید بخشی از جعبه باشد و پس‌زمینه‌اش را نشان دهد، فضا وقتی که باید جعبه‌های دیگر را دور کند.
web-css-margins.salam
صفحه:
    عنوان = "فضای بیرونی"
    سراسری: اندازه جعبه = "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) جعبه‌ای می‌سازد که هر چه درونش است، شناورها هم، در خود نگه می‌دارد. هر عنصر پیش‌فرضی دارد: جعبه بلوکی است و تکه خطی.

web-css-display.salam
صفحه:
    عنوان = "نمایش"
    سراسری: اندازه جعبه = "border-box" پایان
    سراسری: گزینشگر = "body" خانواده قلم = "Tahoma, system-ui, sans-serif" فضا = 20 پایان
    سراسری: گزینشگر = "span" عرض = 90 ارتفاع = 40 فاصله = 6 فضا = 2 پس زمینه = "#bbf7d0" کادر = "1px solid #15803d" پایان
    سرتیتر: اندازه = 3 محتوا = "خطی (پیش‌فرض تکه)" پایان
    جعبه:
        تکه: محتوا = "یک" پایان
        تکه: محتوا = "دو" پایان
        تکه: محتوا = "سه" پایان
    پایان
    سرتیتر: اندازه = 3 محتوا = "خطی بلوکی" پایان
    جعبه:
        تکه: نمایش = "خطی بلوکی" محتوا = "یک" پایان
        تکه: نمایش = "خطی بلوکی" محتوا = "دو" پایان
        تکه: نمایش = "خطی بلوکی" محتوا = "سه" پایان
    پایان
    سرتیتر: اندازه = 3 محتوا = "بلوکی" پایان
    جعبه:
        تکه: نمایش = بلوکی محتوا = "یک" پایان
        تکه: نمایش = بلوکی محتوا = "دو" پایان
    پایان
پایان

برای پنهان کردن عنصر دو راه دارید که رفتارشان فرق دارد. نمایش = هیچ عنصر را کاملاً از صفحه برمی‌دارد: جعبه‌ای ندارد و عنصرهای بعدی بالا می‌آیند. دیدپذیری = پنهان فقط رسم شدنش را متوقف می‌کند: جایش می‌ماند. در هر دو حالت نمی‌شود روی عنصر کلیک کرد، صفحه‌کلید نمی‌تواند روی آن تمرکز کند و صفحه‌خوان‌ها از آن می‌گذرند. دو دکمه‌ی زیر سبک را از یک اسکریپت تنظیم می‌کنند تا بتوانید پاراگرافِ بعدی را تماشا کنید.

web-css-hiding.salam
واردسازی دام

صفحه:
    عنوان = "پنهان کردن"
    سراسری: گزینشگر = "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" پایان
پایان

سرریز

وقتی محتوا از جعبه‌اش بزرگ‌تر است، سرریز تکلیف را روشن می‌کند. با نمایان (پیش‌فرض) بیرون می‌ریزد و روی همسایه‌ها می‌افتد. پنهان آن را در کادر می‌برد، پیمایشی همیشه نوار پیمایش نشان می‌دهد، و خودکار فقط وقتی چیزی برای پیمایش هست که تقریباً همیشه همان است که می‌خواهید. بریده مثل پنهان می‌برد ولی هرگز پیمایش را، حتی از یک اسکریپت، مجاز نمی‌کند، و تنها مقداری است که با فضا برش سرریز کار می‌کند. سرریز افقی و سرریز عمودی یک راستا را جدا تعیین می‌کنند و سرریز بلوکی و سرریز خطی شکل منطقی آن‌هایند که امروز مرورگرهای کمتری می‌شناسند.

web-css-overflow.salam
صفحه:
    عنوان = "سرریز"
    سراسری: اندازه جعبه = "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)" در هر جا به کار می‌رود.

web-css-functions.salam
صفحه:
    عنوان = "تابع‌های 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" بر پایه‌ی جایگاه یا مکان برمی‌گزینند. گزینشگر را نگذارید تا قاعده برای هر عنصر اعمال شود، که همان کار سطر اندازه جعبه بالاست.

web-css-global.salam
صفحه:
    عنوان = "قاعده‌های سراسری"
    سراسری: اندازه جعبه = "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) همین کار را برای یک تکه‌ی کامل صفحه می‌کند: پارامتر می‌گیرد، درختی از عنصرهای سبک‌دار می‌سازد، و محتوا: پایان جایی را نشان می‌دهد که فرزندان هر بار استفاده در آن می‌نشینند. پارامترها در سبک‌ها هم کار می‌کنند: مقداری مثل سرریز = حالت پارامتر حالت را می‌خواند. استفاده‌هایی که سبک یکسان دارند یک کلاس تولیدشده را شریک می‌شوند، پس کارتی که ده بار به کار رود یک قاعده می‌افزاید.

web-css-components.salam
پایا گام := 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 در درس واکنش‌گرا آمده‌اند.

web-css-fieldsizing.salam
صفحه:
    عنوان = "اندازه فیلد"
    سراسری: گزینشگر = "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 را به صفحه بدهید و نتیجه را ببینید.