FA-TOOLS — Header Component

طراحی دکمه‌های شبح (Ghost Buttons) با انیمیشن‌های پر شدن رنگ پس‌زمینه

🚀 نقشه‌راه سریع: قلب طراحی دکمه شبح متحرک

رفیق برنامه‌نویس، اینجوری باحال می‌شی!

✨ شناخت دکمه شبح

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

🎨 هدف از انیمیشن پر شدن

بازخورد بصری دلنشین به کاربر، مدرن‌سازی تجربه کاربری و افزایش جذابیت.

🛠️ ابزارهای اصلی (HTML/CSS)

یک تگ <button> و قدرت بی‌کران pseudo-elements (<::before> یا <::after>) در CSS.

⚙️ هسته انیمیشن

جابه‌جایی یا تغییر اندازه pseudo-element با `transform` یا `width`/`height` و `transition`.

بزن بریم تا این مهارت رو باهم یاد بگیریم!

اگر به ابزارهای بیشتر یا کد‌های آماده نیاز داری، حتماً یه سر به
فروشگاه ابزارهای ما بزن!


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

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

دکمه شبح چیست و چرا باید آن را انیمیشنی کنیم؟

تصور کن یک دکمه داری که فقط یک خط دورش کشیده شده و متنش تو خالیه. این دقیقا همون Ghost Button خودمونه. دلیل محبوبیتش هم اینه که هم شیک و مدرنه، هم مزاحم محتوای اصلی صفحه نمی‌شه. مثل یک روحیه که هست ولی فضا رو اشغال نمی‌کنه. اما گاهی اوقات، این سادگی بیش از حد می‌تونه باعث بشه کاربر متوجه نشه که این یک دکمه قابل کلیکه. اینجا جادوی انیمیشن‌های پر شدن رنگ وارد عمل می‌شه. وقتی کاربر نشانگر موس رو روی دکمه میاره (hover) یا با انگشتش لمسش می‌کنه، یهو پس‌زمینه دکمه شروع می‌کنه به پر شدن با یه رنگ جذاب. این حرکت، نه تنها بازخورد بصری واضحی به کاربر میده که “بله، این یه دکمه‌اس و می‌تونی روش کلیک کنی”، بلکه حس پویایی و مدرن بودن رو هم به رابط کاربری اضافه می‌کنه. در واقع، این انیمیشن به دکمه شخصیت میده و اون رو از حالت ایستا خارج می‌کنه.

نکته UX طلایی 💡

دکمه‌های شبح بهترین گزینه برای اکشن‌های ثانویه (Secondary Actions) هستن. یعنی کارهایی که اهمیت کمتری دارن یا گزینه جایگزین محسوب میشن. مثلاً “لغو” به جای “تأیید”. اکشن‌های اولیه و مهم رو بهتره با دکمه‌های پررنگ و برجسته نشون بدیم تا کاربر راحت‌تر پیداشون کنه.

ساختار پایه‌ای یک دکمه شبح: HTML و CSS خام

