FA-TOOLS — Header Component

کدهای جالب و فان سی اس اس CSS

🎨 نقشه راه کدهای فان CSS: یک نگاه سریع

با ما همراه شو تا دنیای کدها رو باحال‌تر کنیم! اگر سوالی داشتی، همین حالا تماس بگیر: 09202232789

✨ موضوع 🚀 کاربرد اصلی
اثر تایپ‌کردن متن افزودن پویایی به عنوان‌ها و متن
دکمه‌های سه‌بعدی جذابیت بصری و حس کلیک واقعی
افکت گلیچ (Glitch) استایل‌های مدرن و چشم‌نواز
کارت‌های فلیپ نمایش اطلاعات بیشتر با تعامل کاربر
بارگذاری‌های خلاقانه افزایش رضایت کاربر حین انتظار
افکت پارالاکس عمق دادن به صفحات وب
شکل‌های بلاب پس‌زمینه‌ها و عناصر گرافیکی پویا
آکاردئون با CSS خالص سازماندهی محتوا در فضای محدود
عیب‌یابی رایج حل مشکلات معمول در CSS

آماده‌ایم تا وب‌سایتمون رو از حالت “معمولی” به “خاص” تبدیل کنیم! 🚀

رفیق برنامه‌نویس، سلام! می‌خوام یه رازی رو بهت بگم: دنیای وب فقط کدهای خشک و منطقی نیست. گاهی وقتا لازمه یه جادوگر CSS بشی و با چند خط کد، وب‌سایتت رو از یه صفحه معمولی به یه اثر هنری جذاب تبدیل کنی. امروز قراره بریم سراغ یه سری کد CSS که نه تنها فان و باحالن، بلکه می‌تونن تجربه کاربری رو زمین تا آسمون تغیر بدن. اگه دنبال ابزارهای خفن برای توسعه وب می‌گردی، حتماً یه سری به فروشگاه ابزارهای ما بزن؛ کلی چیزای به دردبخور اونجا منتظرته. آماده‌ای برای این ماجراجویی؟ برای شروع، یه سری به صفحه اصلی fa-tools.ir هم بزن که کلی محتوای درجه یک دیگه هم اونجا پیدا می‌کنی. پس بزن بریم تا با هم کدهای CSS رو با یه چاشنی هیجان‌انگیز، یاد بگیریم و توی پروژه‌هامون استفادع کنیم!

✍️ افکت تایپ‌کردن متن (Typewriter Effect)

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

چطور کار می‌کنه؟

این افکت معمولاً با ترکیب دو انیمیشن CSS ساخته میشه: یکی برای ظاهر شدن تدریجی متن (مثل پاک کردن) و دیگری برای شبیه‌سازی کرسر چشمک‌زن (Blinking Cursor). تو کد زیر، با استفاده از @keyframes این دو بخش رو کنترل می‌کنیم.

HTML: عنصر متن

این کد رو کپی کن و به فایل HTML خودت اضافه کن:


<div class="container">
  <h1 class="typewriter">به دنیای جادویی CSS خوش اومدی!</h1>
</div>
    

CSS: جادو از اینجا شروع میشه

این کد رو کپی کن و به فایل CSS خودت اضافه کن:


.container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 150px; /* برای نمایش بهتر افکت */
    background-color: #f0f0f0;
}

.typewriter {
    overflow: hidden; /* پنهان کردن متن اضافی */
    border-right: .15em solid orange; /* کرسر چشمک‌زن */
    white-space: nowrap; /* جلوگیری از شکستن خط */
    margin: 0 auto; /* مرکز قرار گرفتن */
    letter-spacing: .15em; /* فاصله بین حروف */
    animation:
        typing 3.5s steps(30, end),
        blink-caret .75s step-end infinite;
    font-family: monospace;
    font-size: 2.5em;
    color: #333;
}

/* انیمیشن تایپ‌کردن */
@keyframes typing {
    from { width: 0 }
    to { width: 100% }
}

/* انیمیشن کرسر چشمک‌زن */
@keyframes blink-caret {
    from, to { border-color: transparent }
    50% { border-color: orange }
}
    

