FA-TOOLS — Header Component

آموزش طراحی هدرهای چسبنده (Sticky Header) با تغییر استایل ملایم هنگام اسکرول

رفیق برنامه‌نویس، تا حالا شده تو سایتی بچرخی و حس کنی یک چیزی کمه؟ مثلاً وقتی اسکرول می‌کنی، هدر سایت غیب میشه و برای پیدا کردن منو مجبور میشی برگردی بالا؟ یا برعکس، یک هدر چسبنده هست که خشک و بی‌روح، بدون هیچ ظرافتی سر جاش وایساده؟ اینجاست که اهمیت یک هدر چسبنده پویا و هوشمند با تغییر استایل ملایم خودش رو نشون میده.

ما قراره اینجا قدم به قدم یاد بگیریم چطور یک هدر چسبنده بسازیم که هم همیشه در دسترس باشه و هم با اسکرول کردن، یه تغییر استایل ظریف و چشم‌نواز داشته باشه. این قابلیت نه تنها تجربه کاربری سایتت رو متحول می‌کنه، بلکه به سایتت یه جلوه حرفه‌ای و مدرن میده. آماده‌ای تا کدها رو بزنیم و این قابلیت باحال رو پیاده‌سازی کنیم؟

نیاز به ابزارهای برنامه‌نویسی خاص داری؟ همین حالا به فروشگاه ابزارهای برنامه‌نویسی fa-tools.ir سر بزن و با بهترین اسنیپت‌های CSS، JavaScript و HTML، کارتو راه بنداز.

برای مشاوره یا سوالاتت هم می‌تونی با ما تماس بگیری: 09202232789

✨ نقشه راه: طراحی هدر چسبنده با استایل پویا در یک نگاه! ✨

HTML

ساختار پایه هدر (<nav>, <div>) با ID مشخص.

CSS (پایه)

استایل‌های اولیه (رنگ، پدینگ، ارتفاع) و یک کلاس برای حالت چسبنده.

JavaScript

تشخیص اسکرول و افزودن/حذف کلاس CSS بر اساس موقعیت.

CSS (پویا)

تعریف transition و استایل‌های حالت چسبنده (رنگ، اندازه، سایه).

بهینه‌سازی و عیب‌یابی

رسپانسیو کردن، عملکرد بهتر، رفع مشکلات احتمالی.

چرا هدر چسبنده با تغییر استایل، یک برگ برنده است؟

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

بهبود تجربه کاربری (UX) و ناوبری

اصلی‌ترین دلیل برای استفاده از هدر چسبنده، راحتی کاربره. وقتی کاربر میدونه که هر وقت بخواد میتونه به منوی سایت دسترسی داشته باشه، با آرامش بیشتری محتوای سایت رو دنبال می‌کنه. این اسنیپت ساده، یه قدم بزرگ برای افزایش رضایت بازدیدکننده حساب میشه.

هویت بصری پویا و حرفه‌ای

تغییر استایل ملایم، مثل عوض شدن رنگ پس‌زمینه، کوچکتر شدن لوگو یا اضافه شدن یک سایه ظریف، به سایتت شخصیت میده. این تغییرات جزئی باعث میشه سایت پویا و زنده به نظر برسه، نه یک صفحه ثابت و خشک. این یه نوع تعامل بصری هست که کاربر رو بیشتر درگیر می‌کنه و حس حرفه‌ای بودن رو القا می‌کنه.

بهینه‌سازی برای دستگاه‌های مختلف (رسپانسیو)

امروزه اکثر کاربران با موبایل و تبلت سایت‌ها رو چک می‌کنند. یک هدر چسبنده خوب باید روی این دستگاه‌ها هم عملکرد عالی داشته باشه. کوچکتر شدن هدر هنگام اسکرول، فضای بیشتری رو برای محتوا در اختیار کاربر میذاره که در صفحات کوچک موبایل، حیاتیه. با استفاده از تکنیک‌های CSS درست، میتونیم مطمئن بشیم که این هدر روی هر دستگاهی بی‌نقص کار می‌کنه.

