افزودن dotLess CSS در MVC

شنبه 18 اردیبهشت 1395

در این مقاله نحوه ی اضافه کردن dotLess CSS framework در یک پروژه MVC بر اساس وراثت، Arithmetic ، متغیرها و ... در stylesheet ها آموزش داده میشود.

افزودن dotLess CSS در MVC

مزایا

1.این قابلیت باعث میشود تا CSS بتواند رفتارها و ویژگی های داینامیک خود مانند Nesting ، متغیرها ، توابع ریاضی ، توابع عملیاتی ، Mixinهای  قابل استفاده مجدد ، فضای نام ها و ... توسعه دهد.

2.کار با CSS را آسان میکند.

3. این قابلیت ، امکان استفاده مجدد از کامپوننت ها را میدهد.

4.همچنین باعث میشود تا حجم فایل CSS کاهش پیدا کند که باعث افزایش سرعت در هنگام اجرا میشود.

اجرای LESS سمت Client

LESS هم سمت server و هم سمت Client قابل اجرا میباشد. برای اجرا شدن سمت clinet باید سه مرحله زیر انجام شود.

1.فایل .less باید به پروژه اضافه شود و در تگ LINK ارجاع داده شود.

2.خصوصیت rel موجود در تگ LINK به  rel="stylesheet/less" ارتقاء داده شود.

3. یک reference از CND به فایل مربوط به جاوا اسکریپ LESS اضافه شود.

بروز رسانی و ارتقاء rel value به "stylesheet/less" بسیار مهم است چرا که کتابخانه ی LESS برای اجرا به rel value احتیاج دارد. فایل مورد نظر یکبار پردازش میشود و rel value را با نام "stylesheet/less" دریافت میکند. Header صفحه ی شما باید به صورت زیرخواهد بود.

1.	<linkhref="Content/sample.less"rel="stylesheet/less"/>  
2.	<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/less.js/2.6.1/less.min.js"></script>  

در این مرحله باید، در داخل فایل sample.less چند خط کد مینویسیم تا اطمینان حاصل کنیم که فایلی که ایجاد کرده ایم به درستی عمل میکند.

کد مربوط به فایل Less code :

1.	@color: #4D926F;  
2.	h3 {  
3.	color: @color;  
4.	}  

کد HTML :

1.	<!DOCTYPEhtml>  
2.	<html>  
3.	  
4.	<head>  
5.	    <title></title>  
6.	    <meta charset="utf-8" />  
7.	    <link href="Content/sample.less" rel="stylesheet/less" />  
8.	    <script src="https://cdnjs.cloudflare.com/ajax/libs/less.js/2.6.1/less.min.js">  
9.	        </script>  
10.	</head>  
11.	  
12.	<body>  
13.	    <h3>This is Santosh!</h3>  
14.	</body>  
15.	  
16.	</html>  

خروجی :

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

استفاده از Nesting

کد dotLess CSS

1.	body {  
2.	    .header   
3.	    {  
4.	        h1  
5.	        {  
6.	            font - size: 28 px;  
7.	        }  
8.	  
9.	        h2   
10.	        {  
11.	            font - size: 21 px;  
12.	        }  
13.	    }  
14.	}  

کد بالا به صورت زیر ترجمه خواهد شد :

    body.headerh1  
    {  
        font - size: 28 px;  
    }  
    body.headerh2  
    {  
        font - size: 21 px;  
    }  
 

متغیرها

Less code :

1.	@color: #4D926F;  
2.	h3 {  
3.	color: @color;  
4.	}  

کد بالا به صورت زیر ترجمه خواهد شد :

1.	h3  
2.	 {  
3.	color: #4D926F;  
4.	}  

توابع ریاضی

    :Less code

1.	@base - size: 10 px;  
2.	  
3.	.small  
4.	{  
5.	    font - size: @base - size;  
6.	}  
7.	  
8.	.medium  
9.	{  
10.	    font - size: @base - size * 1.2;  
11.	}  
12.	  
13.	.large  
14.	{  
15.	    @_large: @base - size * 1.5;  
16.	    font - size: @_large;  
17.	    line - height: @_large + 4;  
18.	}  

