فارسی

قدرت Group Variants در Tailwind CSS را برای استایل‌دهی عناصر بر اساس وضعیت والدشان کشف کنید. مثال‌های کاربردی و تکنیک‌های پیشرفته برای ساخت رابط‌های کاربری پیچیده و واکنش‌گرا را بیاموزید.

تسلط بر Group Variants در Tailwind CSS: استایل‌دهی حالت‌های والد برای رابط‌های کاربری پویا

در چشم‌انداز همواره در حال تحول توسعه فرانت‌اند، ایجاد رابط‌های کاربری پویا و تعاملی از اهمیت بالایی برخوردار است. فریم‌ورک‌هایی مانند Tailwind CSS با ارائه یک رویکرد ابزار-محور (utility-first) که بر سرعت، ثبات و قابلیت نگهداری تأکید دارد، نحوه نگرش ما به استایل‌دهی را متحول کرده‌اند. در حالی که کلاس‌های ابزاری اصلی Tailwind فوق‌العاده قدرتمند هستند، درک ویژگی‌های پیشرفته‌تر آن می‌تواند طراحی‌های شما را از سطح کاربردی به سطح واقعاً استثنایی ارتقا دهد. یکی از این ویژگی‌های قدرتمند که گاهی کمتر مورد استفاده قرار می‌گیرد، Group Variants است.

Group Variants به شما این امکان را می‌دهند که عناصر فرزند را بر اساس وضعیت عنصر والدشان استایل‌دهی کنید؛ مفهومی که می‌تواند سناریوهای پیچیده استایل‌دهی را به طور چشمگیری ساده کرده و به کدی قوی‌تر و قابل نگهداری‌تر منجر شود. این راهنما به طور عمیق به دنیای Group Variants در Tailwind CSS می‌پردازد و بررسی می‌کند که آن‌ها چه هستند، چرا ضروری‌اند و چگونه می‌توان آن‌ها را با مثال‌های کاربردی و مرتبط با دنیای واقعی به طور مؤثر پیاده‌سازی کرد.

Group Variants در Tailwind CSS چه هستند؟

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

Group Variants که در نسخه 3.0 Tailwind CSS معرفی شدند، یک راه‌حل زیبا ارائه می‌دهند. آن‌ها به شما اجازه می‌دهند تا واریانت‌های سفارشی تعریف کنید که می‌توانند زمانی فعال شوند که یک عنصر والد خاص معیارهای مشخصی را برآورده کند، مانند قرار گرفتن ماوس روی آن (hover)، فوکوس شدن (focus) یا فعال شدن (active). این بدان معناست که می‌توانید استایل‌هایی را مستقیماً در نشانه‌گذاری HTML خود بنویسید که به وضعیت والد پاسخ می‌دهند، بدون اینکه از پارادایم ابزار-محور خارج شوید.

سینتکس Group Variants شامل افزودن پیشوند group- و سپس وضعیت مورد نظر به یک کلاس ابزاری است. به عنوان مثال، اگر می‌خواهید رنگ پس‌زمینه یک عنصر فرزند را هنگام قرار گرفتن ماوس روی گروه والد آن تغییر دهید، از group-hover:bg-blue-500 روی عنصر فرزند استفاده می‌کنید. عنصر والد باید با اعمال کلاس group به عنوان یک "گروه" مشخص شود.

چرا از Group Variants استفاده کنیم؟ مزایا

استفاده از Group Variants چندین مزیت قابل توجه برای توسعه‌دهندگان و طراحان فرانت‌اند به همراه دارد:

مفاهیم اصلی Group Variant

برای استفاده مؤثر از Group Variants، درک چند مفهوم اساسی ضروری است:

۱. کلاس group

اساس Group Variants کلاس group است. شما باید این کلاس را به عنصر والدی که می‌خواهید به عنوان محرک استایل‌دهی مبتنی بر وضعیت عمل کند، اعمال کنید. بدون کلاس group روی والد، هیچ یک از پیشوندهای group-* روی عناصر فرزند تأثیری نخواهند داشت.

۲. پیشوند group-*

این پیشوند به کلاس‌های ابزاری استاندارد Tailwind اعمال می‌شود. این نشان می‌دهد که ابزار فقط باید زمانی اعمال شود که عنصر والد (که با کلاس group مشخص شده است) در یک وضعیت خاص باشد. پیشوندهای رایج عبارتند از:

۳. گروه‌های تودرتو (پیشوند group/)