مواد لازم برای شروع کار: HTML, CSS و JavaScript

برای اینکه بتونیم این هدر رو بسازیم، به سه یار همیشگی دنیای وب نیاز داریم:

  • HTML (HyperText Markup Language): برای تعریف ساختار و محتوای هدر.
  • CSS (Cascading Style Sheets): برای استایل‌دهی و زیباسازی هدر در حالت‌های عادی و چسبنده.
  • JavaScript: برای تشخیص رویداد اسکرول و تغییر کلاس‌های CSS هدر.

قدم اول: طراحی ساختار اولیه HTML برای هدر

اول از همه، باید اسکلت هدرمون رو با HTML بسازیم. این هدر شامل لوگو، آیتم‌های منو و شاید دکمه‌های کناری باشه. نکته مهم اینه که یک ID مشخص به هدرمون بدیم تا بتونیم با جاوااسکریپت بهش دسترسی پیدا کنیم.

کپی کد

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>هدر چسبنده با استایل پویا</title>
    <link rel="stylesheet" href="style.css">
</head>
<body style="margin: 0; font-family: sans-serif;">

    <header id="myHeader" class="header">
        <div class="container">
            <div class="logo">
                <a href="#">لوگو شما</a>
            </div>
            <nav class="main-nav">
                <ul>
                    <li><a href="#">خانه</a></li>
                    <li><a href="#">خدمات</a></li>
                    <li><a href="#">درباره ما</a></li>
                    <li><a href="#">تماس با ما</a></li>
                </ul>
            </nav>
        </div>
    </header>

    <div class="content" style="height: 1500px; padding: 20px; text-align: center; background-color: #f0f0f0; margin-top: 80px;">
        <h2>محتوای اصلی سایت شما</h2>
        <p>برای تست هدر، صفحه را اسکرول کنید.</p>
        <p>متن‌های بیشتر و بیشتر تا بتونید اسکرول کنید...</p>
        <p>ما اینجا کلی محتوای باارزش داریم که مطالعه کنید.</p>
    </div>

    <script src="script.js"></script>
</body>
</html>

(برای کپی کردن، کد را انتخاب کنید.)

همونطور که میبینی، ما یک تگ `

` داریم با `id=”myHeader”` و یک کلاس `header`. داخلش هم یک `div` برای چینش محتوا (لوگو و ناوبری) گذاشتیم. تگ‌های “ و “ رو هم اضافه کردیم که به ترتیب فایل‌های CSS و JS ما رو وصل کنن.

قدم دوم: استایل‌دهی اولیه به هدر با CSS

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

ظاهر پایه هدر

استایل‌های پایه رو داخل فایل `style.css` بنویس. این استایل‌ها هدر رو قبل از چسبنده شدن، جذاب نشون میده.

کپی کد

/* style.css */
body {
    margin: 0;
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    direction: rtl; /* برای راست به چپ */
    text-align: right;
}

.header {
    background-color: #333;
    color: #fff;
    padding: 15px 0;
    position: fixed; /* در ابتدا هم fixed باشه تا جای محتوا رو نگیره */
    width: 100%;
    top: 0;
    left: 0;
    z-index: 1000;
    transition: background-color 0.3s ease, padding 0.3s ease, box-shadow 0.3s ease; /* ترانزیشن برای تغییرات */
}

.header .container {
    max-width: 1200px;
    margin: 0 auto;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 0 20px;
}

.header .logo a {
    color: #fff;
    text-decoration: none;
    font-size: 28px;
    font-weight: bold;
    transition: font-size 0.3s ease;
}

.main-nav ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
}

.main-nav ul li {
    margin-right: 25px;
}

.main-nav ul li:last-child {
    margin-right: 0;
}

.main-nav ul li a {
    color: #fff;
    text-decoration: none;
    font-size: 17px;
    padding: 5px 0;
    transition: color 0.3s ease;
}

