طراحی وب با HTML و CSS فهرست مطالب
فصل ۱۵

نگاهی به آینده: بوت‌استرپ و جاوااسکریپت

این فصل جزو سرفصل دوره نیست و امتحان نمی‌آید. هدفش تنها این است که ببینید بعد از این کتاب، راه از کجا ادامه پیدا می‌کند.

پیش از شروع

هیچ‌کدام از مطالب این فصل را قرار نیست کامل یاد بگیرید. تنها می‌خواهیم بدانید چنین چیزهایی وجود دارند و هر کدام چه مشکلی را حل می‌کنند.

در این فصل با این مباحث آشنا می‌شوید
  1. بوت‌استرپ چیست
  2. سیستم ستونی بوت‌استرپ
  3. اجزای آماده
  4. مقایسه با سایت دست‌ساز ما
  5. اولین جاوااسکریپت
  6. تغییر دادن صفحه با جاوااسکریپت
  7. رویداد کلیک
  8. منوی موبایل، بالاخره
  9. نقشه راه

۱. بوت‌استرپ چیست

در چهارده فصل گذشته هر استایلی که خواستیم، خودمان نوشتیم. بوت‌استرپ یک فایل CSS آماده و بسیار بزرگ است که هزاران کلاس از پیش نوشته دارد. کافی است آن را به صفحه وصل کنیم و بعد تنها نام کلاس‌ها را در HTML بنویسیم.

<link rel="stylesheet" href="bootstrap.rtl.min.css">
<link rel="stylesheet" href="style.css">

وصل کردن بوت‌استرپ: نمونه 01-bootstrap-intro

شرح مثال

<button class="btn btn-primary">دکمه اصلی</button>
<button class="btn btn-success">دکمه سبز</button>
<button class="btn btn-outline-primary">دکمه توخالی</button>

<div class="alert alert-success">ثبت‌نام انجام شد.</div>
<div class="alert alert-danger">رمز عبور اشتباه است.</div>

دکمه و پیام آماده، بدون یک خط CSS

در فصل چهارم برای ساخت همین دکمه حدود ده خط CSS نوشتیم: padding، border، border-radius، background-color و hover:. در بوت‌استرپ همه این موارد از قبل داخل کلاس btn btn-primary نوشته شده است.

چرا فایل را دانلود می‌کنیم

بسیار از آموزش‌ها به جای فایل محلی، آدرس اینترنتی بوت‌استرپ را می‌نویسند. ما این کار را نمی‌کنیم، چون آن‌وقت صفحه بدون اینترنت اصلاً درست نمایش داده نمی‌شود. با فایل محلی، پروژه شما روی هر کامپیوتری کار می‌کند.

۲. سیستم ستونی بوت‌استرپ

در فصل یازدهم گرید و در فصل دوازدهم media query را یاد گرفتیم. بوت‌استرپ همین دو کار را با سه کلاس ساده انجام می‌دهد.

<div class="container">
    <div class="row">
        <div class="col-md-4">ستون یک</div>
        <div class="col-md-4">ستون دو</div>
        <div class="col-md-4">ستون سه</div>
    </div>
</div>

سیستم ستونی: نمونه 02-bootstrap-grid

شرح مثال

بوت‌استرپ هر ردیف را به دوازده قسمت تقسیم می‌کند. عدد جلوی col- می‌گوید این جعبه چند قسمت از آن دوازده تا را بگیرد. پس col-4 یعنی یک‌سوم و col-6 یعنی نصف. جمع عددهای یک ردیف باید دوازده شود.

حرف وسط، نقطه شکست است. col-md-4 یعنی «از عرض تبلت به بالا یک‌سوم، و روی موبایل تمام عرض». یعنی چیدمان واکنش‌گرا، بدون نوشتن حتی یک media query.

کلاساز چه عرضی به بالا
col-sm-۵۷۶ پیکسل، موبایل بزرگ
col-md-۷۶۸ پیکسل، تبلت
col-lg-۹۹۲ پیکسل، لپ‌تاپ
col-xl-۱۲۰۰ پیکسل، مانیتور بزرگ

۳. اجزای آماده

بوت‌استرپ تنها رنگ و فاصله نیست؛ قطعه‌های کامل و آماده هم دارد.

<div class="card">
    <img src="images/math-class.jpg" class="card-img-top" alt="کلاس ریاضی">
    <div class="card-body">
        <h5 class="card-title">ریاضی و فیزیک</h5>
        <p class="card-text">مناسب علاقه‌مندان به مهندسی</p>
        <a href="#" class="btn btn-primary">بیشتر بدانید</a>
    </div>
</div>

<table class="table table-striped table-bordered">
    ...
</table>

<span class="badge bg-primary">جدید</span>

اجزای آماده: نمونه 03-bootstrap-components

شرح مثال

کارتی که در فصل چهاردهم با حدود سی خط CSS ساختیم، اینجا تنها چند نام کلاس است. جدول راه‌راهی که در فصل سیزدهم با nth-child(odd): ساختیم، اینجا تنها table-striped است.