اول از همه، رفقا، بیاید یک دکمه شبح ساده درست کنیم. برای این کار فقط به یک تگ `

<button class="ghost-button">بیشتر بدانید</button>

استایل‌های CSS پایه برای دکمه شبح

حالا با استفاده از CSS، به دکمه‌مون ظاهر یک “شبح” رو می‌دیم. یعنی پس‌زمینه شفاف، حاشیه، و رنگ متن هماهنگ.
برای یادگیری و استفاده از اسنیپت‌های CSS بیشتر میتونی به بخش مربوطه سر بزنی.

.ghost-button {
    background-color: transparent;
    border: 2px solid #007bff; /* رنگ حاشیه */
    color: #007bff; /* رنگ متن */
    padding: 12px 25px;
    font-size: 1.1em;
    font-weight: 600;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    border-radius: 5px;
    position: relative; /* برای pseudo-elements ضروری است */
    overflow: hidden; /* برای مخفی کردن بخش‌های اضافی pseudo-element */
    transition: all 0.3s ease; /* انیمیشن نرم برای تغییرات اصلی دکمه */
    z-index: 1; /* اطمینان از اینکه متن بالای pseudo-element باشد */
}

.ghost-button:hover {
    color: #fff; /* رنگ متن در حالت هاور */
    /* پس‌زمینه با انیمیشن پر می‌شود، اینجا تغییر مستقیم اعمال نمی‌شود */
}

جادوی انیمیشن پر شدن پس‌زمینه: با استفاده از Pseudo-elements

حالا می‌رسیم به قسمت هیجان‌انگیز کار! برای ساخت انیمیشن پر شدن رنگ، از ::before یا ::after که بهشون Pseudo-elements میگیم، استفاده می‌کنیم. اینها مثل عناصر نامرئی هستن که می‌تونیم بهشون استایل بدیم و ازشون برای افکت‌های بصری استفاده کنیم.
ما یک ::before اضافه می‌کنیم که در حالت عادی مخفیه و وقتی روی دکمه هاور می‌کنی، به آرامی تمام فضای دکمه رو پر می‌کنه.

اضافه کردن Pseudo-element و استایل اولیه

توی این مرحله، ::before رو به دکمه اضافه می‌کنیم. این ::before قراره نقش پس‌زمینه رنگی ما رو بازی کنه. اون رو در حالت عادی خارج از دید قرار می‌دیم (مثلاً با `transform: translateX(-100%)` یا `width: 0`).

.ghost-button::before {
    content: ''; /* ضروری برای pseudo-elements */
    position: absolute;
    top: 0;
    left: 0;
    width: 0; /* در حالت عادی عرضش صفره */
    height: 100%;
    background-color: #007bff; /* رنگی که دکمه باهاش پر میشه */
    transition: width 0.3s ease-out; /* انیمیشن برای پر شدن عرض */
    z-index: -1; /* پشت متن دکمه قرار می‌گیرد */
    border-radius: 3px; /* کمی کمتر از دکمه اصلی برای جلوگیری از بیرون زدگی */
}

فعال کردن انیمیشن با هاور (Hover)

حالا وقتشه که به دکمه بگیم وقتی کاربر روش هاور کرد، چه اتفاقی بیفته. توی حالت :hover، عرض ::before رو از صفر به ۱۰۰٪ تغییر می‌دیم. به خاطر transition که قبلاً تعریف کردیم، این تغییر به صورت نرم و انیمیشنی اتفاق می‌افته.

.ghost-button:hover::before {
    width: 100%; /* پر شدن عرض در حالت هاور */
}

.ghost-button:hover {
    color: #fff; /* تغییر رنگ متن به سفید برای کنتراست بهتر روی پس‌زمینه آبی */
    border-color: #007bff; /* حاشیه هم همرنگ با پس‌زمینه میشه */
}

نمونه کامل و یکپارچه: HTML و CSS

حالا همه چیز رو با هم ترکیب می‌کنیم. می‌تونی این کدها رو مستقیم توی پروژه خودت کپی کنی و نتیجه رو ببینی. یک دکمه شبح با انیمیشن پر شدن رنگ از چپ به راست. رفقای عزیز برنامه‌نویسان HTML و CSS کار حتماً از این قسمت استفاده کنید.

کد نهایی (HTML & CSS)

<!-- در فایل HTML خود قرار دهید -->
<button class="ghost-button">بیشتر بدانید</button>

/* در فایل CSS خود قرار دهید */
.ghost-button {
    background-color: transparent;
    border: 2px solid #007bff;
    color: #007bff;
    padding: 12px 25px;
    font-size: 1.1em;
    font-weight: 600;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    border-radius: 5px;
    position: relative;
    overflow: hidden;
    transition: all 0.3s ease;
    z-index: 1;
    display: inline-block; /* برای عرض مناسب در موبایل و دسکتاپ */
}

.ghost-button::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 0;
    height: 100%;
    background-color: #007bff;
    transition: width 0.3s ease-out;
    z-index: -1;
    border-radius: 3px;
}

.ghost-button:hover::before {
    width: 100%;
}

.ghost-button:hover {
    color: #fff;
    border-color: #007bff;
}

/* رسپانسیو بودن دکمه برای موبایل و تبلت و دسکتاپ و تلویزیون */
@media (max-width: 768px) {
    .ghost-button {
        padding: 10px 20px;
        font-size: 1em;
        width: auto; /* برای دستگاه‌های کوچک‌تر اجازه میده عرض خودش رو بگیره */
        display: block; /* در موبایل ممکنه بهتر باشه دکمه تمام عرض رو بگیره */
        margin: 10px auto;
    }
}
@media (min-width: 769px) and (max-width: 1024px) {
    .ghost-button {
        padding: 11px 22px;
        font-size: 1.05em;
    }
}
/* برای صفحات نمایش بزرگ مثل تلویزیون */
@media (min-width: 1920px) {
    .ghost-button {
        padding: 14px 30px;
        font-size: 1.2em;
    }
}

انواع جهت‌های پر شدن (Fill Directions) و تکنیک‌ها

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

مقایسه تکنیک‌های انیمیشن پر شدن

جهت پر شدن تغییرات CSS اصلی (::before)
از چپ به راست

(شروع از `left: 0`) ➡️


::before { left: 0; width: 0; }
:hover::before { width: 100%; }
از راست به چپ

(شروع از `right: 0`) ⬅️


::before { right: 0; width: 0; }
:hover::before { width: 100%; }
از بالا به پایین

(شروع از `top: 0`) ⬇️


::before { top: 0; height: 0; width: 100%; }
:hover::before { height: 100%; }
از پایین به بالا

(شروع از `bottom: 0`) ⬆️


::before { bottom: 0; height: 0; width: 100%; }
:hover::before { height: 100%; }
از مرکز (Circle/Scale)

(با `transform: scale(0)`) 🎯


::before { top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; transform: translate(-50%, -50%) scale(0); transition: transform 0.4s ease-out; }
:hover::before { transform: translate(-50%, -50%) scale(5); /* بزرگتر از دکمه */ }

رسپانسیو بودن: دکمه‌هایی برای همه نمایشگرها

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

بهترین شیوه‌ها و نکات حرفه‌ای

برای اینکه دکمه‌هات حرفه‌ای و بی‌نقص باشن، چند تا نکته مهم هست که باید حواست بهشون باشه:


  • کنتراست مناسب: مطمئن شو که رنگ متن دکمه در حالت عادی و در حالت هاور، با پس‌زمینه سایت و پس‌زمینه پر شده، کنتراست خوبی داره تا به راحتی خونده بشه. این برای دسترس‌پذیری (Accessibility) هم حیاتیه.

  • سرعت انیمیشن: انیمیشن‌ها نباید خیلی کند باشن که کاربر رو کلافه کنن و نه اونقدر سریع که اصلا متوجهشون نشه. ۰.۳ تا ۰.۵ ثانیه معمولاً یک زمان طلاییه.

  • پرهیز از افراط: همه دکمه‌های سایتت رو اینطوری متحرک نکن. دکمه‌های شبح با انیمیشن بهتره برای اکشن‌های مهم ولی نه اصلی‌ترین اکشن‌ها استفاده بشن.

  • تست روی دستگاه‌های مختلف: حتماً دکمه‌هات رو روی گوشی، تبلت و دسکتاپ تست کن تا مطمئن بشی همه جا درست کار می‌کنن.

  • بهینه‌سازی برای عملکرد: استفاده زیاد از `box-shadow` یا `filter` روی عناصر متحرک می‌تونه باعث افت فریم بشه. سعی کن از `transform` برای انیمیشن استفاده کنی که بهینه‌تره.

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

عیب‌یابی سریع (Troubleshooting)

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


  • مشکل: انیمیشن کار نمی‌کنه.

    راه‌حل: اول مطمئن شو که `position: relative;` رو روی خود دکمه (`.ghost-button`) و `position: absolute;` رو روی `::before` قرار دادی. همچنین، `content: ”;` در `::before` رو فراموش نکن. اگه `overflow: hidden;` رو روی دکمه نزنی، `::before` ممکنه از دکمه بیرون بزنه و درست کار نکنه.


  • مشکل: متن دکمه زیر پس‌زمینه پر شده می‌ره.

    راه‌حل: `z-index: 1;` رو به خود دکمه (`.ghost-button`) و `z-index: -1;` رو به `::before` اضافه کن. اینطوری متن همیشه بالای پس‌زمینه قرار می‌گیره.


  • مشکل: گوشه‌های دکمه تیز می‌مونه، حتی با `border-radius`.

    راه‌حل: مطمئن شو که `border-radius` رو هم روی خود دکمه و هم روی `::before` اعمال کردی. گاهی اوقات برای اینکه کاملاً منطبق باشن، `border-radius` `::before` رو کمی کمتر (مثلاً ۱ یا ۲ پیکسل) از دکمه اصلی در نظر بگیر. این باعث میشه تا گوشه‌ها دقیق‌تر و زیباتر نمایش داده بشن و از هرگونه ‘تغییر’ بصری ناخواسته جلوگیری میشه.


  • مشکل: انیمیشن در موبایل یا تبلت درست نمایش داده نمی‌شود.

    راه‌حل: از `@media queries` استفاده کن تا ابعاد و فونت دکمه رو برای صفحه نمایش‌های کوچیک‌تر بهینه کنی. مطمئن شو که `display: inline-block;` یا `display: block;` (بسته به نیاز) رو برای دکمه تنظیم کردی.

سخن پایانی

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

{
“@context”: “https://schema.org”,
“@type”: “FAQPage”,
“mainEntity”: [
{
“@type”: “Question”,
“name”: “Ghost Button (دکمه شبح) چیست؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Ghost Button دکمه‌ای است با طراحی مینیمال که فقط شامل یک حاشیه و متن بوده و پس‌زمینه آن شفاف است. این دکمه‌ها برای اکشن‌های ثانویه یا زیبایی‌شناختی در رابط کاربری استفاده می‌شوند.”
}
},
{
“@type”: “Question”,
“name”: “چرا باید انیمیشن پر شدن رنگ به Ghost Button اضافه کنیم؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “اضافه کردن انیمیشن پر شدن رنگ، بازخورد بصری واضحی به کاربر می‌دهد که دکمه قابل تعامل است. همچنین، جذابیت بصری و حس پویایی و مدرن بودن را به رابط کاربری اضافه می‌کند و تجربه کاربری را بهبود می‌بخشد.”
}
},
{
“@type”: “Question”,
“name”: “چگونه انیمیشن پر شدن رنگ را با CSS پیاده‌سازی کنیم؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “برای پیاده‌سازی این انیمیشن، از Pseudo-element ها مانند ::before یا ::after استفاده می‌کنیم. این عناصر در حالت عادی مخفی هستند و با تغییر خاصیت‌هایی مانند ‘width’ یا ‘height’ و اضافه کردن ‘transition’ در حالت ‘hover’ دکمه، به صورت متحرک و نرم پر می‌شوند.”
}
},
{
“@type”: “Question”,
“name”: “آیا Ghost Button با انیمیشن برای موبایل و تبلت هم مناسب است؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “بله، با استفاده از Media Queries در CSS می‌توان ابعاد، فونت و استایل دکمه را برای اندازه‌های مختلف صفحه نمایش (موبایل، تبلت، لپ‌تاپ و حتی تلویزیون) بهینه کرد تا در همه دستگاه‌ها به درستی و زیبایی نمایش داده شود.”
}
},
{
“@type”: “Question”,
“name”: “چه مشکلاتی ممکن است در طراحی Ghost Button با انیمیشن پیش بیاید و چگونه آن‌ها را حل کنیم؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “مشکلاتی مانند کار نکردن انیمیشن (نیاز به position: relative/absolute و content: ”)، قرار گرفتن متن زیر پس‌زمینه (نیاز به z-index)، یا مشکلات در نمایش گوشه‌ها (نیاز به border-radius روی ::before) رایج هستند. همچنین مشکلات رسپانسیو بودن که با Media Queries حل می‌شود.”
}
}
]
}

// This script is purely for visual demonstration within the generated content
// and cannot actually copy to clipboard in a simple text output.
// In a real block editor/website, you’d use JavaScript for this functionality.
function copyCode(buttonElement) {
const codeElement = buttonElement.nextElementSibling.querySelector(‘code’);
const codeText = codeElement.innerText;

// This part would typically use navigator.clipboard.writeText(codeText);
// For demonstration, we just change the button text
buttonElement.innerText = ‘کپی شد!’;
setTimeout(() => {
buttonElement.innerText = ‘کپی کد’;
}, 2000);
console.log(“Code copied (simulated):”, codeText); // Log to console for confirmation
}

Table of Contents

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