.main-nav ul li a:hover {
    color: #007bff;
}

/* استایل برای محتوای اصلی که زیر هدر قرار می‌گیرد */
.content {
    padding-top: 80px; /* به اندازه ارتفاع اولیه هدر */
}
    

(برای کپی کردن، کد را انتخاب کنید.)

تعریف کلاس برای هدر چسبنده (Sticky Header Class)

حالا یک کلاس جدید به اسم `.sticky` تعریف می‌کنیم. وقتی جاوااسکریپت تشخیص داد که باید هدر چسبنده بشه، این کلاس رو به تگ `

` اضافه می‌کنه. استایل‌های این کلاس باعث تغییرات ملایم بصری میشن.

کپی کد

/* style.css (ادامه) */
.header.sticky {
    background-color: #fff; /* تغییر رنگ پس‌زمینه به سفید */
    padding: 10px 0; /* کاهش پدینگ */
    box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* اضافه کردن سایه */
}

.header.sticky .logo a {
    color: #333; /* تغییر رنگ لوگو */
    font-size: 24px; /* کوچکتر شدن لوگو */
}

.header.sticky .main-nav ul li a {
    color: #555; /* تغییر رنگ آیتم‌های منو */
}

.header.sticky .main-nav ul li a:hover {
    color: #007bff; /* رنگ هاور مثل قبل */
}
    

(برای کپی کردن، کد را انتخاب کنید.)

همونطور که می‌بینی، برای کلاس `.sticky` استایل‌های جدیدی تعریف کردیم که شامل تغییر رنگ پس‌زمینه، پدینگ و سایه میشه. همچنین رنگ لوگو و آیتم‌های منو هم عوض میشه. دقت کن که از `transition` در کلاس `.header` استفاده کردیم تا این تغییرات به نرمی اتفاق بیفتن. این ترانزیشن‌ها واقعاً در چشم‌نواز بودن هدر تاثیر دارن.

قدم سوم: افزودن جادوی جاوااسکریپت برای چسبندگی و تغییر استایل

اینجاست که جاوااسکریپت وارد عمل میشه. ما نیاز داریم تشخیص بدیم کاربر چقدر صفحه رو اسکرول کرده و بر اساس اون، کلاس `.sticky` رو به هدر اضافه یا ازش حذف کنیم.

تشخیص موقعیت اسکرول

یه تابع می‌نویسیم که هر وقت کاربر اسکرول کرد، فعال بشه. این تابع، موقعیت اسکرول رو بررسی می‌کنه و اگه از یک حد مشخصی عبور کرد، هدر رو چسبنده می‌کنه.

اعمال کلاس چسبنده

کد زیر رو در فایل `script.js` قرار بده. این کد، هدر رو پیدا می‌کنه و با استفاده از رویداد `scroll`، وضعیت چسبندگی رو مدیریت می‌کنه.

کپی کد

// script.js
window.onscroll = function() { stickyHeader() };

let header = document.getElementById("myHeader");
let stickyOffset = header.offsetTop; // موقعیت اولیه هدر نسبت به بالای صفحه

function stickyHeader() {
    if (window.pageYOffset > stickyOffset) {
        header.classList.add("sticky");
    } else {
        header.classList.remove("sticky");
    }
}

// در صورتی که هدر اولیه fixed بود، باید offsetTop رو به گونه‌ای تنظیم کنیم که
// بعد از یک اسکرول مشخص فعال بشه.
// در این مثال چون header از ابتدا fixed است، stickyOffset باید بر اساس ارتفاع header
// یا یک مقدار دلخواه (مثلاً 50px) تنظیم شود.
// بهتر است مقدار stickyOffset را یک عدد ثابت (مثلا 50px) در نظر بگیریم
// یا یک div خالی قبل از هدر بگذاریم و offsetTop آن را بگیریم.
// راه حل پیشنهادی:
// const initialHeaderHeight = header.offsetHeight;
// stickyOffset = initialHeaderHeight; // مثلا 80 پیکسل بعد از اسکرول
// اما ساده‌ترین راه برای این مثال:
stickyOffset = 50; // هدر بعد از 50 پیکسل اسکرول چسبنده می‌شود.

    

(برای کپی کردن، کد را انتخاب کنید.)

مقایسه روش‌های تشخیص اسکرول

روش توضیحات و کاربرد
window.onscroll ساده‌ترین راه برای تشخیص اسکرول کل صفحه. یک تابع به رویداد `scroll` پنجره اضافه می‌کند. مناسب برای اکثر موارد.
addEventListener('scroll', ...) روش مدرن‌تر و انعطاف‌پذیرتر. اجازه می‌دهد چندین تابع به یک رویداد اضافه شود بدون اینکه قبلی‌ها بازنویسی شوند.

برای پروژه‌های ساده، window.onscroll کفایت می‌کند، اما در پروژه‌های پیچیده‌تر، استفاده از addEventListener توصیه می‌شود تا تداخل با سایر اسکریپت‌ها کمتر شود.

قدم چهارم: ظریف‌کاری‌ها و تغییر استایل ملایم در CSS

ترانزیشن‌ها (Transitions) در CSS، همون عنصر جادویی هستن که تغییر استایل رو از حالت ناگهانی به حالت نرم و روان تبدیل می‌کنن. بدون ترانزیشن، هدر به صورت یکدفعه‌ای استایلش عوض میشه که اصلاً جلوه خوبی نداره.

ترانزیشن‌های CSS برای حرکت نرم

ما از قبل توی کلاس `.header` ترانزیشن‌ها رو برای `background-color`, `padding` و `box-shadow` تعریف کردیم. این یعنی هر تغییری که در این ویژگی‌ها ایجاد بشه، به نرمی و طی 0.3 ثانیه اتفاق میفته. این عدد `0.3s` رو میتونی به دلخواه خودت تغییر بدی تا سرعت تغییر استایل کم یا زیاد بشه. مثلاً برای یک تغییر استایل سریعتر، میتونی `0.2s` و برای یک تغییر کندتر `0.5s` بذاری.

تغییر رنگ، اندازه و سایه

توی کلاس `.header.sticky` که توی قدم دو نوشتیم، دقیقا این تغییرات رو اعمال کردیم:

  • `background-color`: از مشکی به سفید (یا هر رنگ دلخواه دیگه).
  • `padding`: از `15px 0` به `10px 0` (کاهش ارتفاع هدر).
  • `box-shadow`: اضافه کردن سایه برای جلوه برجسته.
  • `font-size` لوگو و `color` آیتم‌های منو: برای هماهنگی بیشتر با استایل جدید.

این تغییرات باعث میشه هدر وقتی چسبنده میشه، کمی جمع‌وجورتر و متفاوت‌تر به نظر برسه، اما نه به صورت ناگهانی، بلکه با یک حرکت لطیف و چشم‌نواز.

نکته‌های مهم برای یک هدر چسبنده بی‌نقص و ریسپانسیو

ساختن هدر چسبنده فقط کدنویسی نیست، بلکه شامل دقت به جزئیات و پیش‌بینی مشکلات احتمالیه. یک هدر خوب، باید در هر شرایطی عالی به نظر برسه.

رسپانسیو بودن در موبایل و تبلت

در دستگاه‌های موبایل، فضای صفحه محدودتره. بنابراین، هدر چسبنده باید در این دستگاه‌ها حتی کوچک‌تر و جمع‌وجورتر بشه. از Media Queries در CSS استفاده کن تا استایل‌های مخصوص موبایل رو اعمال کنی. مثلاً میتونی پدینگ هدر رو بیشتر کم کنی، یا فونت لوگو رو کوچکتر کنی و آیتم‌های منو رو به یک منوی همبرگری تغییر بدی.

کپی کد

/* style.css (استایل‌های رسپانسیو) */
@media (max-width: 768px) {
    .header .container {
        flex-direction: column; /* در موبایل آیتم‌ها زیر هم قرار بگیرند */
        padding: 0 15px;
    }

    .main-nav ul {
        margin-top: 10px;
        flex-wrap: wrap; /* برای اینکه آیتم‌ها در یک خط جا نشدند، به خط بعدی بروند */
        justify-content: center;
    }

    .main-nav ul li {
        margin: 0 10px 10px 0; /* پدینگ برای آیتم‌های منو */
    }

    .header.sticky {
        padding: 8px 0; /* پدینگ کمتر در حالت چسبنده موبایل */
    }

    .header.sticky .logo a {
        font-size: 20px; /* لوگو کوچکتر در حالت چسبنده موبایل */
    }
}
    

(برای کپی کردن، کد را انتخاب کنید.)

این کدها مطمئن میشن که هدر تو روی صفحات کوچکتر هم خوب به نظر میاد و کارایی داره. حواست باشه که برای پیاده‌سازی کامل منوی همبرگری، نیاز به جاوااسکریپت و CSS بیشتری هست که از حوصله این مقاله خارجه اما اصول رسپانسیو کردنش همینه.

توجه به محتوای زیر هدر

وقتی هدر رو `position: fixed` میکنی، از جریان طبیعی سند خارج میشه و محتوای زیرش به سمت بالا حرکت میکنه و ممکنه زیر هدر قرار بگیره. برای حل این مشکل، باید به `body` یا اولین `div` بعد از هدر، یک `padding-top` به اندازه ارتفاع هدر بدی. مثلاً اگه ارتفاع هدر 80 پیکسل باشه، `padding-top: 80px;` رو اعمال کن. این کار باعث میشه محتوا از زیر هدر بیرون بیاد.

بهینه‌سازی عملکرد (Performance Optimization)

رویداد `scroll` خیلی زود به زود فعال میشه. اگه تابع `stickyHeader` تو کارهای سنگینی انجام بده، ممکنه باعث کندی و لگ در اسکرول بشه. برای جلوگیری از این مشکل، میتونی از تکنیک `debounce` یا `throttle` استفاده کنی. این تکنیک‌ها باعث میشن تابع اسکرول با تاخیر یا در فواصل زمانی مشخص اجرا بشه و بار روی مرورگر رو کم کنن. البته برای این مثال ساده، نیازی بهش نیست، اما برای پروژه‌های بزرگتر، حتما بهش فکر کن.

آزمایش‌پذیری و دیباگ (Debug)

همیشه کدتو در مرورگرهای مختلف (کروم، فایرفاکس، سافاری) و در اندازه‌های مختلف صفحه تست کن. از ابزارهای توسعه‌دهنده مرورگر (Developer Tools) برای بررسی استایل‌ها و رفتار جاوااسکریپت استفاده کن. با `console.log()` در جاوااسکریپت، میتونی مقدار `pageYOffset` و وضعیت اضافه/حذف شدن کلاس رو بررسی کنی.

عیب‌یابی سریع: مشکلات رایج و راه‌حل‌های آن‌ها