بوت‌استرپ یک فایل جاوااسکریپت هم دارد که اجزای متحرک را ممکن می‌کند: منوی موبایلی که باز و بسته می‌شود، پنجره بازشو، برگه‌های تب‌دار. آن فایل هم مانند CSS دانلود و کنار پروژه گذاشته می‌شود و درست قبل از </body> وصل می‌شود.

۴. مقایسه با سایت دست‌ساز ما

موضوعسایت فصل ۱۴همان صفحه با بوت‌استرپ
CSS نوشته‌شده توسط مابیش از ۳۰۰ خطحدود ۲۵ خط
زمان ساختچند جلسهکمتر از یک ساعت
منوی موبایلبا CSS تنها ممکن نبودآماده است و کار می‌کند
ظاهر اختصاصیکاملاً دلخواه ماشبیه بقیه سایت‌های بوت‌استرپی
حجم فایل CSSچند کیلوبایتحدود ۲۳۰ کیلوبایت
پس چرا چهارده فصل CSS را یاد گرفتیم؟

چون بوت‌استرپ قرار نیست جای یادگیری CSS را بگیرد. تا وقتی ندانید padding و flex چه می‌کنند، نمی‌فهمید کلاس‌های بوت‌استرپ چه کاری انجام می‌دهند و نمی‌توانید تغییرشان دهید. هر سایت واقعی جایی دارد که بوت‌استرپ آن را پوشش نمی‌دهد، و آنجا باید خودتان CSS بنویسید. به‌علاوه سایتی که تنها با کلاس‌های آماده ساخته شود، شبیه هزاران سایت دیگر می‌شود.

۵. اولین جاوااسکریپت

تا اینجا دو زبان یاد گرفتیم: HTML می‌گوید چه چیزی در صفحه باشد و CSS می‌گوید آن چیزها چه شکلی باشند. زبان سوم، جاوااسکریپت، کار سومی انجام می‌دهد: صفحه چه کاری انجام دهد.

<script src="script.js"></script>
// این پیام را به کاربر نشان بده
alert("سلام! به دنیای جاوااسکریپت خوش آمدید");

// و این را در کنسول مرورگر بنویس
console.log("این پیام فقط برای برنامه‌نویس است");

// دو متغیر بساز
let name = "سارا";
let age = 16;

console.log(name);

اولین برنامه: نمونه 05-js-intro

شرح مثال

آشناست، نه؟

در فصل سیزدهم در CSS هم متغیر داشتیم: --primary. ایده‌اش همان است: یک اسم بگذار، بعد هر جا لازم شد از آن اسم استفاده کن.

۶. تغییر دادن صفحه با جاوااسکریپت

کار جاوااسکریپت با صفحه دو مرحله دارد: اول عنصر را پیدا کن، بعد آن را عوض کن.

// مرحله ۱: پیدا کردن با id
let box = document.getElementById("welcome");

// مرحله ۲: عوض کردن
box.textContent = "سلام! این متن را جاوااسکریپت نوشت";
box.style.backgroundColor = "#2f4f4f";
box.style.color = "#ffffff";

تغییر صفحه: نمونه 06-js-dom

شرح مثال

document.getElementById("welcome") یعنی «در سند دنبال عنصری بگرد که id آن welcome است». همان آی‌دی فصل سوم، این بار برای جاوااسکریپت.

textContent متن داخل عنصر را عوض می‌کند و style استایلش را. تنها دقت کنید که نام ویژگی‌های CSS در جاوااسکریپت کمی فرق دارد: خط تیره حذف و حرف بعدی بزرگ می‌شود.

در CSSدر جاوااسکریپت
background-colorstyle.backgroundColor
font-sizestyle.fontSize
border-radiusstyle.borderRadius

۷. رویداد کلیک

در فصل پنجم hover: را یاد گرفتیم: وقتی موس روی چیزی می‌رود، ظاهرش عوض می‌شود. اما CSS نمی‌تواند بفهمد کاربر کلیک کرده و بعد از آن کاری انجام دهد. این کار جاوااسکریپت است.

let btn = document.getElementById("my-button");

btn.onclick = function () {
    document.body.style.backgroundColor = "#2f4f4f";
};


// شمارنده
let number = 0;
let box = document.getElementById("count");
let countBtn = document.getElementById("count-btn");

countBtn.onclick = function () {
    number = number + 1;
    box.textContent = number;
};

رویداد کلیک: نمونه 07-js-click

شرح مثال

onclick یعنی «هنگام کلیک». آن function یک بسته از دستورهاست که تا وقتی کلیک نشود اجرا نمی‌شود. هر بار که کاربر کلیک کند، دستورهای داخلش بار دیگر اجرا می‌شوند.

در مثال شمارنده، متغیر number بیرون از تابع تعریف شده تا مقدارش بین کلیک‌ها حفظ شود. این اولین باری است که صفحه ما چیزی را «به خاطر می‌سپارد»، کاری که با CSS هرگز ممکن نبود.

۸. منوی موبایل، بالاخره

در فصل دوازدهم و چهاردهم گفتیم تنها کاری که با CSS نتوانستیم انجام دهیم، منوی موبایلی است که با دکمه باز و بسته شود. حالا حلش می‌کنیم.

