data-binding جاوا اسکریپتی سمت کلاینت
یک Flex Container متداول به این صورت کار میکند:
این کلاسها که موارد داخل پرانتز آنها اختیاری است، المان را تبدیل به یک المان Flexbox میکنند. حالت نمایشی پیشفرض آنها block است؛ اما اگر نیاز بود میتوان آنها را تبدیل به in-line نیز کرد. بنابراین سادهترین Flex Container را میتوان با افزودن کلاس d-flex ایجاد کرد.
بر روی یک Flex Container میتوان کلاسهای تعیین جهت را نیز تعریف کرد:
به این ترتیب میتوان آیتمها را به صورت ردیفها و یا ستونهایی، نمایش داد. مقدار row در اینجا به صورت پیشفرض اعمال میشود. بنابراین ذکر کلاس خالی flex به معنای قرار دادن المانها در طی چندین ردیف در صفحه است. در اینجا استفادهی از reverse، نمایش المانها را از راست به چپ میسر میکند.
در یک Flex Container امکان تعیین ترتیب عناصر نیز وجود دارد:
این مورد را در مطلب «طرحبندی صفحات وب با بوت استرپ 4 - قسمت دوم » بررسی کردیم. کلاس order را علاوه بر ستونها، بر روی هر دربرگیرندهای که دارای کلاس d-flex است نیز میتوان اعمال کرد.
همچنین امکان تنظیم فواصل بین آیتمها نیز در یک Flex Container پیش بینی شدهاست:
برای مثال استفادهی از مقدار تراز center، روش بسیار مناسبی برای قرار دادن عناصر، در میانهی افقی صفحه است. این مورد را نیز در قسمت قبل بررسی کردیم.
میتوان نحوهی Wrap المانها را بر اساس فضای خالی در یک Flex Container به صورت زیر تنظیم کرد:
که در اینجا دو مقدار wrap و nowrap قابل تنظیم است. در حالت wrap، اگر آیتمها با اندازهی خودشان در ردیف جاری جا نشدند، به سطر یا سطرهای بعدی منتقل خواهند شد. حالت پیشفرض nowrap است.
برای تغییر تراز عمودی المانها در یک Flex Container از کلاس align-content استفاده میشود:
این مورد را نیز در قسمت قبل بررسی کردیم و همانند کار با ستونها میباشد.
یک مثال: بررسی ویژگیهای یک Flex Container
<head> <style> .item { background: #f0ad4e; text-align: center; width: 150px; height: 30px; border: 1px solid white; } </style> </head> <body> <div class="container bg-danger"> <div class="bg-info" style="height:100vh"> <div class="item">Exotic</div> <div class="item">Grooming</div> <div class="item">Health</div> <div class="item">Nutrition</div> <div class="item">Pests</div> <div class="item">Vaccinations</div> </div> </div> </body>
در ابتدا کلاس d-flex را به div داخل container اضافه میکنیم:
<div class="bg-info d-flex" style="height:100vh">
و اگر جهت این Flex Container را به صورت صریح مشخص کنیم:
<div class="bg-info d-flex flex-column" style="height:100vh">
و یا اگر بخواهیم آیتمها را از راست به چپ به صورت یک ردیف نمایش دهیم میتوان از flex-row-reverse استفاده کرد:
<div class="bg-info d-flex flex-row-reverse" style="height:100vh">
و اگر بجای row در این حالت column را مقدار دهی کنیم:
<div class="bg-info d-flex flex-sm-column-reverse" style="height:100vh">
آیتمها از پایین صفحه شروع خواهند شد. البته در این مثال break-point از نوع sm نیز ذکر شدهاست تا پس از گذر از این اندازهی صفحه، چنین اتفاقی رخ دهد.
و یا اگر بخواهیم آیتمها از راست به چپ در طی یک ردیف، پس از اندازهی صفحهی sm و همچنین در میانهی صفحه ظاهر شوند، میتوان از کلاس justify-content استفاده کرد:
<div class="bg-info d-flex flex-sm-row-reverse justify-content-center" style="height:100vh">
و اگر wrap را فعال کنیم:
<div class="bg-info d-flex flex-sm-row-reverse justify-content-center flex-wrap" style="height:100vh">
اگر آیتمها با اندازهی اصلی خودشان، در ردیف جاری جا نشدند، به سطرهای بعدی منتقل خواهند شد.
اگر nowrap را فعال کنیم:
<div class="bg-info d-flex flex-sm-row-reverse justify-content-center flex-nowrap" style="height:100vh">
و با فعالسازی align-content-start، تمام آیتمها را به سمت بالای صفحه هدایت میکند و align-content-end، آنها را از پایین صفحه شروع خواهد کرد:
<div class="bg-info d-flex flex-sm-row-reverse justify-content-center flex-wrap align-content-start" style="height:100vh">
کنترل آیتمهای قرار گرفتهی درون یک Flex Container در بوت استرپ 4
علاوه بر امکان کنترل ویژگیهای یک Flex Container، اجزای قرار گرفتهی درون آنها را نیز میتوان کنترل کرد و اینکار توسط کلاس align-self میسر است:
این مورد نیز همانند توضیحات کلاس align-self اعمالی به ستونها است که در قسمت قبل بررسی کردیم.
به علاوه در اینجا امکان تعریف floating elements نیز مسیر است که شبیه به دسترسی به امکانات CSS در بوت استرپ است با امکان تنظیم break-points:
فرض کنید به تمام آیتمهای داخل Flex Container کلاس float-left را اضافه کردهایم. در این حالت Container قابلیت ردیابی اندازهی این آیتمها را از دست میدهد. به همین جهت با اعمال کلاس clearfix بوت استرپ به container، مجددا امکان ردیابی این آیتمها را پیدا میکند.
کلاسهای تعریف margin و padding در بوت استرپ 4
در بوت استرپ 4 کلاسهای ویژهای برای ایجاد margin و padding بین عناصر در نظر گرفته شدهاند که خلاصهی آنها فرمول زیر است:
ابتدا با تعریف یک خاصیت شروع میشود؛ مانند m یا p، برای کنترل margin و padding. سپس لبهای که باید به آن اعمال شود بدون فاصله و یا - ذکر میشود؛ مانند mt به معنای margin-top. در این فرمول x به معنای اعمال همزمان به چپ و راست است و y به معنای اعمال همزمان به بالا و پایین و اگر میخواهید آیتمهای کناری آیتم جاری را به دو طرف لبهها هدایت کنید از mx-auto استفاده کنید.
در اینجا امکان اعمال یک break-point اختیاری نیز وجود دارد. در آخر اندازه ذکر میشود که بین 0 تا 5 متغیر است.
یک مثال: اعمال کلاسهای padding و margin بوت استرپ 4
<head> <style> .item { background: #f0ad4e; text-align: center; border: 1px solid white; } </style> </head> <body> <div class="container bg-danger"> <div class="bg-info d-flex"> <div class="item">Exotic</div> <div class="item">Grooming</div> <div class="item bg-danger ml-3 my-sm-3 pb-3 pt-5">Health</div> <div class="item">Nutrition</div> <div class="item">Pests</div> <div class="item">Vaccinations</div> </div> </div> </body>
نمایش و مخفی سازی عناصر در بوت استرپ 4
کلاس invisible سبب میشود تا المانی در صفحه نمایش داده نشود، اما این المان همچنان فضای اختصاصی خود را خواهد داشت. کلاس visible به معنای نمایان بودن المانی تنها برای screen readers است (دستگاههای کمکی معلولها).
اما روش اصلی نمایش و یا مخفی سازی عناصر در بوت استرپ 4، استفاده از خاصیت display است:
برای مثال با انتساب کلاس d-sm-none به المانی، میتوان سبب مخفی شدن آن پس از گذر از sm شد.
امکان تعیین اندازهی عناصر در بوت استرپ 4
بوت استرپ 4 تعدادی کلاس ویژه را برای تعیین اندازهی عناصر نیز افزودهاست:
در اینجا w=width، h=height، mw=max-height و mh=max-height است با مقادیر 25، 50، 75 و 100 و مقدار پیشفرض آن 100 است (یعنی پوشاندن کل container).
کدهای کامل این قسمت را از اینجا میتوانید دریافت کنید: Bootstrap4_06.zip
در نسخههای قبل از Angular CLI 6.0، صرفا امکان Bundle کردن جداگانهی ماژولهایی که در قسمت loadChildren مرتبط با تنظیمات مسیریابی ذکر شده بودند، وجود داشت. بنابراین در برخی از شرایط اگر نیاز به امکان بارگذاری ماژولی به صورت Lazy load بود، باید از سیستم مسیریابی استفاده میشد یا اینکه با یکسری ترفند، CLI و Webpack را مجبور به ساخت فایل chunk جداگانه برای ماژول مورد نظر میکردید. از زمان انتشار Angular CLI 6.0 امکان Lazy loading پویا نیز مهیا میباشد؛ به این ترتیب بدون وابستگی به سیستم مسیریابی، باز هم میتوان از مزایای Lazy loading بهره برد. در این مطلب روش استفاده از این قابلیت و همچنین نحوهی بارگذاری پویای یک کامپوننت مرتبط با یک ماژول Lazy load شده را بررسی خواهیم کرد. برای این منظور در ادامه با ایجاد یک TabLayout با استفاده از Angular Material Tabs با یکی از موارد پر استفادهی قابلیت مذکور آشنا خواهیم شد.
پیش نیازها
- مسیر آموزشی «+AngularJS 2.0»
- مسیر آموزشی «سری آموزشی Angular CLI»
- مسیر آموزشی «مسیریابی در Angular»
- مسیر آموزشی «کتابخانه Angular Material 6x»
کار را با طراحی و پیاده سازی TabService شروع میکنیم. برای این منظور یک سرویس را در فولدر services موجود در کنار CoreModule ایجاد خواهیم کرد؛ به این جهت ابتدا مدلهای زیر را خواهیم داشت:
import { Type, ValueProvider } from '@angular/core'; export interface OpenNewTabModel { label: string; componentType: Type<any>; iconName: string; modulePath?: string; data?: ValueProvider[]; }
import { TabItemComponent } from './tab-item-component'; export interface TabItem { label: string; iconName: string; component: TabItemComponent; }
OpenNewTabModel برای ارسال داده توسط مصرف کننده از این سرویس در نظر گرفته شده است. ولی واسط TabItem دارای خصوصیاتی میباشد که ما برای نمایش یک برگهی جدید نیازمندیم. TabItemComponent نیز دارای خصوصیاتی است که مورد نیاز دایرکتیو« NgComponentOutlet» است.
import { Injector, NgModuleFactory, Type } from '@angular/core'; export interface TabItemComponent { componentType: Type<any>; moduleFactory?: NgModuleFactory<any>; injector: Injector; }
import { BehaviorSubject, Observable } from 'rxjs'; import { Injectable, Injector, NgModuleFactory, NgModuleFactoryLoader } from '@angular/core'; import { OpenNewTabModel } from '../models/open-new-tab-model'; import { TabItem } from '../models/tab-item'; @Injectable({ providedIn: 'root' }) export class TabService { private tabItemSubject: BehaviorSubject<TabItem[]> = new BehaviorSubject< TabItem[] >([]); constructor( private loader: NgModuleFactoryLoader, private injector: Injector ) {} get tabItems$(): Observable<TabItem[]> { return this.tabItemSubject.asObservable(); } open(newTab: OpenNewTabModel) { if (newTab.modulePath) { this.loader .load(newTab.modulePath) .then((moduleFactory: NgModuleFactory<any>) => { this.openInternal(newTab, moduleFactory); }); } else { this.openInternal(newTab); } } private openInternal(newTab: OpenNewTabModel, moduleFactory?: NgModuleFactory<any>) { const newTabItem: TabItem = { label: newTab.label, iconName: newTab.iconName, component: { componentType: newTab.componentType, moduleFactory: moduleFactory, injector: newTab.data ? Injector.create(newTab.data, this.injector) : this.injector } }; this.tabItemSubject.getValue().push(newTabItem); this.tabItemSubject.next(this.tabItemSubject.getValue()); } close(index: number) { this.tabItemSubject.getValue().splice(index, 1); this.tabItemSubject.next(this.tabItemSubject.getValue()); } }
{ provide: NgModuleFactoryLoader, useClass: SystemJsNgModuleLoader }
import { Component, OnInit } from '@angular/core'; import { TabService } from './../../../services/tab.service'; @Component({ selector: 'app-tabs', templateUrl: './tabs.component.html', styleUrls: ['./tabs.component.scss'] }) export class TabsComponent implements OnInit { constructor(public service: TabService) {} ngOnInit() {} }
<mat-tab-group> <mat-tab *ngFor="let tabItem of (service.tabItems$ | async); let index = index" > <ng-template mat-tab-label> <mat-icon class="icon" aria-label="icon for tab" >{{tabItem.iconName}}</mat-icon> <span class="full">{{ tabItem.label }}</span> <mat-icon class="close" (click)="service.close(index)" aria-label="close tab button" >close</mat-icon > <!-- </button> --> </ng-template> <ng-container *ngIf="tabItem.component.moduleFactory"> <ng-container *ngComponentOutlet=" tabItem.component.componentType; ngModuleFactory: tabItem.component.moduleFactory; injector: tabItem.component.injector " > </ng-container> </ng-container> <ng-container *ngIf="!tabItem.component.moduleFactory"> <ng-container *ngComponentOutlet=" tabItem.component.componentType; injector: tabItem.component.injector " > </ng-container> </ng-container> </mat-tab> </mat-tab-group>
در تکه کد بالا، ابتدا با استفاده از وهله تزریق شده TabService در کامپوننت مذکور، به شکل زیر، مشترک تغییرات لیست برگهها شدهایم و با استفاده از دایرکتیو *ngFor به ازای تک تک tabItemهای درخواست شده برای گشوده شدن، به شکل زیر کار وهله سازی پویا از کامپوننت مشخص شده انجام میشود:
<ng-container *ngComponentOutlet="tabItem.component.componentType; ngModuleFactory: tabItem.component.moduleFactory; injector: tabItem.component.injector"> </ng-container>
خوب، با استفاده از آنچه تا اینجای مطلب بررسی شد، میتوان یک سیستم راهبری مبتنی بر Tab را نیز برپا کرد که مطلب جدایی را میطلبد. برای تکمیل مکانیزم بارگذاری پویای ماژولها، نیاز است تا مسیر ماژول مورد نظر را در فایل angular.json و بخش lazyModules به شکل زیر معرفی کنید:
"build": { "builder": "@angular-devkit/build-angular:browser", "options": { "outputPath": "dist/MaterialAngularTabLayout", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.app.json", "assets": [ "src/favicon.ico", "src/assets" ], "styles": [ "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.scss" ], "lazyModules": [ "src/app/lazy/lazy.module" ], "scripts": [] },
به عنوان مثال قصد داریم ماژول LazyModule را به صورت پویا بارگذاری کرده و LazyComponent موجود در این ماژول را به صورت پویا در برگهی جدیدی نمایش دهیم. برای این منظور کدهای فایل AppComponent.ts را به شکل زیر تغییر خواهیم داد:
import { Component } from '@angular/core'; import { IdModel } from './core/models/id-model'; import { LazyComponent } from './lazy/lazy.component'; import { OpenNewTabModel } from './core/models/open-new-tab-model'; import { TabService } from './core/services/tab.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) export class AppComponent { title = 'MaterialAngularTabLayout'; constructor(private tabService: TabService) {} loadLazyComponent() { this.tabService.open(<OpenNewTabModel>{ label: 'Loaded Lazy Component', iconName: 'thumb_up', componentType: LazyComponent, modulePath: 'src/app/lazy/lazy.module#LazyModule', data: [{ provide: IdModel, useValue: <IdModel>{ id: 1 } }] }); } }
در تکه کد بالا با تزریق TabService به سازندهی آن، قصد گشودن برگهی جدیدی را توسط متد open آن، داریم. در بدنهی متد loadLazyComponent یک شیء با قرارداد OpenNewTabModel ایجاد شده و به عنوان آرگومان به متد open ارسال شده است. توجه داشته باشید که modulePath اینجا نیز به مانند خصوصیت loadChildren مرتبط با اشیاء مسیریابی، باید مقدار دهی شود. همچنین قصد داشتیم اطلاعاتی را نیز به کامپوننت مورد نظر ارسال کنیم؛ همانند مکانیزم مسیریابی که با پارامترها این چنین کارهایی صورت میپذیرد. در اینجا از یک کلاس به شکل زیر استفاده شدهاست:
export class IdModel { constructor(public id: number) {} }
در این صورت پیاده سازی LazyComponent نیز به شکل زیر خواهد بود:
import { Component, OnInit } from '@angular/core'; import { IdModel } from './../core/models/id-model'; @Component({ selector: 'app-lazy', templateUrl: './lazy.component.html', styleUrls: ['./lazy.component.scss'] }) export class LazyComponent implements OnInit { constructor(private model: IdModel) {} ngOnInit() { console.log(this.model); } }
البته فراموش نکنید کامپوننتی را که نیاز است به صورت پویا بارگذاری شود، در قسمت entryComponents مرتبط با NgModule متناظر به شکل نیز معرفی کنید:
import { CommonModule } from '@angular/common'; import { LazyComponent } from './lazy.component'; import { NgModule } from '@angular/core'; @NgModule({ imports: [CommonModule], declarations: [LazyComponent], entryComponents: [LazyComponent] }) export class LazyModule {}
با خروجی زیر:
و chunk تولید شده برای ماژول مورد نظر:
در صورتیکه در حالت production پروژه را بیلد کنید، هش مرتبط برای chunk تولید شده نیز ایجاد خواهد شد.
کدهای کامل این قسمت را میتوانید از اینجا دریافت کنید.
بهترین styleGuide برای Angularjs
تایپوگرافی مقدماتی بوت استرپ 4
شیوهنامههای همراه با بوت استرپ، رفتار و تنظیمات پیشفرض مرورگر را بازنویسی میکنند. این بازنویسی با فایل node_modules\bootstrap\scss\_reboot.scss شروع میشود. اگر مجموعهی بوت استرپ را توسط روش معرفی شدهی در مطلب «روشهای مختلف دریافت و نصب بوت استرپ 4» دریافت کرده باشید، کدهای کامل SASS آن، در پوشهی scss این مجموعه، موجود هستند که یکی از آنها فایل reboot است. کار آن نرمال سازی شیوهنامهها، به نحوی است که در مرورگرها مختلف و همچنین وسایل نمایشی متفاوت، یکسان به نظر برسند:
- برای مثال در این فایل از روش اندازه گیری rem استفاده شدهاست تا مدیریت اندازههای آن در سکوهای کاری مختلف قابل کنترل شود.
- در اینجا از margin-top به طور کامل صرفنظر شدهاست، تا بتوان اندازهگیری فواصل بین عناصر را بهتر محاسبه کرد. بوت استرپ 4 تنها یک margin را در پایین تمام عناصر صفحه، تنظیم میکند. بنابراین آگاهی از وجود این پیشفرض، تنظیم فواصل بین عناصر را نیز سادهتر میکند.
- در این فایل در همهجا از خاصیت inherit استفاده شدهاست تا امکان بازنویسی شیوهنامههای آن توسط custom styles ما سادهتر شود.
- پیشفرض دیگری که در این نگارش از بوت استرپ تنظیم شدهاست، border-box میباشد. به این ترتیب اندازه گیری عرض عناصر سادهتر میشوند. برای مثال اگر عرض یک div را مساوی 200px قرار دهید، یک padding پیشفرض نیز برای آن درنظر گرفته شدهاست و padding سفارشی تنظیم شدهی برای آن بیاثر خواهد بود.
- در این نگارش، فونت پیشفرض صفحه، به فونت پیشفرض سیستم تنظیم شدهاست و نه فونت از پیش تعیین شدهی خاصی. از این جهت که این قلمهای سیستمی، دارای ویژگیهای خاصی هستند که آنها را برای سکوهای کاری مختلف، منحصربفرد میکنند.
مثال: نمایش تاثیر بوت استرپ 4 بر روی تایپوگرافی پیشفرض مرورگر
<body> <div class="container"> <section class="content" id="mission"> <h1>Our Commitment <small>to you</small></h1> <p>Wisdom Pet Medicine strives to blend the best in traditional and <em>alternative medicine</em> in the <strong>diagnosis and treatment</strong> of companion animals including dogs, cats, birds, reptiles, rodents, and fish. We apply the wisdom garnered in the <mark>centuries old tradition</mark> of veterinary medicine, to find the safest treatments and cures.</p> <p>We strive to be your pet's medical <del>staff</del> experts from youth through the senior years. <small>We build preventative health care plans for each and every one of our patients, based on breed, age, and sex, so that your pet receives the most appropriate care at crucial milestones.</small> We want to give your pet a long and healthy life.</p> </section> <section class="content" id="services"> <h2>Exotic Pets</h2> <p>We offer <strong>specialized</strong> care for <em>reptiles, rodents, birds,</em> and other exotic pets.</p> <h3>Grooming</h3> <p>Our therapeutic <span>grooming</span> treatments help battle fleas, allergic dermatitis, and other challenging skin conditions.</p> <h4>General Health</h4> <p>Wellness and senior exams, ultrasound, x-ray, and dental cleanings are just a few of our general health services.</p> <h5>Nutrition</h5> <p>Let our nutrition experts review your pet's diet and prescribe a custom nutrition plan for optimum health and disease prevention.</p> <h6>Pest Control</h6> <p>We offer the latest advances in safe and effective prevention and treatment of fleas, ticks, worms, heart worm, and other parasites.</p> <h2>Vaccinations</h2> <p>Our veterinarians are experienced in modern vaccination protocols that prevent many of the deadliest diseases in pets.</p> </section> </div> </body>
با اعمال بوت استرپ
بدون اعمال بوت استرپ
در اینجا دو تصویر راملاحظه میکنید؛ یکی با اعمال bootstrap.min.css به صفحهاست و دیگری با حذف آن از صفحه. به این ترتیب مشاهده میکنید که صرفا اعمال بوت استرپ به یک صفحهی متداول، کیفیت نمایش آنرا با بازنویسی شیوهنامهی پیشفرض مرورگر، به نحو قابل ملاحظهای بهبود بخشیدهاست و آنرا زیباتر کردهاست.
در اینجا تنها المان بوت استرپی که به صفحه اضافه شدهاست و جزو استانداردهای HTML نیست، یک div با کلاس container است:
<body> <div class="container">
در این مثال تاثیر بوت استرپ را بر روی شیوهنامههای پیشفرض خصوصا h1 تا h6، مشاهده میکنید.
روش دیگر تعریف headings در اینجا، استفاده از کلاسهایی با نامهای مشابه است:
<div class="h1">Test div class H1</div>
<div class="display-1">Test div class display-1</div>
همچنین اگر نیاز به بزرگتر نمایش دادن متن قسمت ابتدایی صفحه وجود داشت، میتوان از کلاس Lead استفاده کرد:
<p class="lead">Testing a lead class</p>
کلاسهای کمکی کار با متون در بوت استرپ 4
بوت استرپ 4 به همراه تعدادی کلاس کمکی کار با متون است که نیازهای متداول تایپوگرافی را برآورده میکنند:
1) کلاسهای کمکی محل قرارگیری متون
- کلاس text-justify کار کشیدن و متناسب کردن یک پاراگراف را با گوشههای سمت چپ و راست صفحه انجام میدهد.
- کلاس text-nowrap از شکسته شدن متن به چندین سطر جلوگیری میکند. برای مثال میتواند برای نمایش کدها مناسب باشد.
- کلاس متغیر text-xx-pos برای تعیین محل قرارگیری متن کاربرد دارد:
در اینجا ذکر xx اختیاری است و میتواند sm، برای اندازههای صفحهی بیشتر از 576px و یا md، برای اندازههای صفحهی بیشتر از 768px و یا lg، برای اندازههای صفحهی بیشتر از 992px و یا xl، برای اندازههای صفحهی بیشتر از 1200px باشد. این اندازههای یاد شده را در ادامه بیشتر مشاهده خواهید کرد.
همچنین pos میتواند left ،center و یا right باشد.
برای مثال کلاس text-sm-center به این معنا است که متن مدنظر در break-point ایی به نام sm، یعنی با اندازهی صفحهی بیشتر از 576px، در وسط صفحه نمایش داده خواهد شد.
2) کلاسهای نمایش upper-case و lower-case حروف
- کلاس text-lowercase کار نمایش lower-case کل یک پاراگراف اعمالی را انجام میدهد.
- کلاس text-uppercase کار نمایش upper-case کل یک پاراگراف اعمالی را انجام میدهد.
- کلاس text-capitalize، اولین حرف هر واژه را به صورت بزرگ نمایش میدهد.
3) کلاسهای شیوهی نمایش متون
کلاس font-weight-bold، کلاس font-weight-normal و کلاس font-italic نمایش ضخیم، عادی و یا italic متن را سبب میشوند.
مثال: بررسی تاثیر کلاسهای کمکی کار با متون در بوت استرپ 4
<body> <div class="container"> <section class="content" id="mission"> <h1 class="text-center text-sm-right text-md-left text-uppercase">Our Commitment</h1> <p class="lead text-justify">Wisdom Pet Medicine strives to blend the best in traditional and <em>alternative medicine</em> in the <strong>diagnosis and treatment</strong> of companion animals including dogs, cats, birds, reptiles, rodents, and fish. We apply the wisdom garnered in the <mark>centuries old tradition</mark> of veterinary medicine, to find the safest treatments and cures.</p> <p class="text-nowrap text-capitalize">We strive to be your pet's medical <del>staff</del> experts from youth through the senior years. <small>We build preventative health care plans for each and every one of our patients, based on breed, age, and sex, so that your pet receives the most appropriate care at crucial milestones.</small> We want to give your pet a long and healthy life.</p> </section> <section class="content" id="services"> <div class="display-4">Exotic Pets</div> <p>We <span class="font-weight-bold">offer</span> <strong class="font-weight-normal">specialized</strong> care for <em>reptiles, rodents, birds,</em> and other exotic pets.</p> <h3 class="text-left text-md-center text-sm-right">Grooming</h3> <p>Our therapeutic <span>grooming</span> treatments help battle fleas, allergic dermatitis, and other challenging skin conditions.</p> <h4>General Health</h4> <p>Wellness and senior exams, ultrasound, x-ray, and dental cleanings are just a few of our general health services.</p> <h5>Nutrition</h5> <p>Let our nutrition experts review your pet's diet and prescribe a custom nutrition plan for optimum health and disease prevention.</p> <h6>Pest Control</h6> <p>We offer the latest advances in safe and effective prevention and treatment of fleas, ticks, worms, heart worm, and other parasites.</p> <h2>Vaccinations</h2> <p>Our veterinarians are experienced in modern vaccination protocols that prevent many of the deadliest diseases in pets.</p> </section> </div> </body>
در اینجا اگر کلاس text-right را به heading اضافه کنیم:
<h1 class="text-right">Our Commitment <small>to you</small></h1>
و یا میتوان این کلاسها را با هم ترکیب کرد:
<h1 class="text-center text-sm-right">Our Commitment <small>to you</small></h1>
- متن h1 در حالت عادی در وسط صفحه نمایش داده شود.
- اما متن مدنظر در break-point ایی به نام sm، یعنی با اندازهی صفحهی بیشتر از 576px، در سمت راست صفحه نمایش داده خواهد شد.
این اعداد توسط افزونهی ViewPort نمایش داده شدهاند.
همچنین تاثیر text-justify را نیز به اولین پاراگراف
<p class="lead text-justify">
و یا اگر text-nowrap را به پاراگرافی اعمال کنیم:
<p class="text-nowrap">
سبب نمایش یک سطری آن خواهد شد که در اینجا با پدید آمدن یک اسکرول بار افقی، قابل ملاحظهاست.
کلاسهای کمکی کار با لیستها و نقل قولها در بوت استرپ 4
بوت استرپ 4 به همراه کلاسهایی کمکی برای کار با لیستها و نقل قولها است؛ مانند:
- کلاس list-unstyled سبب حذف bullets از یک لیست میشود.
- برای ایجاد لیستهای Inline میتوان از کلاس list-inline بر روی المان UL و سپس list-inline-item بر روی هر LI آن، کمک گرفت.
<body> <div class="container"> <section class="content" id="services"> <h2>Exotic Pets</h2> <p>We offer <strong>specialized</strong> care for <em>reptiles, rodents, birds,</em> and other exotic pets.</p> <ul class="list-unstyled"> <li>Grooming</li> <li>General Health</li> <li>Nutrition</li> <li>Pest Control</li> <li>Vaccinations</li> </ul> <ul class="list-inline"> <li class="list-inline-item">Grooming</li> <li class="list-inline-item">General Health</li> <li class="list-inline-item">Nutrition</li> <li class="list-inline-item">Pest Control</li> <li class="list-inline-item">Vaccinations</li> </ul> </section> </div> </body>
در حالت لیست inline، آیتمهای لیست از چپ به راست در یک سطر نمایش داده میشوند. برای مثال میتواند برای نمایش breadcrumbs در یک سایت مناسب باشد.
همچنین برای نمایش نقل قولها میتوان از کلاس blockquote و برای نمایش بهتر امضای آن از کلاس blockquote-footer استفاده کرد:
<body> <div class="container"> <section class="content" id="testimonials"> <h2>Testimonials</h2> <blockquote> During the summer, our rabbit, Tonto, began to have severe redness and itching on his belly and feet. I'm very thankful to the veterinarians and staff at Wisdom for the excellent care Tonto received, and for nipping his allergies in the bud, so to speak. Jane </blockquote> <blockquote class="blockquote text-right"> When Samantha, our Siamese cat, began sleeping all the time and urinating excessively, we brought her to see the specialists at Wisdom. Now, two years later, Samantha is still free from any complications of diabetes, and her blood sugar regularly tests normal. <div class="blockquote-footer"> The McPhersons </div> </blockquote> </section> </div> </body>
در اینجا دو blockquote را مشاهده میکنید. مورد اول بدون کلاس blockquote است و دومی به همراه این کلاس و یک footer تعریف شدهاست. همچنین میتوان کلاسهایی مانند text-right را نیز به blockquote اضافه کرد.
البته در نگارش 4، حاشیهی خاکستری blockquote که در نگارش سوم آن وجود داشت، حذف شدهاست.
کار با رنگها در بوت استرپ 4
بوت استرپ، به همراه تعدادی کلاس مخصوص رنگها است که از آن در همه جا استفاده میکند؛ مانند رنگهای دکمهها، پس زمینهها و متون.
1) کلاسهای تعیین رنگ متون:
برای مثال در اینجا بجای Color میتوان یکی از ثوابت ذیل آنرا قید کرد؛ مانند text-primary و یا text-danger
این کلاسها برای تعیین رنگ متون و همچنین لینکها کاربرد دارند.
2) کلاسهای تعیین رنگ پس زمینه:
در اینجا برای نمونه بجای Color میتوان یکی از ثوابت ذیل آنرا قید کرد؛ مانند bg-primary و یا bg-danger
مثال: اعمال رنگهای زمینهای بوت استرپ
<body> <div class="container"> <section class="content" id="services"> <h2 class="text-danger">Our Mission</h2> <p class="bg-danger text-white">Wisdom Pet Medicine strives to blend the best in traditional and alternative medicine in the diagnosis and treatment of companion animals including dogs, cats, birds, reptiles, rodents, and fish. We apply the wisdom garnered in the centuries old tradition of veterinary medicine, to find the safest treatments and cures.</p> <ul> <li><a class="text-warning" href="#">Grooming</a></li> <li><a href="#">General Health</a></li> <li><a href="#">Nutrition</a></li> <li><a href="#">Pest Control</a></li> <li><a href="#">Vaccinations</a></li> </ul> </section> <section class="content" id="testimonials"> <h2>Testimonials</h2> <blockquote class="blockquote bg-faded text-info"> During the summer, our rabbit, Tonto, began to have severe redness and itching on his belly and feet. I'm very thankful to the veterinarians and staff at Wisdom for the excellent care Tonto received, and for nipping his allergies in the bud, so to speak. <div class="blockquote-footer"> Jane </div> </blockquote> </section> </div> </body>
در اینجا مثالهایی را از اعمال کلاسهای رنگهای بوت استرپ مشاهده میکنید. همچنین امکان ترکیب آنها مانند مثال زیر نیز وجود دارد:
<p class="bg-danger text-white">
کدهای کامل این قسمت را از اینجا میتوانید دریافت کنید: Bootstrap4_02.zip