من از Tailwind اشتباه استفاده می کردم، بنابراین شما مجبور نیستید

حدود 3 سال پیش با Tailwind CSS آشنا شدم، یک کتابخانه عالی برای توسعه وب سایت. برای کوتاه ماندن این مقاله، کلماتی را برای معرفی آن هدر نمی دهم. منابع زیادی برای یادگیری از قبل وجود دارد. در عوض، میخواهم داستانی درباره اشتباهی که در روزهای اولیهام با Tailwind انجام میدادم به اشتراک بگذارم. نیازی نیست مثل من در گودالی بیفتیم.
باد دنباله مفهوم سنتی را در هم می شکند ورق های سبک آبشاری با قرار دادن قوانین CSS به اصطلاح کلاس های سودمند. به جای نوشتن قوانین CSS در .css
فایلها، نام کلاسها را مستقیماً روی عناصر DOM مینویسید. در حالی که این رویکرد در ابتدا غیر طبیعی و عجیب به نظر می رسد، اما به سرعت شروع به ایجاد حس می کند. حدود یک روز طول کشید تا وارد آن شوم و حالا دیگر نمیخواهم CSS ساده بنویسم، مگر اینکه مجبور باشم. Tailwind به طور یکپارچه در چارچوب شماره 1 من Nuxt ادغام شده است و سادگی ایجاد وبسایتهای واکنشپسند بصری جذاب در عرض چند دقیقه بسیار عالی است.
با این حال یک گرفتاری وجود دارد. هرچه گزینههای بیشتری بشناسید و سبکهای بیشتری را انتخاب کنید، HTML میتواند به آشوب تبدیل شود. دومین مشکلی که در روزهای اول احساس کردم تکرار خودم بود. به عنوان یک پیرو محترم اصل DRY، دیدن چندین مرتبه یکسان از کلاسها در قالبهایم چشمانم را آزار میداد.
من سعی کردم این را بهینه کنم.
ایده اول استخراج دنباله کلاس های Tailwind به عنوان یک متغیر رشته بود. در Vue.js (Nuxt در بالای Vue ساخته شده است)، تقریباً شبیه به این است.
<-- component before -->
<template>
template>
<-- component after -->
<template>
template>
<script setup lang="ts">
const tailwindBtn = "m-2 p-2 rounded border border-2 border-yellow-500 bg-blue-500 text-black text-lg font-bold"
script>
در نهایت، حفظ و تغییر آن آسان تر است. وضوح قابل بحث است. به خصوص اگر عناصر یکسانی را در سراسر برنامه خود داشته باشید و باید تعریف را در مقداری ثابت جهانی مانند افزایش دهید.
بیشتر دنبال راه حل بهتری بودم.
و من با Tailwind آشنا شدم @apply
بخشنامه اساساً مانند نفی کل مفهوم است. به جای قرار دادن تعاریف مستقیم روی عناصر بتنی، می توانید تعاریف خود را ایجاد کنید برگه سبک و آن را با کلاس های سفارشی و تنظیمات عناصر پر کنید. فقط به جای قوانین CSS ساده، راه حل هایی را از کلاس های ابزار Tailwind تهیه می کنید.
عجیب است، اما به نظر می رسید با تعاریف تکراری مشکل ذهنی من را برطرف می کند.
هم معلم VueSchool و هم اسناد Tailwind به من هشدار داده بودند نه برای استفاده از آن، اما طبیعتاً من گوش نکردم.
من با استفاده از این روش چند وب سایت ایجاد کردم. کار کرد. مشکل حل شد یا
سریع به اواخر سال 2024 بروید. من برای یکی از وب سایت هایم ایده های جدیدی دریافت کردم. شروع کردم به کدنویسی کلا فراموش کردم @apply
دشنام هایی که بیش از یک سال پیش انجام دادم. و ناگهان متوجه شدم که نمی توانم چیدمانم را کنار هم بگذارم.
اگرچه هیچ سبک ظاهری در قالب من استفاده نشده است
A few frustrating moments later I got the culprit.
Suddenly, having:
div {
@apply m-auto text-center text-white;
}
در tailwind.css
به نظر می رسید فایل به اندازه سال 2023 ایده خوبی نبود.
چه کسی باید بداند که من یک روز به چیز دیگری نیاز خواهم داشت، نه؟
درس شماره 1
هرگز، هرگز و هرگز استفاده نکنید @apply
به صورت جهانی روی یک انتخابگر عنصر.
در حالی که ممکن است زمانی که یک پروژه جدید را داربست میکنید، راحت به نظر برسد، اما در درازمدت میتواند شما را از کار بیاندازد. نه تنها شما می توانید به راحتی آن را فراموش کنید، مانند من. همچنین باعث می شود کارها کمتر انعطاف پذیر باشند. یک روز عاقلتر و آمادهتر برای خلاص شدن از شر آن برمیگردید - اما وقتی سبک جهانی را حذف کنید، نیمی از سایتی که بر اساس آن ایجاد شده است به طور غیرمنتظرهای از هم میپاشد. آیا از نظر ذهنی آماده هستید که کل طرح را دوباره فکر کنید؟
من شخصاً توصیه می کنم از آن استفاده نکنید @apply
در tailwind.css
اصلاً (اگر فقط وقت و حوصله داشته باشم تا آن را از تمام پروژه هایم که موفق به انجام آن شده ام جدا کنم).
اگر همچنان اصرار دارید بدون دلیل موجه از آن استفاده کنید ("دوست دارم سبک ها را در یک کتابخانه شخص ثالث نادیده بگیرم" همانطور که اسناد Tailwinds می گویند)، حداقل از آن برای ایجاد استفاده کنید کلاس ها.
داشتن مقداری .my-cool-css-class
معذرتپذیر است، زیرا حداقل باید آن را به عنصری که میخواهید سبک کنید، وصل کنید. به همین ترتیب، همه (از جمله خود آینده شما) می توانند آن را در آنجا ببینند و در صورت نیاز می توانند تعریف آن را پیدا کنند.
بله، اما
نامزدهای وسوسه انگیز برای شکستن این قانون عناصر لنگر هستند. زیرا پیوستن a واقعا خسته کننده خواهد بود class
به هر کدام نسبت دهند .
یکی از جایگزین های ممکن، ایجاد یک جزء پیوند سفارشی است که در اطراف لنگر (یا در اطراف داخلی) قرار می گیرد
در Nuxt). اما ممکن است شما آن را دوست نداشته باشید و من شما را سرزنش نخواهم کرد.
در واقع با استفاده از @apply
دستورالعمل هنوز یک راه حل رتبه اول است.
شاید بتوانید حتی نمونههای بیشتری بسازید که در آن سبکهای عناصر جهانی منطقی باشد. اگر 100% مطمئن هستید، از آنها استفاده کنید. اما همیشه باید یک تصمیم مستدل باشد.
درس شماره 2
دلیل واقعی اینکه چرا تعاریف کلاس Tailwind خیلی طولانی / تکراری دارید، طراحی ضعیف کد شما است.
با چارچوبهای جاوا اسکریپت مدرن مانند Vue، شما به توانایی ایجاد اجزای کوچک قابل استفاده مجدد و کنار هم قرار دادن آنها برای ساخت راهحلهای پیچیده مجهز شدهاید. از آن استفاده کنید.
مثال دکمه بالا را می توان به این شکل تبدیل کرد:
<-- MyButton.vue -->
<template>
template>
<script setup lang="ts">
defineProps({ caption: String })
script>
<-- app.vue -->
<template>
caption="Button 1" />
caption="Button 2" />
caption="Button 3" />
template>
و دقیقاً مانند آن، کد تکراری از بین رفته است.
از طرف دیگر، دیدن زنجیرهای کلاسی واقعاً طولانی همیشه باعث می شود فکر کنم که عنصر فقیر با نگرانی های بیش از حد سنگینی می کند. بهترین کار این است که عقب بایستید و در تصمیماتی که شما را به آنجا می برد تجدید نظر کنید.
تجربه من این است که شما می توانید طرح های زیبا را تنها با تعداد کمی از کلاس های Tailwind ایجاد کنید. و اگر دوست دارید موارد بیشتری را اضافه کنید، معمولاً نباید همه آنها را فقط روی یک عنصر انباشته کنند. تقریباً مشابه ایجاد یک جزء بزرگ (یا یک کلاس در صورت تمایل) است که همه کارها را انجام می دهد. در برخی مواقع شما واقعاً باید از اضافه کردن خطوط بیشتر دست بردارید و شروع به از هم پاشیدگی کنید.
در بدترین حالت، باید بتوانید عناصر CSS بصری را در اجزای مجزا کپسوله کنید و بنابراین میزان تعاملات مورد نیاز را به حداقل برسانید. اما صادقانه بگویم، احتمالاً شخصی قبلاً این کار را انجام داده است و تنها کاری که باید انجام دهید این است که کتابخانه مؤلفه Tailwind مناسب را برای استفاده در پروژه خود پیدا کنید.