Tailwind CSS همچنین امکان کنترل دقیق‌تری بر گروه‌های تودرتو را فراهم می‌کند. اگر چندین عنصر دارید که می‌توانند به عنوان "گروه" در یک ساختار بزرگتر در نظر گرفته شوند، می‌توانید با استفاده از سینتکس group/<identifier> شناسه‌های خاصی به آن‌ها اختصاص دهید. سپس عناصر فرزند می‌توانند با استفاده از پیشوندهای group-<identifier>-* این گروه‌های والد خاص را هدف قرار دهند. این ویژگی برای طرح‌بندی‌های پیچیده که در آن‌ها باید از عوارض جانبی ناخواسته استایل‌دهی جلوگیری کنید، فوق‌العاده مفید است.

به عنوان مثال:

<div class="group/card group-hover:scale-105 transition-transform duration-300">
  <!-- محتوای کارت -->
  <div class="group-hover/card:text-blue-600">
    عنوان کارت
  </div>
</div>

در این مثال، group/card این div خاص را به عنوان گروه "card" مشخص می‌کند. هنگامی که خود گروه card مورد هاور قرار می‌گیرد (group-hover:scale-105)، کل کارت بزرگ می‌شود. علاوه بر این، هنگامی که group/card خاص مورد هاور قرار می‌گیرد (group-hover/card:text-blue-600)، فقط رنگ متن داخل آن تغییر می‌کند. این سطح از ویژگی برای رابط‌های کاربری پیچیده کلیدی است.

مثال‌های کاربردی از Group Variants

بیایید برخی از کاربردهای واقعی Group Variants در Tailwind CSS را در کامپوننت‌ها و سناریوهای مختلف، با در نظر گرفتن مخاطبان جهانی، بررسی کنیم.

مثال ۱: کارت‌های تعاملی

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

سناریو: یک کارت باید هنگام هاور شدن دارای سایه‌ای ظریف و ظاهری کمی برجسته باشد. علاوه بر این، دکمه "مشاهده جزئیات" در داخل کارت باید هنگام هاور شدن کارت، رنگ پس‌زمینه‌اش تغییر کند.

<div class="group relative cursor-pointer overflow-hidden rounded-xl bg-white p-8 shadow-sm transition-shadow duration-300 hover:shadow-lg"
     >
  <!-- تصویر کارت -->
  <div class="mb-4 h-48 w-full object-cover"
       >
    <img src="/images/placeholder-image.jpg" alt="تصویر محصول" class="w-full h-full rounded-md" 
         >
  </div>
  
  <!-- محتوای کارت -->
  <h3 class="mb-2 text-xl font-bold text-gray-900"
      >
    اجلاس جهانی نوآوری‌ها
  </h3>
  <p class="mb-4 text-gray-600"
     >
    فناوری‌های پیشرفته را کشف کنید و با رهبران صنعت از سراسر جهان شبکه‌سازی کنید.
  </p>
  
  <!-- دکمه اقدام -->
  <button class="inline-block rounded-lg px-4 py-2 text-sm font-medium transition duration-300"
          >
    <span class="group-hover:text-white"
          >بیشتر بدانید</span>
    <span class="group-hover:bg-white"
          ></span>
  </button>
</div>

توضیح:

مثال ۲: منوهای ناوبری و کشویی

ناوبری واکنش‌گرا برای تجربه کاربری در هر وب‌سایتی حیاتی است. Group Variants می‌توانند پیاده‌سازی منوهای کشویی یا زیرمنوهایی را که با هاور آشکار می‌شوند، ساده کنند.

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

<nav class="bg-gray-800 p-4"
     >
  <ul class="flex space-x-6"
      >
    <li class="group relative"
        >
      <a href="#" class="text-gray-300 hover:text-white px-3 py-2 rounded-md text-sm font-medium transition duration-300"
         >
        خدمات
        <span class="group-hover:w-full"
              ></span>
      </a>
      
      <!-- منوی کشویی -->
      <div class="absolute left-0 z-10 mt-2 w-48 origin-top-left scale-95 transform rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 transition duration-300 ease-out group-hover:scale-100 group-hover:opacity-100"
           >
        <div class="py-1"
             >
          <a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100"
             >
            مشاوره جهانی
          </a>
          <a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100"
             >
            تحقیقات بازار
          </a>
          <a href="#" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100"
             >
            تحول دیجیتال
          </a>
        </div>
      </div>
    </li>
    <li>
      <a href="#" class="text-gray-300 hover:text-white px-3 py-2 rounded-md text-sm font-medium transition duration-300"
         >
        درباره ما
      </a>
    </li>
    <li>
      <a href="#" class="text-gray-300 hover:text-white px-3 py-2 rounded-md text-sm font-medium transition duration-300"
         >
        تماس با ما
      </a>
    </li>
  </ul>