تو مسیر کدنویسی، ممکنه با مشکلاتی روبرو بشی. اینجا چندتا از رایج‌ترین‌ها رو با راه‌حلشون آوردیم:

  • مشکل: هدر کلاً چسبنده نمیشه.

    راه‌حل: مطمئن شو که `id=”myHeader”` رو به تگ هدرت دادی و جاوااسکریپت هم درست فایل `script.js` رو لود کرده. همچنین چک کن که مقدار `stickyOffset` درست تنظیم شده باشه و `window.pageYOffset` ازش بزرگتر بشه. `position: fixed` در CSS هدر هم خیلی مهمه.
  • مشکل: هدر چسبنده میشه، اما محتوای زیرش زیر هدر میره.

    راه‌حل: باید به عنصر بعد از هدر یا به `body` یک `padding-top` به اندازه ارتفاع هدر بدی. مثلاً اگر هدرت 60 پیکسل ارتفاع داره، `body { padding-top: 60px; }` اضافه کن.
  • مشکل: تغییر استایل ناگهانیه، نه ملایم.

    راه‌حل: مطمئن شو که در CSS، برای کلاس `.header` ویژگی `transition` رو اضافه کردی: `transition: background-color 0.3s ease, padding 0.3s ease, box-shadow 0.3s ease;`. اگر برای ویژگی خاصی ترانزیشن تعریف نشده باشه، اون ویژگی ناگهانی تغییر می‌کنه.
  • مشکل: هدر در موبایل خوب به نظر نمیاد یا کار نمیکنه.

    راه‌حل: از `meta name=”viewport”` در تگ `<head>` مطمئن شو. از Media Queries برای اعمال استایل‌های خاص موبایل استفاده کن. ارتفاع و پدینگ هدر رو در موبایل کمتر کن تا فضای بیشتری برای محتوا ایجاد بشه.
  • مشکل: هنگام اسکرول، لگ (lag) یا کندی احساس میشه.

    راه‌حل: این مشکل ممکنه به خاطر کدنویسی سنگین در تابع `stickyHeader` باشه. میتونی از `throttle` یا `debounce` در جاوااسکریپت استفاده کنی تا تابع با نرخ کمتری اجرا بشه و عملکرد سایت بهبود پیدا کنه.
  • مشکل: لینک‌های داخلی به صفحات دیگر اسنیپت‌ها به درستی کار نمی‌کنند.

    راه‌حل: مطمئن شو که آدرس دهی به صفحات `fa-tools.ir/snippets/` به درستی و بدون هیچ اشتباهی انجام شده باشه. گاهی یک `/` اضافی یا کم می‌تواند مشکل ایجاد کند. از ابزار `Inspect Element` مرورگر برای بررسی آدرس لینک‌ها استفاده کن.

سوالات متداول (FAQ)

آیا این روش برای همه وب‌سایت‌ها قابل استفاده است؟

بله، این تکنیک HTML، CSS و جاوااسکریپت خالص است و در هر وب‌سایتی (چه با فریمورک باشد و چه نباشد) قابل پیاده‌سازی است. البته برای فریمورک‌های خاص (مثل React یا Vue) ممکن است روش‌های کمی بهینه‌تر وجود داشته باشد، اما این اصول پایه در همه جا کار می‌کنند.

چطور می‌توانم سرعت تغییر استایل هدر را تغییر دهم؟

می‌توانی مقدار زمان را در ویژگی transition در CSS تغییر دهی. مثلاً transition: background-color 0.5s ease; تغییر را کندتر می‌کند و 0.2s سریع‌تر. این ویژگی در فایل CSS تعریف شده است.

آیا هدر چسبنده برای سئو (SEO) خوب است؟

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

چگونه می‌توانم این هدر را در وردپرس استفاده کنم؟

برای وردپرس، باید کدهای HTML را در فایل header.php تم خود، کدهای CSS را در فایل style.css یا از طریق بخش سفارشی‌سازی تم و کدهای جاوااسکریپت را در فایل functions.php (با استفاده از wp_enqueue_script) یا به صورت inline در فوتر یا هدر قرار دهی. برای روش‌های بهینه‌تر در وردپرس، می‌توانید به اسنیپت‌های وردپرس مراجعه کنید.

function copyCode(buttonElement) {
const codeElement = buttonElement.nextElementSibling.querySelector(‘code’);
const textToCopy = codeElement.innerText;

navigator.clipboard.writeText(textToCopy).then(() => {
const originalText = buttonElement.innerText;
buttonElement.innerText = ‘کپی شد!’;
setTimeout(() => {
buttonElement.innerText = originalText;
}, 2000);
}).catch(err => {
console.error(‘Failed to copy text: ‘, err);
alert(‘خطا در کپی کردن کد. لطفا به صورت دستی کپی کنید.’);
});
}