نکات و شخصی‌سازی:

  • `steps()`: این تابع مشخص می‌کنه که انیمیشن چطور پیش بره. عدد اول تعداد “گام‌ها” یا همون حروف رو مشخص می‌کنه. اگر متنت کوتاهه، این عدد رو کم کن.
  • `animation-duration`: مدت زمان `typing` رو با طول متنت تنظیم کن تا طبیعی‌تر به نظر برسه.
  • `border-color`: رنگ کرسر چشمک‌زن رو عوض کن تا با تم سایتت جور دربیاد.
  • برای محتواهای متنوع‌تر می‌تونی از جاوااسکریپت برای کنترل متن در حال تایپ استفاده کنی، اما برای افکت‌های ساده، CSS خالص بهترینه.

🔘 دکمه‌های سه‌بعدی و جذاب

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

HTML: ساختار دکمه

کد HTML دکمه رو اینجا ببین:


<button class="pushable-btn">
  <span class="front">کلیک کن!</span>
</button>
    

CSS: عمق و حرکت

این کد CSS رو به استایل‌شیتت اضافه کن:


.pushable-btn {
    position: relative;
    border: none;
    background: transparent;
    padding: 0;
    cursor: pointer;
    outline-offset: 4px;
    transition: filter 250ms;
    user-select: none;
    -webkit-user-select: none;
    touch-action: manipulation;
}

.front {
    display: block;
    padding: 12px 42px;
    border-radius: 12px;
    font-size: 1.25em;
    background: hsl(180deg 100% 40%);
    color: white;
    transform: translateY(-6px);
    transition: transform 600ms cubic-bezier(.3, .7, .4, 1.5);
}

.pushable-btn:active .front {
    transform: translateY(-2px);
    transition: transform 250ms cubic-bezier(.3, .7, .4, 1.5);
}

.pushable-btn:hover .front {
    transform: translateY(-8px);
    transition: transform 250ms cubic-bezier(.3, .7, .4, 1.5);
}

.pushable-btn:focus:not(:focus-visible) {
    outline: none;
}
    

چطور این دکمه کار میکنه؟

برای ساخت این دکمه سه‌بعدی، ما از دو لایه استفاده می‌کنیم: یک لایه زیرین که نقش “سایه” یا “عمق” دکمه رو داره (که در اینجا با `background` و `transform` زیرین شبیه‌سازی میشه) و یک لایه جلویی (`.front`) که متن دکمه رو نشون میده. وقتی کاربر روی دکمه هاور می‌کنه یا کلیک می‌کنه، لایه جلویی کمی جابجا میشه و این توهم رو ایجاد می‌کنه که دکمه داره فشرده میشه. با `transition` هم حرکت رو نرم‌تر می‌کنیم. این روش باعث میشه حس اصطحکاک و فشار واقعی به کاربر منتقل بشه.

برای دسترسی به مجموعه‌ای کامل‌تر از کدهای آماده و اسنیپت‌های CSS، می‌تونی سری به بخش کدهای آماده و اسنیپت توی وب‌سایت fa-tools.ir بزنی.

👾 افکت گلیچ (Glitch Effect)

افکت گلیچ (Glitch Effect) یا همون “اختلال تصویری”، یه راه فوق‌العاده برای اضافه کردن حس مدرن، تکنولوژیک و گاهی اوقات شورشی به طراحی وب‌سایتتونه. این افکت می‌تونه برای عنوان‌ها، دکمه‌ها یا حتی عکس‌ها استفاده بشه تا حس یه خطای دیجیتالی جذاب رو منتقل کنه. اگه دنبال یه چیزی هستی که بازدیدکنندگانت رو واقعاً غافلگیر کنه، افکت گلیچ می‌تونه گزینه عالی باشه!

HTML: متن گلیچ

کد HTML مربوط به متن گلیچ:


<h1 class="glitch" data-text="GLITCH">GLITCH</h1>
    

CSS: خلق هرج و مرج زیبا

کد CSS برای افکت گلیچ:


.glitch {
    position: relative;
    color: #fff;
    font-size: 4em;
    font-weight: bold;
    text-shadow:
        0.05em 0 0 rgba(255, 0, 0, 0.75),
        -0.025em -0.05em 0 rgba(0, 255, 0, 0.75),
        0.025em 0.05em 0 rgba(0, 0, 255, 0.75);
    animation: glitch 500ms infinite;
}

