# نحوه‌ی صحیح کار کردن با بوت استرپ

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

- Published: 2014-06-23
- Language: fa
- Tags: DNTips
- Canonical: https://sirwan.info/blog/fa/dntips-1815

---

> این نوشته نخستین بار در [دات‌نت تیپس](https://www.dntips.ir/post/1815) منتشر شده است.

<div class="postBody"><div>DOM در حالت عادی بسیار نامرتب است. همچنین با افزودن کلاس‌های CSS، کد HTML به مراتب نامرتب‌تر از قبل می‌شود. بوت استرپ نیز شامل تعداد زیادی از کلاس‌های CSS می‌باشد که برای انجام وظایف خاصی به HTML اضافه می‌شوند.</div> <div> <b> <br/> </b> </div> <div> <b>روش متداول استفاده از بوت‌استرپ  </b> <br/> </div> <div> <b> <br/> </b> </div> <div> <b>Embedd کردن کلاس‌های CSS بوت‌استرپ به صورت مستقیم درون HTML</b> </div> <div> <b> <br/> </b> </div> <div> اغلب فریم‌ورک‌ها، از لحاظ معنایی یا semantic، دارای مشکل هستند. اگر به سورس HTML صفحاتی که با این نوع از فریم‌ورک‌ها ساخته شده باشند نگاهی بیندازید با حجم زیادی از کلاس‌هایی مانند &lt;"div class="row&gt; و یا &lt;"div class="col-sm&gt; مواجه خواهید شد. نوشتن کد‌های HTML به این صورت از لحاظ معنایی اشتباه است. مثلاً اگر بنا به دلایلی سازندگان بوت استرپ تصمیم بگیرند نام کلاس‌های را در نسخه بعدی این فریم‌ورک تغییر دهند (مانند تغییر نام کلاس‌ها در نسخه‌ی 3 بوت استرپ)، و یا اگر در آینده بخواهید از یک فریم‌ورک دیگر در سایت‌تان استفاده کنید. باید این تغییرات را در تمام صفحات سایت‌تان اعمال کنید؛ در نتیجه اینکار زمان زیادی را از شما صرف میکند.</div> <div> <b> <br/> </b> </div> <div> <b>راه‌حل؟</b> </div> <div> <b> <br/> </b> </div> <div> <b>استفاده از CSS preprocessors</b> </div> <div> <b> <br/> </b> </div> <div>بوت‌استرپ، <a href="https://www.dntips.ir/search?term=less">از Less</a>  برای اینکار استفاده می‌کند. Less در واقع یک CSS preprocessor نوشته شده با جاوا اسکریپت است که قابلیت اجرا در مرورگر را دارد. Less امکانات زیادی، از قبیل استفاده از توابع، متغیرها، Mixins و ... را در اختیار شما قرار می‌دهد. در واقع هدف از Less، نگهداری آسان و قابلیت توسعه فایل‌های CSS می‌باشد. در این حالت شما کدهای CSS خود را درون فایل‌هایی با پسوند Less می‌نویسید. در این حالت بجای پیوست کردن کلاس‌های بوت‌استرپ در کد HTML، آن را درون استایل‌شیت پیوست خواهید کرد. همانطور که عنوان شد، بوت‌استرپ با Less نوشته شده است. فایل‌های Less بوت‌استرپ را می‌توانید از مخرن کد <a href="https://github.com/twbs/bootstrap/tree/master/less">گیت‌هاب</a> آن دانلود نمائید یا اینکه از طریق <a href="https://www.nuget.org/packages/Twitter.Bootstrap.Less">نیوگت</a> می‌توانید آن را نصب کنید:  </div> <div> <div align="left" dir="ltr">
<pre language="CSharp" name="code">PM&gt; Install-Package Twitter.Bootstrap.Less</pre>
 </div> </div> <div>کار با Less خیلی ساده است. به عنوان مثال در کد زیر یک کلاس با نام loud داریم که استایل‌هایی را به آن اعمال کرده‌ایم. اکنون جهت استفاده مجدد از این استایل‌ها برای کلاسی دیگر، نیاز به نوشتن مجدد آن نیست. کافی همانند یک تابع در هر کلاسی آن را فراخوانی کنیم:<br/> </div> <div align="left" dir="ltr"> <div align="left" dir="ltr"> <div align="left" dir="ltr">
<pre language="CSS" name="code">.loud {&#10;  color: red;&#10;}&#10;&#10;// Make all H1 elements loud&#10;h1 {&#10;  .loud;&#10;}</pre>
 </div> </div> <div style="text-align: right;"> <br/> </div> </div> <b>
نکته:</b> در Visual Studio 2012 Update 2 به بعد به صورت توکار از فایل‌های Less <a href="http://blogs.msdn.com/b/webdev/archive/2013/11/06/a-high-value-undocumented-less-editor-feature-in-visual-studio.aspx">پشتیبانی</a> می‌شود. (توسط پلاگین <a href="https://www.dntips.ir/search?term=Web+Essentials">Web Essentials</a>)<br/> <div> <div> <b> <br/> </b> </div> <div> <b>استفاده از Mixins</b> </div> <div> <b> <br/> </b> </div> <div>با استفاده از Mixins می‌توانیم عناصر داخل صفحات‌مان را به صورت <a href="http://www.html5doctor.com/lets-talk-about-semantics/">Semantic</a> تعریف نمائیم. به عنوان مثال می‌خواهیم با استفاده از سیستم گرید بوت‌استرپ، ساختاری مانند تصویر زیر را داشته باشیم:</div> <div> <p> <img src="/img/dntips/d23c92cb48512c31c19b.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div> <div>در حالت معمول با استفاده از کلاس‌های CSS بوت‌استرپ می‌توانیم اینکار را انجام دهیم:</div> <div> <div align="left" dir="ltr">
<pre language="CSharp" name="code">&lt;div class="container"&gt;&#10;    &lt;div class="row"&gt;&#10;        &lt;div class="col-md-8"&gt;&#10;            Content - Main&#10;        &lt;/div&gt;&#10;        &lt;div class="col-md-4"&gt;&#10;            Content - Secondary&#10;        &lt;/div&gt;&#10;    &lt;/div&gt;&#10;&lt;/div&gt;</pre>
 </div>
کد فوق را بهتر است به این صورت بنویسیم:  <br/> </div> <div> <div align="left" dir="ltr">
<pre language="CSharp" name="code">&lt;div class="wrapper"&gt;&#10;    &lt;div class="content-main"&gt;&#10;         Content - Main&#10;    &lt;/div&gt;&#10;    &lt;div class="content-secondary"&gt;&#10;        Content - Secondary&#10;    &lt;/div&gt;&#10;&lt;/div&gt;</pre>
 </div> <br/> <div align="left" dir="ltr"> </div> </div> </div> <div>در بوت استرپ از <a href="http://lesscss.org/features/#mixins-feature">Less Mixins</a> جهت اعمال استایل هایی مانند row و column می‌توانیم استفاده کنیم. به طور مثال برای اعمال استایل به کلاس‌های فوق می‌توانیم به این صورت عمل کنیم:<br/> </div> <div> <div align="left" dir="ltr"> <div align="left" dir="ltr"> <div align="left" dir="ltr">
<pre language="CSharp" name="code">// Core variables and mixins&#10;@import "variables.less";&#10;@import "mixins.less";&#10;.wrapper {&#10;  .make-row();&#10;}&#10;.content-main {&#10;  .make-lg-column(8);&#10;}&#10;.content-secondary {&#10;  .make-lg-column(3);&#10;  .make-lg-column-offset(1);&#10;}</pre>
 </div> </div> <div style="text-align: right; direction: rtl;"> <div style="direction: rtl;">کد فوق بعد از کامپایل به کد زیر تبدیل خواهد شد:</div> <div style="direction: rtl;"> <div align="left" dir="ltr">
<pre language="CSharp" name="code">.wrapper {&#10;  margin-left: -15px;&#10;  margin-right: -15px;&#10;}&#10;.content-main {&#10;  position: relative;&#10;  min-height: 1px;&#10;  padding-left: 15px;&#10;  padding-right: 15px;&#10;}&#10;@media (min-width: 1200px) {&#10;  .content-main {&#10;    float: left;&#10;    width: 66.66666666666666%;&#10;  }&#10;}&#10;.content-secondary {&#10;  position: relative;&#10;  min-height: 1px;&#10;  padding-left: 15px;&#10;  padding-right: 15px;&#10;}&#10;@media (min-width: 1200px) {&#10;  .content-secondary {&#10;    float: left;&#10;    width: 25%;&#10;  }&#10;}&#10;@media (min-width: 1200px) {&#10;  .content-secondary {&#10;    margin-left: 8.333333333333332%;&#10;  }&#10;}</pre>
 </div> </div> <div style="direction: rtl;">همانطور که قبلاً عنوان شد ویژوال استودیو به راحتی توسط افزونه Web Essentials از فایل‌های Less پشتیبانی می‌کند. در نتیجه کامپایل فایل‌های Less داخل ویژوال استودیو توسط این افزونه به راحتی قابل انجام می‌باشد.  </div> <div style="direction: rtl;"> <span style="line-height: 1.5em; font-size: 9pt;">یک قابلیت جالب دیگر در رابطه با فایل‌هایی Less، تولید نسخه‌های CSS عادی و فشرده نهایی توسط افزونه Web Essentials می‌باشد. به طور مثال شما می‌توانید نسخه minified شده را به Layout تان اضافه کنید. بعد از هربار تغییر در فایل Less این فایل نیز به روز خواهد شد:</span> <br/> </div> <div style="direction: rtl;"> <br/> </div> <div style="direction: rtl;"> <p> <img src="/img/dntips/f18321e7cf57783b4620.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: default;"/> </p> </div> <div style="direction: rtl;">  همچنین برای دیگر اجزای بوت‌استرپ نیز می‌توانید به این صورت عمل کنید:  </div> </div> <div style="text-align: right; direction: rtl;"> <div align="left" dir="ltr">
<pre language="CSharp" name="code">&lt;!-- Before --&gt;&#10;&lt;a href="#" class="btn danger large"&gt;Click me!&lt;/a&gt;&#10;&#10;&lt;!-- After --&gt;&#10;&lt;a href="#" class="annoying"&gt;Click me!&lt;/a&gt;&#10;&#10;a.annoying {&#10;  .btn;&#10;  .btn-danger;&#10;  .btn-large;&#10;}</pre>
 </div> <br/> <div align="left" dir="ltr"> </div>
خب، با استفاده از این حالت، کد‌های HTML به‌صورت مرتب‌تر، قابل‌انعطاف‌تر و همچنین از لحاظ معنایی(Semantic) استاندارد خواهند بود. بنابراین با آمدن یک فریم‌ورک جدید، به راحتی امکان سوئیچ‌کردن برای ما میسر و آسان‌تر از قبل خواهد شد. </div> <div style="text-align: right; direction: rtl;"> <br/> </div> </div> </div></div>