<button class="menu-btn" id="menu-btn">☰</button>

<nav class="main-nav" id="main-nav">
    <a href="#">خانه</a>
    <a href="#">درباره ما</a>
    <a href="#">تماس</a>
</nav>
.menu-btn {
    display: none;
}

@media (max-width: 768px) {
    .menu-btn {
        display: block;          /* دکمه ظاهر شود */
    }

    .main-nav {
        display: none;           /* منو پنهان شود */
        flex-direction: column;
        width: 100%;
    }

    .main-nav.open {
        display: flex;           /* مگر اینکه کلاس open داشته باشد */
    }
}
let btn  = document.getElementById("menu-btn");
let menu = document.getElementById("main-nav");

btn.onclick = function () {
    menu.classList.toggle("open");
};

منوی موبایل: نمونه 08-js-menu-toggle

شرح مثال

به تقسیم کار دقت کنید، چون این تمیزترین روش کار با این سه زبان است:

مهم‌ترین درس این فصل

جاوااسکریپت خوب، جاوااسکریپتی است که کم نوشته شود. هر جا می‌شود کاری را با CSS انجام داد، با CSS انجام دهید و جاوااسکریپت را تنها برای چیزی نگه دارید که CSS نمی‌تواند: به خاطر سپردن اینکه کاربر چه کاری کرده است.

۹. نقشه راه

در پانزده فصل، مسیر ساخت یک سایت هفت‌صفحه‌ای واکنش‌گرا را از یک صفحه خالی طی کردید. برای ادامه مسیر یادگیری، پیشنهاد ما این ترتیب است:

گامچه چیزیچرا
۱ جاوااسکریپت به شکل جدی مهم‌ترین قدم بعدی. شرط، حلقه، تابع، آرایه و کار با عنصرهای صفحه.
۲ گیت و گیت‌هاب نگه‌داشتن تاریخچه کار، بازگشت به نسخه‌های قبلی، همکاری با دیگران
۳ انتشار سایت هاست، دامنه و انتقال فایل. تا سایت آنلاین نشود، تنها خودتان می‌بینیدش.
۴ یک فریم‌ورک: React یا Vue وقتی سایت بزرگ می‌شود، جاوااسکریپت خام سخت می‌شود.
۵ سمت سرور: Node یا PHP ذخیره اطلاعات، ورود کاربر و پایگاه داده
درباره گام چهارم

برای رفتن سراغ فریم‌ورک عجله نکنید. تا جاوااسکریپت خام را خوب بلد نباشید، فریم‌ورک تنها گیج‌کننده است.

دو مسیر شغلی

پنج توصیه مهم

  1. بسازید و فقط به خواندن اکتفا نکنید. ویدیو دیدن حس یادگیری می‌دهد اما مهارت نمی‌سازد. هر چیزی را که یاد گرفتید، همان روز پیاده کنید.
  2. پروژه‌های کوچک و واقعی. سایت باشگاه مدرسه، صفحه معرفی خودتان، یک ماشین‌حساب ساده.
  3. کد دیگران را بخوانید. روی هر سایتی F12 بزنید و ببینید چگونه ساخته شده است.
  4. پروژه‌هایتان را نگه دارید. شش ماه بعد که به کد امروزتان نگاه کنید، پیشرفت خودتان را می‌بینید.
  5. سردرگم شدن و گیر کردن بخشی طبیعی از مسیر برنامه‌نویسی است. هر برنامه‌نویسی روزی چند بار جست‌وجو می‌کند. این ضعف نیست، خودِ مهارت است.
فایل‌های تمرینی این فصل

پوشه 15-bootstrap-and-js شامل نه نمونه: 01-bootstrap-intro تا 09-whats-next. فایل‌های بوت‌استرپ داخل همان پوشه‌ها هستند و به اینترنت نیاز ندارند.

سخن پایانی

حالا مفاهیمی را می‌دانید که پایه بخش بزرگی از وب را تشکیل می‌دهند. هر سایتی که در دنیا باز می‌کنید، در پایه‌ای‌ترین لایه‌اش همان تگ‌ها و همان قانون‌های CSS است که در این کتاب خواندید.

بقیه مسیر بیش از هر چیز به تمرین و تجربه نیاز دارد.

تمرین‌های فصل پانزده

  1. یک صفحه ساده تنها با کلاس‌های بوت‌استرپ بسازید و با نسخه دست‌ساز خودتان مقایسه کنید.
  2. به سایت فصل چهاردهم منوی موبایل اضافه کنید، با همان سه خط جاوااسکریپت.
  3. یک دکمه بسازید که با کلیک، رنگ پس‌زمینه صفحه را عوض کند.
  4. یک شمارنده بسازید که با هر کلیک یکی اضافه شود.
  5. سه سایت مورد علاقه‌تان را با F12 باز کنید و ببینید کدامشان از بوت‌استرپ استفاده کرده‌اند.
  6. برای شش ماه آینده‌تان یک برنامه یادگیری بنویسید و روی دیوار اتاقتان بچسبانید.
فصل قبل: پروژه نهایی بازگشت به فهرست مطالب