.glitch::before,
.glitch::after {
    content: attr(data-text);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: #333; /* رنگ پس‌زمینه برای جلوه بهتر */
}

.glitch::before {
    left: -2px;
    text-shadow: 0.05em 0 0 rgba(255, 0, 0, 0.75);
    animation: glitch-left 1s infinite;
}

.glitch::after {
    left: 2px;
    text-shadow: -0.05em 0 0 rgba(0, 255, 0, 0.75);
    animation: glitch-right 1s infinite;
}

@keyframes glitch {
    0% {
        transform: translate(0);
    }
    20% {
        transform: translate(-2px, 2px);
    }
    40% {
        transform: translate(-2px, -2px);
    }
    60% {
        transform: translate(2px, 2px);
    }
    80% {
        transform: translate(2px, -2px);
    }
    to {
        transform: translate(0);
    }
}

@keyframes glitch-left {
    0% {
        transform: translate(0);
    }
    20% {
        transform: translate(2px, -2px);
    }
    40% {
        transform: translate(-2px, 2px);
    }
    60% {
        transform: translate(2px, 2px);
    }
    80% {
        transform: translate(-2px, -2px);
    }
    to {
        transform: translate(0);
    }
}

@keyframes glitch-right {
    0% {
        transform: translate(0);
    }
    20% {
        transform: translate(-2px, 2px);
    }
    40% {
        transform: translate(2px, -2px);
    }
    60% {
        transform: translate(-2px, -2px);
    }
    80% {
        transform: translate(2px, 2px);
    }
    to {
        transform: translate(0);
    }
}
    

چند نکته برای افکت گلیچ:

  • `data-text`: این ویژگی برای تکرار متن در `::before` و `::after` استفاده میشه تا اون لایه‌های رنگی زیرین رو بسازه.
  • `text-shadow`: این ویژگی سایه‌های رنگی رو ایجاد می‌کنه که حس گلیچ رو تقویت می‌کنه. می‌تونی رنگ‌ها و آفست‌ها رو تغییر بدی.
  • `animation`: با تغییر مقادیر زمان (مثلاً `500ms` یا `1s`) و تابع‌های زمانی (مثلاً `linear` یا `ease-in-out`) می‌تونی سرعت و شدت گلیچ رو کنترل کنی.
  • استفاده از این افکت در جای مناسب و با اعتدال می‌تونه تأثیرگذاری زیادی داشته باشه. افراط در اون ممکنه کاربر رو خسته کنه.

🃏 کارت‌های فلیپ (Flip Cards)

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

HTML: ساختار کارت

ساختار HTML برای یک کارت فلیپ:


<div class="flip-card">
  <div class="flip-card-inner">
    <div class="flip-card-front">
      <h2>جلو کارت</h2>
      <p>اطلاعات اولیه</p>
    </div>
    <div class="flip-card-back">
      <h2>پشت کارت</h2>
      <p>اطلاعات تکمیلی و جذاب!</p>
    </div>
  </div>
</div>
    

CSS: جابجایی سه‌بعدی

کد CSS برای کارت فلیپ:


.flip-card {
    background-color: transparent;
    width: 300px;
    height: 200px;
    border: 1px solid #f1f1f1;
    perspective: 1000px; /* این خط باعث افکت سه‌بعدی میشه */
    margin: 20px auto; /* برای مرکز قرار گرفتن */
}

.flip-card-inner {
    position: relative;
    width: 100%;
    height: 100%;
    text-align: center;
    transition: transform 0.8s;
    transform-style: preserve-3d;
}

.flip-card:hover .flip-card-inner {
    transform: rotateY(180deg);
}

.flip-card-front, .flip-card-back {
    position: absolute;
    width: 100%;
    height: 100%;
    -webkit-backface-visibility: hidden; /* پنهان کردن پشت هنگام چرخش */
    backface-visibility: hidden;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    border-radius: 8px;
    padding: 20px;
    box-sizing: border-box;
}

.flip-card-front {
    background-color: #28a745;
    color: white;
}

.flip-card-back {
    background-color: #007bff;
    color: white;
    transform: rotateY(180deg);
}
    