کد بالا به صورت زیر ترجمه خواهد شد :

1.	.small   
2.	{  
3.	    font - size: 10 px;  
4.	}  
5.	.medium   
6.	{  
7.	    font - size: 12 px;  
8.	}  
9.	.large  
10.	{  
11.	    font - size: 15 px;  
12.	    line - height: 19 px;  
13.	}  

توابع عملیاتی :

Less code:

1.	h1   
2.	{  
3.	    color: rgb(230, 140, 230);  
4.	    color: darken(#123456,10%);   
5.	    color: fade(# 123456, 50 % );  
6.	}  

کد بالا به صورت زیر تعریف میشود

1.	h1  
2.	{  
3.	    color: #e68ce6;  
4.	    color: #091a2c;  
5.	    color:rgba(18, 52, 86, 0.5);  
6.	}  

Mixinهای قابل استفاده مجدد

Less code:

1.	.radius(@size: 5 px)   
2.	    {  
3.	        -webkit - border - radius: @size; - moz - border - radius: @size;  
4.	        border - radius: @size;  
5.	    }  
6.	    .box  
7.	    {  
8.	        .radius;  
9.	    }  
10.	    .circle  
11.	    {  
12.	        .radius(15 px);  
13.	    }  

کد بالا به صورت زیر ترجمه میشود

1.	.box  
2.	{  
3.	    -webkit - border - radius: 5 px; - moz - border - radius: 5 px;  
4.	    border - radius: 5 px;  
5.	}  
6.	.circle   
7.	{  
8.	    -webkit - border - radius: 15 px; - moz - border - radius: 15 px;  
9.	    border - radius: 15 px;  
10.	}  

وارد کردن(Import) فایل های CSS به فایل Less

اگر که یک فایل CSS با حجم بالا و پیچیده دارید و میخواهید آنرا به چندین فایل CSS کوچکتر تبدیل کنید میتوانید به جای این کار(تبدیل فایل بزرگتر به چندین فایل کوچکتر) فایل CSS خود را به یک فایل less انتقال دهید. (Import کنید). فایل اصلی در مکانی که import شده است قرار دارد و نیاز است که  webpage از این فایل به سایرstyle moduleهای دیگر متصل شود.

Less code:

1.	@import (less) "Content/Site.css";  
2.	/*@import url('Site.css');*/  

کد بالا به صورت زیر ترجمه خواهد شد :

1.	@import "Content/Site.css";  

اجرا Less سمت Server

از منو Tools  گزینه ی NuGet Package Manager و سپس گزینه ی Manage NuGet Package for Solution را انتخاب کنید. Command که در زیر آمده است را در Package Manage Console وارد میکنیم.

PM> Install-Package dotLess

این command  جدیدترین نسخه از dotLessNuGet packages را برای برنامه شما نصب میکند.

نکته: شما میتوانید dotLess  را هم با انتخاب گزینه Package Manager Console و هم از طریق انتخاب گزینه ی Manage NuGet Package for Solution در برنامه نصب کنید.

پس از اینکه کتابخانه dotLess  با موفقیت نصب شد، شما میتوانید reference مربوط به جاوا اسکریپ CDN  را از برنامه خود حذف کنید. و اطمینان حاصل کنید که تگ LINK بوسیله ی حذف صفت less بروز رسانی شده است.

کد مربوطه به صورت زیر خواهد بود :

1.	<link href="Content/sample.less"rel="stylesheet"/>  

پس از اینکه پلاگین “Install-Package dotLess” بوسیله ی  Package Manager Consoleیا Manage NuGet Package for Solution نصب شد، پکیج نصب شده، چند خط کد را در فایل مربوط به Web.Config اضافه میکند که باعث میشود که HTTP handler در فایل  Web.Config برای پشتیبانی از درخواست های .less تعریف شود.(به قطعه کد زیر مراجعه کنید. )

1.	<configSections>  
2.	    <section name="dotless" type="dotless.Core.configuration.DotlessConfigurationSectionHandler, dotless.Core" />  
3.	</configSections>  
4.	<dotlessminifyCss="false" cache="true" web="false" strictMath="false" />  
5.	  
6.	<system.webServer>  
7.	    <handlers>  
8.	        <addname="dotless" path="*.less" verb="GET" type="dotless.Core.LessCssHttpHandler,dotless.Core" resourceType="File" preCondition="" />  
9.	    </handlers>  
10.	</system.webServer>  

 

قطعه کد نمونه همراه با خروجی :

کد زیر را در  Razor layoutاضافه کنید.

<!DOCTYPEhtml>  
2.	<html>  
3.	  
4.	<head>  
5.	    <meta charset="utf-8" />  
6.	    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
7.	        <title>@ViewBag.Title - My ASP.NET Application</title>  
8.	        @Styles.Render("~/Content/css") @Styles.Render("~/Content/less") @Scripts.Render("~/bundles/modernizr")  
9.	</head>  
10.	  
11.	<body>  
12.	    --- --- ---  
13.	</body>  
14.	  
15.	</html>  
16.	  
17.	Index.cshtml @{ ViewBag.Title = "Home Page"; Layout = "~/Views/Shared/_Layout.cshtml"; }  
18.	<div class="row">  
19.	    <h3>Hello Santosh</h3>  
20.	    </div>  

خروجی :

بهترین ویژگی در dotLess  ، کاهش حجم فایل CSS بوسیله ی  minifyCss attribute به صورت خودکار میباشد.

اگر مقدار این Attribute در  Web.config برابر با True باشد هنگام اجرای web application/website  ، شما میتوانید کاهش حجم در CSS را مشاهده کنید.

1.	<dotlessminifyCss="false" cache="true"web="false"strictMath="false" />  

اگر مقدار minifyCss attribute برابر با  "false" باشد خروجی به صورت زیر خواهد بود :

اگر مقدار minifyCss attribute برابر با   "true"باشد خروجی به صورت زیر خواهد بود :

ارتقاء عملکرد در فایل های dotLess  در پروژه های MVC

Bundle ها یک راه آسان برای ادغام و کاهش حجم منابع در برنامه ی شما میباشد (مانند فایل های جاوا اسکریپ و  CSS stylesheets). اما استفاده از پلاگین “System.Web.Optimization.Less” با روش بهتری عملکرد برنامه ی شما را ارتقاء میدهد.

بنابراین به Package Manager Console  بر میگردیم و پلاگین زیر را نصب میکنیم.

PM> Install-Package System.Web.Optimization.Less

و Bundle خود را در مکانی مناسب و با استفاده از  BundleConfig.csاضافه کنید.

1.	public class BundleConfig  
2.	{  
3.	    public static void RegisterBundles(BundleCollection bundles)  
4.	    {  
5.	        // NOTE: existing bundles are here  
6.	  
7.	        bundles.Add(newLessBundle("~/Content/less").Include("~/Content/*.less"));  
8.	    }  
9.	}  

این LessBundle  به برنامه ی شما این امکان را میدهد تا هنگام اجرا در <compilation debug="false" /> mode، فایل ها با یکدیگر ترکیب شوند و حجم شان کم شود و همچنین از قابلیت انتقال کد Less به CSS را پشتیبانی میکند. نیازی نیست هر بار که یک فایل جدید به برنامه اضافه میکنید layout را update کنید.

توسعه در مقایسه با چرخه ی تولید

در توسعه برنامه ها ، از یک handler  برای تبدیل dotLess stylesheet ها استفاده میکنیم. این کار به ما اجازه میدهد تا تغییرات مورد نیاز بر روی dotLess CSS اعمال شود و در نتیجه به راحتی بر روی صفحه وب بارگذاری شود.

اما در مرحله تولید ، استفاده از handler  را کنار میگذاریم و از نسخه stylesheet که قبلا اصلاح شده و حجم آن نیز کاهش یافته است،  استفاده میکنیم. این نسخه ی تغییر یافته و اصلاح شده هر بار که پروژه built میشود بروز رسانی میشود.

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید