پس از آشنایی مقدماتی با Twitter Bootstrap، در این قسمت قصد داریم تا با ویژگیهایی از آن آشنا شویم که در کارهای رومزه طراحی وب بسیار مورد استفاده هستند؛ مانند تایپوگرافی، جداول، فرمها، دکمهها، تصاویر و آیکونها.
تایپوگرافی
هدف از تایپوگرافی، چیدمان متن به نحوی است که واضح، خوانا و مشخص باشد؛ همچنین مباحث زیبایی ارائه را نیز به آن اضافه کنید. برای مثال تنظیم فاصله بین حروف و کلمات، فاصله بین خطوط و یا رعایت یک سری نسبتهای ویژه مانند
نسبت طلایی جهت دعوت خواننده به مطالعه مطالب، بجای فراری دادن او، در مباحث تایپوگرافی رعایت میشوند. خوشبختانه Twitter Bootstrap به همراه یک سری تنظیمات تایپوگرافی پیش فرض است که در ادامه آنها را مرور خواهیم کرد.
پیش فرضهای ابتدایی آنرا مانند قلم با اندازه 14px، قلم پیش فرض Helvetica، فاصله بین خطوط و رنگ متن را در فایل bootstrap.css میتوانید مشاهده کنید:
body {
margin: 0;"Helvetica Neue", Helvetica, Arial, sans-serif;
color: #333333;
background-color: #ffffff;
}
در اینجا اثر تنظیمات bootstrap را بر روی تگهای h1 تا h6 ملاحظه میکنید:
| <div class="row-fluid">
<div class="span12">
<h1>
سرتیتر 1
</h1>
<h2>
سرتیتر 2
</h2>
<h3>
سرتیتر 3
</h3>
<h4>
سرتیتر 4
</h4>
<h5>
سرتیتر 5
</h5>
<h6>
سرتیتر 6
</h6>
</div>
</div>
|
همچنین اگر نیاز باشد تا نسبت به متنی جلب توجه خواننده را جلب کرد میتوان از کلاس lead استفاده نمود. به علاوه bootstrap پیش فرضهایی را به المانهای small، strong و em نیز اعمال میکند:
<div class="row-fluid">
<div class="span12">
<p class="lead">
تیتر</p>
<p>
متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن
متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن
متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن
متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن متن
</p>
<small>اندازه کوچک</small> <strong>متن ضخیم</strong> <em>متن ایتالیک</em>
</div>
</div>
روش دیگر جلب توجه به یک متن در bootstrap، استفاده از کلاسهای text مانند text-error و امثال آن میباشد:
| <div class="row-fluid">
<div class="span12">
<p class="muted">
متن غیرفعال</p>
<p class="text-warning">
نمایش اخطار به کاربر</p>
<p class="text-error">
نمایش خطا به کاربر</p>
<p class="text-info">
نمایش اطلاعات به کاربر</p>
<p class="text-success">
نمایش موفقیت آمیز بودن عملیات</p>
</div>
</div>
|
bootstrap تنظیماتی را به المان abbreviation موجود در HTML 5 نیز اعمال میکند. در این حالت کاربر با نزدیک ساختن اشارهگر ماوس به متن مشخص شده، یک tooltip توضیح دهنده نیز ظاهر خواهد شد:
| <div class="row-fluid">
<div class="span12">
<p>
My
<abbr title="منظور واحد پردازش مرکزی است">
CPU</abbr>
has N Cores.
</p>
</div>
</div>
|
در bootstrap المان آدرس نیز شیوه نامه خاص خودش را داشته و به صورت یک قطعه خاص ظاهر میشود:
| <div class="row-fluid">
<div class="span12">
<address>
وحید نصیری
<br />
ایران، تهران
<br />
<abbr title="Phone">
P:</abbr>
12345678
<br />
<abbr title="Cell">
C:</abbr>
12345678
</address>
</div>
</div>
|
در اینجا تاثیر bootstrap را بر روی المان blockquote ملاحظه میکنید؛ همچنین به همراه المان citeبرای ذکر ماخذ نقل قول ذکر شده:
| <div class="row-fluid">
<div class="span12">
<blockquote>
<p>
جهت نمایش نقل قول
</p>
<small><cite title="کاربر شماره 2">از شخصی</cite> </small>
</blockquote>
</div>
</div>
|
در bootstrap برای حذف بولتهای کنار یک لیست مرتب، فقط کافی است از کلاس unstyled استفاده شود:
| <div class="row-fluid">
<div class="span6">
<ul class="unstyled">
<li>یک </li>
<li>دو </li>
<li>سه </li>
</ul>
</div>
<div class="span6">
<ol>
<li>یک </li>
<li>دو </li>
<li>سه </li>
</ol>
</div>
</div>
|
به علاوه امکان تعریف دو نوع خاص از definition list نیست وجود دارد (المان dl در اینجا). در حالت عادی، ابتدا عنوان مشخص شده با dt یا definition term به صورت ضخیم ظاهر میشود؛ به همراه توضیحات ارائه شده در المان dd آن در سطر بعدی. اگر از کلاس dl-horizontal استفاده شود، همانند تصویر ذیل، عنوان در کنار توضیحات در یک سطر قرار خواهد گرفت:
| <div class="row-fluid">
<div class="span12">
<dl class="dl-horizontal">
<dt>عنوان</dt>
<dd>
توضیحات بلند در اینجا</dd>
</dl>
</div>
</div>
|
در bootstrap امکان اعمال شیوه نامه ابتدایی به کدهای برنامهها نیز وجود دارد. اگر از تگ code استفاده شود، فرض بر این است که قرار است اطلاعاتی را در یک سطر نمایش دهید. اگر اطلاعات کدها، بیشتر از یک سطر است، میتوان از تگ pre استفاده کرد. در اینجا با اعمال کلاس pre-scrollable به تگ pre، به صورت خودکار یک اسکرول عمودی به قطعه کدها اعمال خواهد شد:
| <div class="row-fluid">
<div class="span6">
<code>inline code</code>
</div>
<div class="span6">
<pre class="pre-scrollable">
code
code
code
</pre>
</div>
</div>
|
استفاده از جداول و تاثیر bootstrap بر آنها
در ادامه کدهای یک جدول متداول را که مزین شدهاست به کلاسهای bootstrap ملاحظه میکنید:
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<table
class="table table-striped table-hover table-bordered table-condensed">
<caption>
عنوانی خاص در اینجا</caption>
<thead>
<tr>
<th>
ستون یک
</th>
<th>
ستون دو
</th>
<th>
ستون سه
</th>
</tr>
</thead>
<tbody>
<tr class="error">
<td>
1 متن یک
</td>
<td>
1 متن دو
</td>
<td>
1 متن سه
</td>
</tr>
<tr>
<td>
2 متن یک
</td>
<td>
2 متن دو
</td>
<td>
2 متن سه
</td>
</tr>
<tr>
<td>
3 متن یک
</td>
<td>
3 متن دو
</td>
<td>
3 متن سه
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
در اینجا ذکر caption اختیاری است. وجود thead و tbody به تشخیص هدر و ردیفها جهت اعمال شیوهنامههای متناظر کمک میکنند. همچنین کلاسهای ذیل نیز به جدول اعمال شدهاند:
table: سبب میشود تا تنظیمات ابتدایی bootstrap به جدول طراحی شده، اعمال شوند.
table-striped: رنگ زمینه سطرها را یک در میان تغییر میدهد.
table-hover: سبب میشود تا با عبور اشارهگر ماوس از روی سطرها، رنگ زمینه آنها تغییر کنند.
table-bordered: حاشیهای را به جدول و ردیفها اعمال میکنند. همچنین سبب نمایش گوشههای گرد نیز میشود.
table-condensed: اندکی padding اعمال شده به سلولهای جداول را کاهش میدهد و جدول را فشردهتر میکند.
در جدول فوق، کلاس نمونه error به یک tr نیز اعمال شدهاست تا اثر آنرا بر روی یک ردیف بهتر بتوان ملاحظه کرد.
طراحی فرمها و تاثیر bootstrap بر آنها
قرار دادن برچسبها و عناصر صفحه، به نحوی کاربرپسند و دلپذیر، نیاز به رعایت یک سری اصول تایپوگرافی و طراحی ویژه دارد که این موارد نیز در bootstrap گنجانده شدهاند.
1) فرمهای عمودی | <div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<form action="/signup" method="post">
<fieldset>
<legend>ثبت نام</legend>
<label>
ایمیل:</label>
<input name="email" type="text" />
<label>
نام:</label>
<input name="name" type="text" />
</fieldset>
</form>
</div>
</div>
</div>
|
در اینجا یک فرم ساده را مشاهده میکنید. بدون bootstrap، تمام عناصر این فرم در یک سطر نمایش داده میشوند. اما با صرفا فعال سازی css مرتبط با آن، به شکل مدرن فوق خواهیم رسید.
همانطور که ملاحظه میکنید، کلیه عناصر را به صورت یک پشته عمودی در صفحه قرار دادهاست و نکته مهم اینجا است که هیچگونه شیوه نامه خاص و اضافهتری به فرم فوق از طرف ما اعمال نشده است.
نکته: اگر میخواهید همان حالت پیش فرض مرورگر، یعنی قرار دادن تمام عناصر در پشت سر هم را فعال کنید، تنها کافی است کلاس form-inline را به form تعریف شده فوق اضافه نمائید.
2) نکاتی در مورد checkboxes و radio buttons
در حالت پیش فرض، با تعریف یک label و checkbox، برچسب متناظر با آن اندکی بالاتر از checkbox قرار گرفته شده در صفحه ظاهر میشود. برای رفع این مشکل تنها کافی است کلاس checkbox به label اعمال شود (و برای radio button از کلاس radio استفاده خواهد شد):
<label class="checkbox">
<input type="checkbox" name="isMale" />
مذکر</label>
این مثال را یکبار با کلاس checkbox و بار دیگر بدون آن آزمایش کنید تا تفاوت را بهتر بتوان درک کرد.
نکته: برای قرار دادن چندین checkbox یا radio button در یک سطر (با توجه به حالت چیدمان عمودی پیش فرض فرمها)، ابتدا آنها را داخل یک div قرار دهید. سپس به تمام checkboxها یا radio buttonها کلاس inline را نیز اضافه نمائید. برای مثال:
| <div>
<label class="radio inline">
<input type="radio" name="isMale" />
مذکر</label>
<label class="radio inline">
<input type="radio" name="isFemale" />
مؤنث</label>
</div>
|
4) تعیین اندازه فیلدها
با استفاده از کلاسهایی مانند input-mini، input-small، input-medium، input-large، input-xlarge و input-xxlarge میتوان اندازه فیلدها را کوچکتر از اندازه معمول یا بزرگتر کرد. یا حتی میتوان از همان کلاسهای span مانند span12 (اختصاص کل عرض به یک فیلد) و امثال آن برای تعیین اندازه یک فیلد استفاده کرد.
اگر علاقمند هستید که یک textarea کل عرض صفحه را به خود اختصاص دهد، از کلاس input-block-level استفاده کنید.
5
) فرمهای جستجو
| <form class="search-form">
<fieldset>
<legend>جستجو</legend>
<input type="search" class="search-query" />
<button type="submit" class="btn" >بیاب</button>
</fieldset>
</form>
|
چند نکته در فرمهای جستجوی طراحی شده با bootstrap نسبت به بقیه فرمها حائز اهمیت است:
- کلاس فرم بهتر است search-form تعیین شود
- نوع input بهتر است search وارد شود
- کلاس input جستجو نیز search-query انتخاب گردد
همانطور که ملاحظه میکنید، در این حالت گوشههای جعبه متنی جستجو، نسبت به حالتهای معمولی آنها گرد شده است. کلاس دکمه نیز btn درنظر گرفته شده است تا حالت ویژه دکمههای bootstrap را پیدا کند.
6
) فرمهای افقی
تا اینجا، با فرمهای حالت پیش فرض یا فرمهایی که عناصر را به صورت پشتهای عمودی بر روی یکدیگر قرار میدهند، آشنا شدیم. حالت متداول دیگر طراحی فرمها، حالت افقی است. به این معنا که در هر سطر، یک برچسب و یک المان قرار گیرند، بجای اینکه ابتدا برچسب نمایش داده شود و در سطر بعدی، المان مرتبط با آن. Bootstrap برای طراحی بدون استفاده از جداول این نوع فرمها نیز تنظیمات خاصی را تدارک دیدهاست.
| <form class="form-horizontal" action="/signup" method="post">
<fieldset>
<legend>ثبت نام</legend>
<div class="control-group">
<label class="control-label">
ایمیل:</label>
<div class="controls">
<input name="email" type="text" />
</div>
</div>
<div class="control-group">
<label class="control-label">
نام:</label>
<div class="controls">
<input name="name" type="text" />
</div>
</div>
<div class="control-group">
<div class="controls">
<label class="radio inline">
<input type="radio" name="isMale" />
مذکر</label>
<label class="radio inline">
<input type="radio" name="isFemale" />
مؤنث</label>
</div>
</div>
</fieldset>
</form>
|
مطابق مثال فوق، خلاصه طراحی فرمهای افقی با Bootstrap به این نحو است:
- کلاس form-horizontal را به فرم جاری اضافه کنید.
- هر سطر مورد نظر را در div ایی با کلاس control-group محصور نمائید.
- به برچسبها، کلاس control-label را انتساب دهید.
- کنترلهای مدنظر را در div ایی با کلاس controls محصور کنید.
هر چند این روش نیاز به اندکی HTML نویسی دارد، اما بسیاری به این نوع فرمها بیشتر علاقمند هستند تا فرمهای عمودی ابتدای بحث.
7) جلب توجه کاربران به فیلدها برای نمایش خطاهای اعتبارسنجی | <div class="control-group error">
<label class="control-label">
ایمیل:</label>
<div class="controls">
<input name="email" type="text" />
<span class="help-block">لطفا ایمیل را با فرمت صحیحی وارد نمائید</span>
</div>
</div>
|
برای تزریق خطاهای اعتبارسنجی ویژه، در اینجا میتوان از کلاسهای help-block و یا help-inline به همراه کلاسهایی مانند error، info، warning و success استفاده کرد.
8) توسعه فیلدهای استاندارد
| <div class="input-prepend input-append">
<span dir="ltr" class="add-on">.00</span>
<input dir="ltr" type="text" />
<span class="add-on">ریال</span>
</div>
|
توسط ترکیب کلاسهای input-prepend، input-append و spanهایی با کلاس add-on، میتوان عناصری بصری خاصی را به عنوان جزئی از فیلد مورد نظر اضافه کرد.
9) HTML Helpers مخصوص ASP.NET MVC برای کار با bootstrap
نکاتی را که در اینجا مطرح شدند، اگر علاقمند بودید که به شکلی strongly typed در ASP.NET MVC اعمال کنید، میتوان به پروژههایی مانند TwitterBootstrapMvc مراجعه کرد. تعداد این نوع پروژهها هم روز به روز بیشتر میشوند:
https://twitterbootstrapmvc.codeplex.com/ https://mvc4bootstaphelper.codeplex.com/ https://github.com/erichexter/twitter.bootstrap.mvc http://bootstraphelpers.codeplex.com/تنظیمات خاص دکمهها در حین استفاده از Twitter Bootstrap
در مثال ذیل، کلاسهای مرتبط با تزئین دکمهها را توسط bootstrap، ملاحظه میکنید:
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<table
class="table table-striped table-hover table-bordered table-condensed">
<thead>
<tr>
<th>
دکمه
</th>
<th>
لینک
</th>
<th>
کلاس بکار گرفته شده
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<button class="btn">
default</button>
</td>
<td>
<a href="#" class="btn">default</a>
</td>
<td>
<code>btn</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-primary">
primary</button>
</td>
<td>
<a href="#" class="btn btn-primary">primary</a>
</td>
<td>
<code>btn btn-primary</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-info">
info</button>
</td>
<td>
<a href="#" class="btn btn-info">info</a>
</td>
<td>
<code>btn btn-info</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-success">
success</button>
</td>
<td>
<a href="#" class="btn btn-success">success</a>
</td>
<td>
<code>btn btn-success</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-warning">
warning</button>
</td>
<td>
<a href="#" class="btn btn-warning">warning</a>
</td>
<td>
<code>btn btn-warning</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-danger">
danger</button>
</td>
<td>
<a href="#" class="btn btn-danger">danger</a>
</td>
<td>
<code>btn btn-danger</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-inverse">
inverse</button>
</td>
<td>
<a href="#" class="btn btn-inverse">inverse</a>
</td>
<td>
<code>btn btn-inverse</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-link">
link</button>
</td>
<td>
<a href="#" class="btn btn-link">link</a>
</td>
<td>
<code>btn btn-link</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-primary btn-large">
large</button>
</td>
<td>
<a href="#" class="btn btn-primary btn-large">large</a>
</td>
<td>
<code>btn btn-primary btn-large</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-primary btn-small">
small</button>
</td>
<td>
<a href="#" class="btn btn-primary btn-small">small</a>
</td>
<td>
<code>btn btn-primary btn-small</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-primary btn-mini">
mini</button>
</td>
<td>
<a href="#" class="btn btn-primary btn-mini">mini</a>
</td>
<td>
<code>btn btn-primary btn-mini</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-primary btn-block">
block</button>
</td>
<td>
<a href="#" class="btn btn-primary btn-block">block</a>
</td>
<td>
<code>btn btn-primary btn-block</code>
</td>
</tr>
<tr>
<td>
<button class="btn btn-primary disabled">
disabled</button>
</td>
<td>
<a href="#" class="btn btn-primary disabled">disabled</a>
</td>
<td>
<code>btn btn-primary disabled</code>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
همانطور که ملاحظه کردید، الزامی ندارد که این کلاسها را حتما به دکمهها اعمال کرد. برای نمونه میتوان از یک span یا لینک نیز برای تعریف دکمهها بهره جست. برای یکپارچه سازی چنین دکمههایی (که در اصل دکمه نیستند) با ASP.NET MVC میتوان به مطلب تکمیلی «
استفاده از دکمههای CSS توئیتر در ASP.NET MVC» مراجعه نمود.
یک نکته: اگر علاقمند هستید که تعدادی دکمه را به شکل یک toolbar نمایش دهید، آنها را در یک div محصور کرده و کلاس btn-group را به آن div اعمال نمائید.
کار با تصاویر و آیکونها در Twitter Bootstrap
کلاسهایی مانند img-rounded، img-circle، img-polaroid با اعمال به یک تصویر، سبب گردن شدن گوشههای آن، نمایش دایرهای و یا نمایش به همراه حاشیه یک تصویر خواهند شد.
Twitter Bootstrap به همراه صدها آیکون ارائه شده است. این آیکونها توسط
glyphicons.com ایجاد شدهاند. روشی که برای استفاده از آنها توصیه شده است، استفاده از تگ i میباشد. برای مثال:
<i class="icon-music"></i>icon-music
البته بدیهی است که محدودیتی در اینجا وجود نداشته و میتوان این کلاسها را به یک span نیز اعمال کرد.
برای مشاهده لیست کلاسهای قابل استفاده، کلمه icon-glass را در فایل bootstrap.css جستجو نمائید؛ تا شروع مدخل مرتبط با آیکونها را بتوانید مشاهده نمائید.
رنگ پیش فرض این آیکونها مشکی است. اگر علاقمند بودید که آنها را برای مثال با رنگ سفید نمایش دهید فقط کافی است کلاس icon-white را پس از کلاس آیکون مدنظر،ذکر کرد:
<i class="icon-music icon-white"></i>icon-music
از این نمونه قلمهای سازگار با Twitter Bootstrap در آدرس
fontawesome.github.com نیز قابل دریافت هستند.
امکان اعمال این آیکونها به دکمهها نیز وجود دارد. برای مثال:
<button class="btn">
<i class="icon-music"></i>دکمه</button>
کاربرد دیگر این آیکونها در بحث توسعه فیلدهای استاندارد است که پیشتر بحث شد. برای مثال نمایش آیکون نامه در کنار فیلد دریافت ایمیل:
| <div class="input-prepend">
<span class="add-on"><i class="icon-envelope"></i></span>
<input type="email" dir="ltr" />
</div>
|