چند نکته مهم:

  • `perspective`: این ویژگی روی عنصر والد (`.flip-card`) اعمال میشه و عمق سه‌بعدی رو ایجاد می‌کنه.
  • `transform-style: preserve-3d`: این ویژگی روی عنصر داخلی (`.flip-card-inner`) اعمال میشه و تضمین می‌کنه که فرزندانش هم در فضای سه‌بعدی قرار بگیرن.
  • `backface-visibility: hidden`: این ویژگی باعث میشه سمت پشت کارت وقتی چرخش می‌کنه، دیده نشه.
  • می‌تونی به جای `hover` از جاوااسکریپت برای فعال‌سازی `transform` استفاده کنی تا با کلیک هم کار کنه.

⏳ انیمیشن‌های لودینگ خلاقانه

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

HTML: عنصر لودر

این کد HTML رو اضافه کن:


<div class="loader-container">
  <div class="loader"></div>
</div>
    

CSS: انیمیشن دایره‌ای

کد CSS برای لودر:


.loader-container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh; /* تمام صفحه رو پوشش بده */
    background-color: #f0f2f5;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    z-index: 9999;
}

.loader {
    border: 8px solid #f3f3f3; /* Light grey */
    border-top: 8px solid #3498db; /* Blue */
    border-radius: 50%;
    width: 60px;
    height: 60px;
    animation: spin 2s linear infinite;
}

@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}
    

چند نکته برای شخصی‌سازی لودر:

  • `border-top`: با تغییر رنگ این ویژگی می‌تونی رنگ متحرک لودر رو عوض کنی.
  • `width` و `height`: اندازه لودر رو تغییر میده.
  • `animation-duration`: با تغییر `2s` می‌تونی سرعت چرخش رو کم یا زیاد کنی.
  • می‌تونی به جای دایره، شکل‌های دیگه رو هم با `border-radius` و `transform` به حرکت دربیاری. خلاق باش!

🖼️ افکت پارالاکس (Parallax Effect)

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

HTML: بخش‌های پارالاکس

این کد HTML رو به ساختار صفحه اضافه کن:


<div class="parallax-container">
  <div class="parallax-section">
    <h2>بخش اول</h2>
    <p>متن جذاب در بخش اول با پس‌زمینه ثابت</p>
  </div>
  <div class="normal-section">
    <h2>محتوای معمولی</h2>
    <p>اینجا محتوای عادی سایت قرار می‌گیره که روی پس‌زمینه اسکرول میشه.</p>
  </div>
  <div class="parallax-section bg-2">
    <h2>بخش دوم</h2>
    <p>با یه پس‌زمینه پارالاکس دیگه</p>
  </div>
</div>
    

CSS: ایجاد عمق

کد CSS برای افکت پارالاکس:


.parallax-container {
    height: 100vh; /* برای دیدن بهتر افکت */
    overflow-x: hidden;
    overflow-y: auto;
    perspective: 1px; /* پایه برای افکت پارالاکس */
    font-family: 'Vazirmatn', sans-serif, Arial;
}

.parallax-section {
    position: relative;
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    color: white;
    font-size: 2em;
    text-align: center;
    transform-style: preserve-3d;
}

.parallax-section::before {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-image: url('https://via.placeholder.com/1500/007bff/ffffff?text=Background1'); /* تصویر پس‌زمینه شما */
    background-size: cover;
    background-position: center;
    background-attachment: fixed; /* کلید اصلی افکت پارالاکس */
    transform: translateZ(-1px) scale(2); /* برای شبیه‌سازی حرکت متفاوت */
    z-index: -1;
}

.normal-section {
    height: 80vh;
    background-color: #f8f8f8;
    color: #333;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 1.2em;
    padding: 50px;
    box-sizing: border-box;
    text-align: center;
}

/* برای پس‌زمینه دوم */
.parallax-section.bg-2::before {
    background-image: url('https://via.placeholder.com/1500/28a745/ffffff?text=Background2');
}
    