</nav>

توضیح:

مثال ۳: وضعیت‌های ورودی فرم و برچسب‌ها

استایل‌دهی عناصر فرم بر اساس وضعیت آن‌ها یا برچسب مرتبط می‌تواند به طور قابل توجهی قابلیت استفاده را بهبود بخشد. Group Variants برای این کار عالی هستند.

سناریو: هنگامی که یک چک‌باکس تیک می‌خورد، برچسب مرتبط با آن باید تغییر رنگ دهد و یک حاشیه در اطراف گروهی از ورودی‌های مرتبط باید برجسته‌تر شود.

<div class="border border-gray-300 p-4 rounded-lg group/input-group"
     >
  <h3 class="text-lg font-semibold text-gray-800 mb-3"
      >
    ترجیحات
  </h3>
  
  <div class="space-y-3"
       >
    <div class="flex items-center"
         >
      <input type="checkbox" id="notifications" class="form-checkbox h-5 w-5 text-blue-600"
             >
      <label for="notifications" class="ml-2 block text-sm text-gray-700 cursor-pointer"
             >
        فعال کردن اعلان‌های ایمیل
      </label>
    </div>
    
    <div class="flex items-center"
         >
      <input type="checkbox" id="updates" class="form-checkbox h-5 w-5 text-blue-600"
             >
      <label for="updates" class="ml-2 block text-sm text-gray-700 cursor-pointer"
             >
        دریافت به‌روزرسانی‌های محصول
      </label>
    </div>
  </div>
  
  <!-- استایل‌دهی بر اساس وضعیت گروه اعمال شده است -->
  <label for="notifications" class="group-checked:text-green-700 group-checked:font-medium"
         ></label>
  <label for="updates" class="group-checked:text-green-700 group-checked:font-medium"
         ></label>
  
  <div class="group-checked:border-green-500 group-checked:ring-1 group-checked:ring-green-500 mt-4 border-t border-gray-300 pt-4"
       >
    <p class="text-sm text-gray-500"
       >
      ترجیحات اعلان شما ذخیره شد.
    </p>
  </div>
</div>

توضیح:

مثال ۴: آکاردئون‌ها و بخش‌های قابل گسترش

آکاردئون‌ها برای سازماندهی محتوا و صرفه‌جویی در فضا عالی هستند. Group Variants می‌توانند نشانه‌های بصری برای وضعیت‌های باز یا بسته شده را مدیریت کنند.

سناریو: هدر یک آیتم آکاردئون باید هنگام باز شدن بخش، تغییر رنگ دهد و یک آیکون باید بچرخد.

<div class="border border-gray-200 rounded-lg mb-4"
     >
  <button class="group w-full text-left px-6 py-4 flex justify-between items-center"
          >
    <span class="text-lg font-semibold text-gray-700"
          >
      روندهای بازار جهانی
    </span>
    
    <!-- آیکون -->
    <svg class="w-6 h-6 text-gray-400 group-focus:text-blue-500 group-hover:text-blue-500 transition duration-300"
         fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"
         >
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"
            ></path>
    </svg>
  </button>
  
  <!-- محتوای آکاردئون -->
  <div class="px-6 pb-4 text-gray-600"
       >
    <p class="text-sm"
       >
      تغییرات اقتصادی جهانی فعلی، رفتار مصرف‌کننده و فرصت‌های بازارهای نوظهور را تحلیل کنید.
    </p>
  </div>
</div>

<!-- مثال با رویکردی متفاوت برای وضعیت -->
<div class="border border-gray-200 rounded-lg mb-4"
     >
  <button class="group/acc-header w-full text-left px-6 py-4 flex justify-between items-center"
          >
    <span class="text-lg font-semibold text-gray-700 group-focus/acc-header:text-blue-700"
          >
      پیشرفت‌های فناورانه
    </span>
    
    <!-- آیکون -->
    <svg class="w-6 h-6 text-gray-400 group-focus/acc-header:text-blue-700 group-hover/acc-header:rotate-180 transition duration-300"
         fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"
         >
      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"
            ></path>
    </svg>
  </button>
  
  <!-- محتوای آکاردئون -->
  <div class="px-6 pb-4 text-gray-600"
       >
    <p class="text-sm"
       >
      آخرین دستاوردها در هوش مصنوعی، بلاک‌چین و فناوری پایدار که بر کسب‌وکارهای سراسر جهان تأثیر می‌گذارند را کاوش کنید.
    </p>
  </div>
</div>

توضیح:

تکنیک‌های پیشرفته و سفارشی‌سازی

در حالی که عملکرد اصلی ساده است، Group Variants فضایی برای استفاده پیشرفته ارائه می‌دهند:

۱. ترکیب Group Variants

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

<div class="group/item checked:bg-blue-100 border p-4 rounded-md"
     >
  <div class="group-hover:scale-105 group-checked:scale-110 transition-transform"
       >
    محتوای آیتم
  </div>
</div>

در اینجا، group-hover:scale-105 زمانی که والد هاور می‌شود اعمال می‌شود و group-checked:scale-110 زمانی که والد تیک خورده است اعمال می‌شود. توجه داشته باشید که برای کار کردن group-checked، عنصر والد به مکانیزمی برای نشان دادن وضعیت تیک خورده نیاز دارد که اغلب از طریق تغییر یک کلاس با جاوااسکریپت انجام می‌شود.

۲. سفارشی‌سازی واریانت‌ها در tailwind.config.js

Tailwind CSS بسیار قابل توسعه است. شما می‌توانید واریانت‌های سفارشی خود، از جمله واریانت‌های گروه، را در فایل tailwind.config.js خود تعریف کنید. این به شما امکان می‌دهد تا اصلاح‌کننده‌های وضعیت قابل استفاده مجدد و مختص پروژه ایجاد کنید.

به عنوان مثال، برای ایجاد یک واریانت group-data-*:

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      // ... سایر پیکربندی‌ها
    },
  },
  plugins: [
    // ... سایر پلاگین‌ها
    require('tailwindcss-data-attributes')({ // نیاز به نصب این پلاگین دارد
      attribute: 'data',
      variants: ['group-data'], // واریانت‌های group-data-* را ایجاد می‌کند
    })
  ],
}

با این پیکربندی، سپس می‌توانید از این استفاده کنید:

<div class="group data-[state=active]:bg-purple-200"
     data-state="active"
     >
  این div فعال است.
</div>

<div class="group group-data-[state=active]:text-purple-600"
     data-state="active"
     >
  یک عنصر دیگر
</div>

این ویژگی به ویژه برای یکپارچه‌سازی با فریم‌ورک‌های جاوااسکریپت که وضعیت را با استفاده از data attributes مدیریت می‌کنند، قدرتمند است.

۳. ملاحظات دسترسی‌پذیری

هنگام استفاده از Group Variants، همیشه اطمینان حاصل کنید که وضعیت‌های تعاملی از طریق HTML معنایی و شیوه‌های استاندارد دسترسی‌پذیری نیز منتقل می‌شوند. به عنوان مثال، اطمینان حاصل کنید که وضعیت‌های فوکوس برای کاربران صفحه‌کلید واضح هستند و نسبت کنتراست رنگ‌ها حفظ می‌شود. Group Variants باید اقدامات اساسی دسترسی‌پذیری را تقویت کنند، نه جایگزین آن‌ها شوند.

برای عناصری که تعاملی هستند اما وضعیت‌های تعاملی بومی ندارند (مانند یک div غیر-دکمه که به عنوان یک کارت قابل کلیک عمل می‌کند)، اطمینان حاصل کنید که نقش‌های ARIA (مانند role="button", tabindex="0") را اضافه کرده و رویدادهای صفحه‌کلید را به طور مناسب مدیریت می‌کنید.

اشتباهات رایج و نحوه اجتناب از آن‌ها

با وجود قدرت، Group Variants گاهی اوقات می‌توانند منبع سردرگمی باشند:

نتیجه‌گیری

Group Variants در Tailwind CSS یک تغییردهنده بازی برای ساخت رابط‌های کاربری پیچیده، تعاملی و قابل نگهداری هستند. با فعال کردن استایل‌دهی وضعیت والد مستقیماً در HTML، آن‌ها توسعه را ساده کرده، حجم CSS را کاهش داده و فرآیند طراحی کلی را بهبود می‌بخشند.

چه در حال ساخت ناوبری واکنش‌گرا، کارت‌های پویا یا عناصر فرم قابل دسترس باشید، تسلط بر Group Variants شما را قادر می‌سازد تا تجربیات وب جذاب‌تر و صیقل‌خورده‌تری ایجاد کنید. به یاد داشته باشید که همیشه کلاس group را به عناصر والد خود اعمال کنید و از پیشوندهای مختلف group-* تا حد امکان استفاده کنید. واریانت‌های سفارشی را برای کنترل بیشتر کاوش کنید و همیشه دسترسی‌پذیری را در خط مقدم تصمیمات طراحی خود قرار دهید.

قدرت Group Variants را در آغوش بگیرید و شاهد رسیدن پروژه‌های Tailwind CSS خود به اوج‌های جدیدی از ظرافت و کارایی باشید!