ما معمولاً برای اینکه کدی تمیز، خوانا و قابل نگهداری تولید کنیم، به مشکلاتی بر میخوریم که باید اون ها رو حل کنیم. اما بهتره اول چند تا از این مشکلات رو بشناسیم :
اگر شما به ندرت برای کدهای خودتون کامنت میگذارید یا فقط تحت شرایطی، آن هم از روی ناچاری این کار رو میکنید، باید بگم این سیاست اشتباهی هست. شاید فکر کنید نامگذاری ای که برای کلاسها دارید به اندازه کافی با معنی است و نیازی به کامنت نیست. اما اگر بعد از مدتی، برای بروزرسانی و تغییرات به کدهای خود سر بزنید، قطعاً درک کدهایی که خودتون نوشتید براتون سخت میشه. از طرفی وقتی کار تیمی انجام میدین قطعاً نیاز هست که دیگران کدهای شما رو بتوانند بخوانند و شما هم کدهای اونها رو. پروژه های تیمی معمولاً پروژه های بزرگی هستند که قائدتاً طول عمر بالاتری دارند، پس کدهای شما هم باید طول عمر بالاتری داشته باشد و در گذر زمان قابلیت نگهداشت و بروزرسانی داشته باشند. ترفندها و ترندهایی که الان در کدها استفاده میکنید قطعاً دو سه سال دیگه موارد پیش پا افتادهای به حساب میاد که باید تغییرش بدید یا به روشهای بهتر اونها رو پیادهسازی کنید. استفاده از هکهای CSS از این نمونه هست. اما راه حل چیست؟ در ادامه به ایدههای کلی درباره راه حلهای موجود میپردازیم.
بخش زیادی از سردرگمی های توسعه دهندگان در مراجعه مجدد به کد، با کامنتگذاری در روند توسعه قابل حل هست. CSS زبان نشانه گذاری است، بنابراین طبیعی هست اگر فقط با دیدن چند خط کد، نتوانید درک کنید که چه اتفاقی دارد رخ می دهد و نتیجهی این خطوط از کدها چی هست. حتماً این تجربه رو داشتید که وقتی بعد از بیش از یک سال یا حتی چند ماه، به کدهای خودتون نگاه میکنید نمیتونید درک کنید چرا یه همچین کدی نوشتید؟ این چند خط کد وظیفه شون چی هست؟ معمولاً توسعه دهنده ها در این شرایط تو وضعیتی قرار میگیرند که انگار خودشون این کدها رو ننوشتند و با کدها کاملاً غریبه هستند. به همین دلیل، کامنتگذاری در طول روند توسعه میتونه راه حلی برای این مشکل باشه. هیچوقت این مرحله رو به بعداً واگذار نکنید. یکی از بهترین کارها اینه که تو کامنتها، طرز فکر خودتون رو شرح بدید، اینکه چرا همچین راه حلی اتخاذ کردید. در آینده وقتی با خوندن کامنتها، با طرز فکرتون در چند ماه پیش آشنا میشید، این کدها مجدداً براتون قابل فهم میشه.
متدولوژی BEM مخفف Block Element Modifier است. BEM یک متدولوژی برای توسعه فرانتاند هست و میشه ازش به عنوان یک متدولوژی کامل نام برد. چیزی که توجه ما رو میتونه جلب کنه استراتژی نامگذاری در این متد هست. با استفاده از این استراتژی می توانیم کلاس ها رو به ۳ گروه کلی تقسیم کنیم :
.byline {} .byline__name {} .byline__title {} .byline__picture {} .byline--expanded {} .byline--expanded__bio {}
حتماً با مفهوم شئ گرایی در برنامه نویسی آشنا هستید یا حداقل اسمش رو شنیدید. شئ گرایی یک الگوی برنامهنویسی هست و برای شکستن کارهای بزرگ به چند کار کوچک استفاده می شود. وقتی این مفهوم به دنیای استایل شیت ها میاد بهش میگیم OOCSS. در اینجا ما کمتر با تکنیک های پیاده سازی سر و کار داریم و مهم طرز فکر ما نسبت به روند توسعه است. مفهوم اصلی در جداسازی ساختار عناصر، از استایل آن هاست. به این ترتیب نتیجه این کپسوله سازی این هست که می توانیم بدون پیادهسازی مجدد عناصر، از آنها در قطعات مختلف کد استفادهی مجدد کنیم که باعث میشه سرعت توسعه افزایش پیدا کنه و حجم کد تولیدی کاهش داشته باشد. OOCSS یک الگو ( پارادایم ) برنامه نویسی است. OOCSS مخفف Object Oriented CSS است، در واقع همان مفهوم برنامه نویسی Object Oriented را دارد ( Spaghetti CSS در مقابل OOCSS ). در OOCSS تمرکز بر روی کامپوننت های منعطف، ماژولار و قابل تعویض است که تنها یک کار را انجام می دهند. در واقع در OOCSS کامپوننت ها تنها یک وظیفه دارند و از یکدیگر مستقل هستند.
.media {} .media .img {} .media .img img {} .media .imgExt {} .bd {}
متدولوژی SMACSS ( تلفظ Smacks ) مخفف Scalable and Modular Architecture است. SMACSS یکی از روش های دیگر نوشتن CSS است. در این شیوه سطوحی معرفی شده اند که CSS باید در آن سطوح نوشته شود. به عبارتی دیگر SMACSS مجموعهای از گایدلاین ها هست که به ما کمک میکند تا کد بهتری در CSS تولید کنیم. SMACSS نه ابزار توسعه است و نه قوانین سختگیرانه ای که باعث هراس توسعه دهنده ها باشد، بلکه راهنمای منعطفی هست که در نظر گرفتنش دید بهتری در زمینه توسعه کدهای فرانتاند بهمون میده. هدف SMACSS تولید کدهایی است که خوانایی بالاتری داشته باشند، قابل توسعه و نگهداشت باشند و امکان استفاده مجدد از آنها وجود داشته باشد.
اگر بخواهیم نگاه کلی ای به آن چیزی که SMACSS به ما پیشنهاد میده داشته باشیم، بهتره با ساختار بندی پروژه شروع کنیم. SMACSS هسته پروژه را در ۵ دسته بندی کلی قرار داده و با تعاریف و مثال هایی از قطعه کدهای کاربردی، سعی داره تا مفاهیم لازم رو به مخاطبین انتقال بده. این ۵ دسته به قرار زیر هستند :
در کنار تعریف ساختار فوق، می توان از قوانین نام گذاری ای که SMACSS پیشنهاد کرده نیز پیروی کرد. به عنوان مثال استفاده از پیشوند هایی مانند -l و یا -grid برای Layout ها از این دست از قوانین هستند. توسعه دهندگان بسته به قوانینی که در نظر میگیرند میتوانند مستند سازی خاص خود را داشته باشند.
نکته : علاوه بر متدولوژی هایی که در این مقاله اشاره کردیم، متدولوژی های دیگری نیز در سی اس اس نویسی وجود دارند که کم تر از آن ها استفاده می شود و از اهمیت کم تری برخوردار هستند که این متدولوژی ها عبارت اند از : Systematic CSS ، SUIT CSS ، ITCSS ، Atomic CSS و ...