ملاحظات پارالاکس:

  • `perspective`: این ویژگی روی عنصر والد اسکرول‌شونده قرار می‌گیره (اینجا `parallax-container`).
  • `transform: translateZ(-1px) scale(2)`: این ترفند جادویی باعث میشه عنصر پس‌زمینه دورتر به نظر برسه (با `translateZ`) و بعد بزرگتر بشه (با `scale`) تا فضای خالی رو پر کنه. این ترکیب، حرکت کندتر رو هنگام اسکرول ایجاد می‌کنه.
  • تصاویر پس‌زمینه: حتماً از تصاویر با کیفیت و مناسب برای پس‌زمینه استفاده کن تا افکت جذاب‌تر بشه.
  • مواظب باش که افکت پارالاکس زیاد باعث کندی عملکرد سایت روی دستگاه‌های ضعیف نشه. همیشه تست عملکرد رو فراموش نکن.

🎨 شکل‌های بلاب (Blob Shapes)

شکل‌های بلاب (Blob Shapes)، اون شکل‌های ارگانیک و نامنظمی هستن که این روزا توی طراحی وب خیلی ترند شدن. این شکل‌ها می‌تونن به وب‌سایتت یه حس مدرن، نرم و پویا بدن. خلق این شکل‌ها با CSS خالص شاید در نگاه اول پیچیده به نظر برسه، اما با استفاده از `border-radius` و `transform` می‌تونیم به نتایج واقعاً جالبی برسیم. بیا ببینیم چطور یه بلاب ساده بسازیم و بهش انیمیشن بدیم.

HTML: ظرف بلاب

ساختار HTML برای بلاب:


<div class="blob-container">
  <div class="blob"></div>
</div>
    

CSS: شکل‌دهی و انیمیشن بلاب

کد CSS برای بلاب:


.blob-container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 300px;
    background-color: #f8f8f8;
    margin: 30px 0;
    overflow: hidden;
}