/* Global styles for responsiveness and aesthetics (for the block editor) */
body {
font-family: ‘Segoe UI’, Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
direction: rtl;
text-align: right;
margin: 0;
background-color: #f8f8f8;
}
h1, h2, h3 {
font-family: ‘Segoe UI’, Tahoma, Geneva, Verdana, sans-serif;
color: #1a1a1a;
margin-top: 1.5em;
margin-bottom: 0.8em;
}
h1 { font-size: 2.2em; font-weight: bold; text-align: center; }
h2 { font-size: 1.8em; font-weight: bold; border-bottom: 2px solid #eee; padding-bottom: 10px; }
h3 { font-size: 1.4em; font-weight: bold; color: #555; }
p {
margin-bottom: 1em;
font-size: 1.05em;
line-height: 1.7;
}
a {
color: #007bff;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
ul {
list-style-type: disc;
margin-right: 20px;
padding: 0;
margin-bottom: 1em;
}
li {
margin-bottom: 0.5em;
font-size: 1.05em;
}
pre {
background-color: #2d2d2d;
color: #f8f8f2;
padding: 15px;
border-radius: 5px;
overflow-x: auto;
position: relative;
}
code {
font-family: ‘Fira Code’, ‘Monaco’, ‘Consolas’, monospace;
font-size: 0.95em;
display: block; /* Ensure code block takes full width */
}

/* Responsive adjustments for tables and infographic */
@media (max-width: 768px) {
h1 { font-size: 1.8em; }
h2 { font-size: 1.5em; }
h3 { font-size: 1.2em; }
p, li { font-size: 1em; }
.info-graphic-box > div {
width: 100% !important; /* Force full width on small screens */
margin-bottom: 10px;
}
.header .container {
flex-direction: column;
align-items: flex-end; /* Adjust alignment for RTL in mobile */
}
.main-nav ul {
flex-direction: column;
align-items: flex-end; /* Adjust alignment for RTL in mobile */
margin-top: 15px;
}
.main-nav ul li {
margin-bottom: 10px;
margin-right: 0; /* Remove right margin for vertical stack */
}
table, thead, tbody, th, td, tr {
display: block;
}
thead tr {
position: absolute;
top: -9999px;
left: -9999px;
}
tr { border: 1px solid #ccc; margin-bottom: 10px; }
td {
border: none;
border-bottom: 1px solid #eee;
position: relative;
padding-right: 50% !important; /* Space for label */
text-align: right !important;
}
td:before {
position: absolute;
right: 6px;
width: 45%;
padding-left: 10px;
white-space: nowrap;
content: attr(data-label); /* Use data-label for content */
font-weight: bold;
text-align: right;
color: #555;
}
/* Specific labels for the table */
table tr:nth-of-type(1) td:nth-of-type(1):before { content: “روش:”; }
table tr:nth-of-type(1) td:nth-of-type(2):before { content: “توضیحات:”; }
table tr:nth-of-type(2) td:nth-of-type(1):before { content: “روش:”; }
table tr:nth-of-type(2) td:nth-of-type(2):before { content: “توضیحات:”; }
}
/* Styles for the “کپی کد” button */
.copy-button {
background-color: #5cb85c; /* Green */
color: white;
padding: 5px 10px;
border-radius: 5px;
font-size: 14px;
position: absolute;
top: 10px;
right: 10px;
cursor: pointer;
user-select: none; /* Prevent text selection */
border: none;
outline: none;
transition: background-color 0.2s ease;
}
.copy-button:hover {
background-color: #4cae4c;
}

// Polyfill for navigator.clipboard.writeText for older browsers if needed,
// but modern browsers support it well enough.
// The copy button is already implemented using inline onclick and standard JS.

Table of Contents

آخرین نوشته‌ها