.blob {
    width: 200px;
    height: 200px;
    background: linear-gradient(45deg, #FF6B6B, #FFD166);
    border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;
    animation: morph 8s ease-in-out infinite both alternate;
    box-shadow: 0 10px 30px rgba(0,0,0,0.1);
}

@keyframes morph {
    0% {
        border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;
        transform: rotate(0deg);
    }
    50% {
        border-radius: 70% 30% 50% 50% / 30% 30% 70% 70%;
        transform: rotate(180deg) scale(1.1);
    }
    100% {
        border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;
        transform: rotate(360deg);
    }
}
    

نکات بلاب‌سازی:

  • `border-radius`: اینجاست که جادو اتفاق میفته! با دادن چهار مقدار برای هر گوشه و بعد از `/` چهار مقدار برای هر طرف، می‌تونی شکل‌های نامنظم و ارگانیک بسازی.
  • `@keyframes morph`: در این انیمیشن، ما مقادیر `border-radius` و `transform` رو در طول زمان تغییر میدیم تا بلاب حرکت و تغییر شکل داشته باشه.
  • می‌تونی از ابزارهای آنلاین تولید بلاب استفاده کنی که مقادیر `border-radius` رو برات ایجاد می‌کنن. فقط کافیه “CSS blob generator” رو سرچ کنی.
  • برای ایجاد بلاب‌های پیچیده‌تر، SVG هم گزینه خوبیه، اما برای سادگی و کارایی، CSS تنها کافیه.

🗂️ آکاردئون با CSS خالص

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

HTML: ساختار آکاردئون

این کد HTML رو به صفحه اضافه کن:


<div class="accordion">
  <input type="checkbox" id="question1" class="accordion-toggle">
  <label for="question1" class="accordion-header">سوال اول: CSS چیست؟</label>
  <div class="accordion-content">
    <p>CSS (Cascading Style Sheets) زبانی برای استایل‌دهی و زیباسازی صفحات وب است.</p>
  </div>

  <input type="checkbox" id="question2" class="accordion-toggle">
  <label for="question2" class="accordion-header">سوال دوم: کاربرد اصلی CSS چیست؟</label>
  <div class="accordion-content">
    <p>CSS برای کنترل رنگ‌ها، فونت‌ها، چیدمان و سایر جنبه‌های ظاهری صفحات HTML استفاده می‌شود.</p>
  </div>
</div>
    

CSS: جادوی `checkbox` و `label`

کد CSS برای آکاردئون:


.accordion {
    width: 80%;
    max-width: 700px;
    margin: 30px auto;
    border: 1px solid #ddd;
    border-radius: 8px;
    overflow: hidden;
}

.accordion-toggle {
    display: none; /* پنهان کردن checkbox اصلی */
}

.accordion-header {
    background-color: #f2f2f2;
    color: #333;
    padding: 15px 20px;
    cursor: pointer;
    border-bottom: 1px solid #ddd;
    display: block;
    font-weight: bold;
    font-size: 1.1em;
    position: relative;
    transition: background-color 0.3s ease;
}

.accordion-header::after {
    content: '+';
    position: absolute;
    left: 20px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 1.5em;
    transition: transform 0.3s ease;
}

.accordion-header:hover {
    background-color: #e9e9e9;
}

.accordion-content {
    background-color: #fff;
    padding: 0 20px;
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.4s ease-out, padding 0.4s ease-out;
    border-bottom: 1px solid #eee;
}

.accordion-content p {
    margin: 15px 0;
    line-height: 1.7;
    color: #555;
}

/* وقتی checkbox تیک خورده باشه */
.accordion-toggle:checked + .accordion-header {
    background-color: #e0f7fa;
    color: #00838F;
}

.accordion-toggle:checked + .accordion-header::after {
    content: '-';
    transform: translateY(-50%) rotate(0deg); /* برای علامت منفی */
}

.accordion-toggle:checked + .accordion-header + .accordion-content {
    max-height: 200px; /* این مقدار باید بزرگتر از ارتفاع محتوا باشد */
    padding: 15px 20px;
}
    

ترفند این آکاردئون:

  • `input[type=”checkbox”] + label`: با استفاده از این انتخابگر و خاصیت `+` (Adjacent Sibling Combinator)، می‌تونیم وقتی `checkbox` تیک می‌خوره، استایل `label` مربوط به خودش رو تغییر بدیم.
  • `label + div`: بازم از همین ترفند استفاده می‌کنیم تا وقتی `label` (که حالا فعال شده) رو کلیک می‌کنیم، `div` بعدی (که محتوای آکاردئون هست) باز بشه.
  • `max-height`: برای باز و بسته شدن نرم محتوا، از `max-height: 0` برای حالت بسته و یه مقدار بزرگتر (مثل `200px` یا بیشتر) برای حالت باز استفاده می‌کنیم. این مقدار باید به اندازه کافی بزرگ باشه که تمام محتوات رو نشون بده.
  • مهمترین نکته اینه که هر `input` و `label` باید `id` و `for` یکسان و منحصربه‌فرد داشته باشن.

جدول مقایسه‌ای: انتخاب افکت مناسب

افکت CSS بهترین کاربرد
تایپ‌کردن متن عنوان‌ها، معرفی محصولات، داستان‌سرایی
دکمه‌های سه‌بعدی کال‌تو‌اکشن‌ها (CTA)، دکمه‌های اصلی
افکت گلیچ وب‌سایت‌های هنری، مدرن، خطای 404
کارت‌های فلیپ نمایش محصولات، مشخصات اعضا، گالری‌ها
انیمیشن لودینگ زمان‌های انتظار، صفحات اولیه سایت
افکت پارالاکس صفحات لندینگ، معرفی محصول، ایجاد عمق
شکل‌های بلاب پس‌زمینه‌ها، عناصر گرافیکی، هدرها
آکاردئون سوالات متداول، لیست‌های بازشونده، محتوای زیاد

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

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

1. انیمیشن‌ها اجرا نمیشن یا کند هستن

  • راه‌حل:
    • مطمئن شو که `animation` و `@keyframes` رو درست تعریف کردی و اسمشون هم یکیه.
    • برای افزایش کارایی، از `transform` و `opacity` برای انیمیشن‌ها استفاده کن، نه `width`/`height` یا `margin`/`padding`. این خواص باعث رندرینگ مجدد صفحه میشن و کندی ایجاد می‌کنن.
    • توی مرورگر Chrome، از ابزارهای توسعه‌دهنده (Developer Tools) قسمت Performance رو چک کن تا Bottleneck رو پیدا کنی.
    • اگه از ترنزیشن‌های طولانی استفاده می‌کنی، امتحان کن که آیا `transition-timing-function` مناسبی انتخاب کردی یا نه.

2. افکت‌های سه‌بعدی خوب دیده نمیشن یا خرابن

  • راه‌حل:
    • خاصیت `perspective` رو روی عنصر والد (Container) تنظیم کن. این ویژگی به مرورگر میگه که چطور عناصر رو در فضای سه‌بعدی رندر کنه.
    • `transform-style: preserve-3d` رو به عنصری که قراره در فضای سه‌بعدی حرکت کنه (مثل `.flip-card-inner`) اضافه کن.
    • از `backface-visibility: hidden` برای پنهان کردن پشت عناصر وقتی چرخش می‌کنن، استفاده کن.
    • بعضی از مرورگرها نیاز به پیشوند vendor مثل `-webkit-` دارن. اگه مشکل داشتی، اون‌ها رو اضافه کن.

3. کدهای CSS با هم تداخل دارن

  • راه‌حل:
    • از انتخابگرهای (Selectors) خاص‌تر استفاده کن تا مطمئن بشی فقط عنصر مورد نظر رو هدف قرار دادی.
    • `!important` رو تا حد امکان استفاده نکن، چون باعث میشه مدیریت CSSت خیلی سخت بشه.
    • ترتیب نوشتن CSS هم مهمه؛ کدی که آخر میاد، ممکنه کد قبلی رو override کنه.
    • برای پروژه‌های بزرگ، از روش‌هایی مثل BEM (Block-Element-Modifier) یا ماژولار کردن CSS استفاده کن.

4. Responsive نبودن در موبایل و تبلت

  • راه‌حل:
    • همیشه با <meta name="viewport" content="width=device-width, initial-scale=1.0"> توی HTML شروع کن.
    • از Media Queries (@media) برای تنظیم استایل‌ها بر اساس اندازه صفحه استفاده کن.
    • برای ابعاد، به جای `px` از واحد‌های نسبی مثل `em`, `rem`, `vh`, `vw`, `%` استفاده کن.
    • سعی کن از روش Mobile-First (اول برای موبایل طراحی کن بعد برای دسکتاپ) استفاده کنی.

اگه بازم به مشکل خوردی یا نیاز به کمک تخصصی‌تر داشتی، تیم فنی fa-tools.ir همیشه آماده کمکه. میتونی با تماس با ما، مشکلت رو مطرح کنی.

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

آیا استفاده از این افکت‌های CSS روی سرعت سایت تاثیر منفی میذاره؟

بستگی به پیچیدگی افکت و نحوه پیاده‌سازی داره. افکت‌های ساده و بهینه (با استفاده از `transform` و `opacity`) تاثیر کمی دارن. اما انیمیشن‌های سنگین و زیاد ممکنه باعث کندی بشن. همیشه سایت رو تست کن!

آیا این کدها روی همه مرورگرها کار می‌کنن؟

اکثر مرورگرهای مدرن از این خواص و انیمیشن‌ها پشتیبانی می‌کنن. اما همیشه بهتره برای مرورگرهای قدیمی‌تر (مثل IE11) از Fallback استفاده کنی یا با استفاده از Autoprefixer، پیشوندهای -webkit- یا -moz- رو اضافه کنی.

چطور می‌تونم این کدها رو برای موبایل بهینه کنم؟

برای بهینه‌سازی موبایل، از Media Queries برای تنظیم اندازه و خواص انیمیشن در سایزهای مختلف صفحه استفاده کن. همچنین، مطمئن شو که از واحد‌های نسبی مثل `em`, `rem`, `vh`, `vw` استفاده می‌کنی تا عناصر به درستی مقیاس‌بندی بشن.

آیا این افکت‌ها به دانش جاوااسکریپت نیاز دارن؟

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

رفیق، امیدوارم این سفر هیجان‌انگیز به دنیای کدهای فان CSS برات مفید بوده باشه و تونسته باشی ایده‌های جدیدی برای پروژه‌هات پیدا کنی. یادمون باشه که وب‌سایت‌ها فقط یه ابزار نیستن، می‌تونن یه تجربه فراموش‌نشدنی باشن. پس از خلاقیتت استفاده کن و همیشه دنبال راه‌های جدید برای جذاب‌تر کردن دنیای دیجیتال باش. موفق باشی! 🚀

Table of Contents

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