در این دوره ساختن صفحهٔ وب را از اولین تگ HTML تا یک سایت واکنشگرا یاد میگیرید. کد را در مرورگر مینویسید و صفحه همان لحظه کنار آن ساخته میشود.
<!doctype html>
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8">
<style>
* { box-sizing: border-box; margin: 0; }
body { font-family: system-ui, sans-serif; color: #e2e8f0; min-height: 100vh;
background: radial-gradient(circle at 20% 0%, #1e3a8a, #0f172a 60%); }
nav { display: flex; align-items: center; gap: 20px; padding: 16px 24px; }
.logo { font-weight: 800; font-size: 20px; color: #fff; }
.logo span { color: #fbbf24; }
ul { display: flex; gap: 18px; list-style: none; padding: 0; margin-inline-start: auto; }
a { color: #cbd5e1; text-decoration: none; font-size: 14px; }
.cta { background: #fbbf24; color: #1c1917; padding: 8px 16px; border-radius: 999px; font-weight: 700; }
header { text-align: center; padding: 28px 24px 40px; }
h1 { font-size: 30px; line-height: 1.4; color: transparent;
background: linear-gradient(90deg, #fde68a, #f472b6); -webkit-background-clip: text; background-clip: text; }
p { margin-top: 8px; color: #94a3b8; }
@media (max-width: 400px) { ul { display: none; } .cta { margin-inline-start: auto; } }
</style>
</head>
<body>
<nav>
<div class="logo">کافه<span>کتاب</span></div>
<ul>
<li><a href="#">منو</a></li>
<li><a href="#">کتابها</a></li>
<li><a href="#">تماس</a></li>
</ul>
<a class="cta" href="#">رزرو میز</a>
</nav>
<header>
<h1>قهوهٔ تازه، کتاب خوب</h1>
<p>هر روز از ساعت ۸ صبح تا ۱۱ شب</p>
</header>
</body>
</html>
نوار بالای سایت با لوگو، منو و دکمهٔ رزرو، و زیر آن تیتری با رنگ گرادیانی. در صفحهٔ باریک منو پنهان میشود و دکمه میماند. نمونههای دیگر
دوره از HTML شروع میشود، به CSS میرسد و با پروژههای کامل تمام میشود.
ساختار سند HTML را میسازید و بخش head را با charset، viewport، عنوان، توضیحات متا، Open Graph و favicon کامل میکنید.
پاراگراف، فهرست، نقلقول و کد را مینویسید، لینک میسازید و تصویر را با alt، srcset و figure درست در صفحه میگذارید.
صفحه را با header، nav، main، section و footer بخشبندی میکنید و جدولی دسترسپذیر با عنوان و سرستون میسازید.
انواع ورودی، label، فهرست کشویی، fieldset و اعتبارسنجی مرورگر را در دو فصل یاد میگیرید.
CSS را به صفحه وصل میکنید، با انتخابگرهای پایه و پیشرفته کار میکنید و میفهمید چرا یک قانون بر قانون دیگر غلبه میکند.
فاصلهها را با padding و margin تنظیم میکنید، با rem، درصد، vw و clamp اندازه میدهید و با فونت وب متن خوانا میسازید.
پسزمینهٔ گرادیانی، گوشهٔ گرد و سایه میسازید و عنصرها را با position و z-index روی هم میچینید.
هر کدام یک فصل کامل دارد: نوار ناوبری با Flexbox، چیدمان دوبعدی با Grid و صفحهای که در موبایل و دسکتاپ درست دیده شود.
با transition و keyframes حرکت میسازید، CSS را با متغیرها و نامگذاری BEM مرتب میکنید و با Bootstrap 5 صفحه را سریعتر میسازید.
کارت پروفایل، جدول قیمت، صفحهٔ معرفی محصول، پورتفولیو و یک سایت واکنشگرا را از صفر میسازید. فصل آخر چند ساختنی کوچک دارد، مثل کارت آبوهوا و صفحهٔ ۴۰۴.
این شش صفحهٔ کوچک را برای همین صفحه نوشتهایم، همه برای یک کافهکتاب خیالی. کنار کد هر کدام، صفحهای را میبینید که مرورگر از آن میسازد.
فرمی با فیلد اجباری، ایمیل، فهرست کشویی، دکمهٔ رادیویی و چکباکس. مرورگر پیش از ارسال، خالی نبودن فیلدها و درستی ایمیل را بررسی میکند.
<!doctype html>
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8">
<style>
body { margin: 0; padding: 14px; font-family: system-ui, sans-serif; background: #ecfdf5; color: #1f2937; }
form { max-width: 360px; margin: auto; padding: 16px 18px; display: grid; gap: 10px;
background: #fff; border-radius: 16px; box-shadow: 0 8px 24px rgba(6, 95, 70, .12); accent-color: #059669; }
h2 { margin: 0; font-size: 18px; }
label { display: grid; gap: 4px; font-size: 14px; }
input, select { font: inherit; padding: 8px 12px; border: 1px solid #d1d5db; border-radius: 10px; }
input:focus, select:focus { outline: 3px solid #a7f3d0; border-color: #059669; }
fieldset { margin: 0; border: 1px solid #d1d5db; border-radius: 10px; display: flex; gap: 16px; font-size: 14px; }
legend { padding: 0 6px; }
.check { display: flex; align-items: center; gap: 8px; }
button { font: inherit; font-weight: 700; padding: 10px; border: 0; border-radius: 10px; background: #059669; color: #fff; }
</style>
</head>
<body>
<form>
<h2>ثبتنام در کارگاه داستاننویسی</h2>
<label>نام و نام خانوادگی <input name="name" required></label>
<label>ایمیل <input type="email" name="email" placeholder="you@example.com" dir="ltr" required></label>
<label>سطح شما
<select name="level"><option>مبتدی</option><option>آشنا با داستان کوتاه</option></select>
</label>
<fieldset>
<legend>نوبت</legend>
<label class="check"><input type="radio" name="time" checked> صبح</label>
<label class="check"><input type="radio" name="time"> عصر</label>
</fieldset>
<label class="check"><input type="checkbox" required> قوانین کارگاه را خواندهام.</label>
<button>ثبتنام</button>
</form>
</body>
</html>
یک جدول معنایی با عنوان و سرستون. ردیفهای زوج رنگ دیگری دارند و ردیف زیر نشانگر پررنگ میشود.
<!doctype html>
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8">
<style>
body { margin: 0; padding: 20px; font-family: system-ui, sans-serif; background: #fffbeb; color: #292524; }
table { width: 100%; border-collapse: collapse; background: #fff; border-radius: 12px; overflow: hidden;
box-shadow: 0 4px 16px rgba(120, 53, 15, .1); font-size: 14px; }
caption { text-align: start; font-weight: 800; font-size: 17px; margin-bottom: 10px; }
th, td { padding: 10px 12px; text-align: start; }
thead th { background: #92400e; color: #fff; font-weight: 600; }
tbody tr:nth-child(even) { background: #fef3c7; }
tbody tr:hover { background: #fde68a; }
.tag { padding: 3px 10px; border-radius: 999px; font-size: 12px; background: #dcfce7; color: #166534; }
.tag.full { background: #fee2e2; color: #991b1b; }
td:nth-child(3), .tag { white-space: nowrap; }
@media (max-width: 380px) { body { padding: 12px; } th, td { padding: 8px 6px; } }
</style>
</head>
<body>
<table>
<caption>کارگاههای این هفته</caption>
<thead>
<tr><th scope="col">روز</th><th scope="col">کارگاه</th><th scope="col">ساعت</th><th scope="col">ظرفیت</th></tr>
</thead>
<tbody>
<tr><td>شنبه</td><td>داستاننویسی</td><td>۱۷ تا ۱۹</td><td><span class="tag">۴ جای خالی</span></td></tr>
<tr><td>دوشنبه</td><td>دمآوری قهوه</td><td>۱۰ تا ۱۲</td><td><span class="tag full">تکمیل</span></td></tr>
<tr><td>سهشنبه</td><td>کتابخوانی کودک</td><td>۱۶ تا ۱۷</td><td><span class="tag">۹ جای خالی</span></td></tr>
<tr><td>پنجشنبه</td><td>خوشنویسی</td><td>۱۸ تا ۲۰</td><td><span class="tag">۲ جای خالی</span></td></tr>
</tbody>
</table>
</body>
</html>
یک کارت هدیهٔ رنگی که فقط با CSS ساخته شده است: پسزمینهٔ گرادیانی، گوشههای گرد، سایهٔ نرم و یک دایرهٔ نیمهشفاف برای برق کارت.
<!doctype html>
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8">
<style>
body { margin: 0; min-height: 100vh; display: grid; place-items: center;
font-family: system-ui, sans-serif; background: #f1f5f9; }
.card { position: relative; overflow: hidden; box-sizing: border-box; width: 300px;
padding: 22px 24px; border-radius: 20px; color: #fff;
background: linear-gradient(135deg, #7c3aed, #db2777 55%, #f59e0b);
box-shadow: 0 18px 40px -12px rgba(124, 58, 237, .55); }
.card::before { content: ""; position: absolute; width: 220px; height: 220px; border-radius: 50%;
inset-block-start: -110px; inset-inline-start: -60px; background: rgba(255, 255, 255, .18); }
.brand { font-weight: 800; letter-spacing: .5px; }
.chip { width: 42px; height: 30px; margin: 22px 0 14px; border-radius: 7px;
background: linear-gradient(135deg, #fde68a, #d97706); }
.amount { font-size: 26px; font-weight: 800; }
.amount small { font-size: 14px; font-weight: 500; opacity: .85; }
.code { margin-top: 14px; font-family: ui-monospace, monospace; direction: ltr; text-align: end;
letter-spacing: 2px; opacity: .9; }
</style>
</head>
<body>
<div class="card">
<div class="brand">کارت هدیهٔ کافهکتاب</div>
<div class="chip"></div>
<div class="amount">۵۰۰٬۰۰۰ <small>تومان</small></div>
<div class="code">GIFT 2026 0815</div>
</div>
</body>
</html>
نوار بالای سایت با لوگو، منو و دکمهٔ رزرو، و زیر آن تیتری با رنگ گرادیانی. در صفحهٔ باریک منو پنهان میشود و دکمه میماند.
<!doctype html>
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8">
<style>
* { box-sizing: border-box; margin: 0; }
body { font-family: system-ui, sans-serif; color: #e2e8f0; min-height: 100vh;
background: radial-gradient(circle at 20% 0%, #1e3a8a, #0f172a 60%); }
nav { display: flex; align-items: center; gap: 20px; padding: 16px 24px; }
.logo { font-weight: 800; font-size: 20px; color: #fff; }
.logo span { color: #fbbf24; }
ul { display: flex; gap: 18px; list-style: none; padding: 0; margin-inline-start: auto; }
a { color: #cbd5e1; text-decoration: none; font-size: 14px; }
.cta { background: #fbbf24; color: #1c1917; padding: 8px 16px; border-radius: 999px; font-weight: 700; }
header { text-align: center; padding: 28px 24px 40px; }
h1 { font-size: 30px; line-height: 1.4; color: transparent;
background: linear-gradient(90deg, #fde68a, #f472b6); -webkit-background-clip: text; background-clip: text; }
p { margin-top: 8px; color: #94a3b8; }
@media (max-width: 400px) { ul { display: none; } .cta { margin-inline-start: auto; } }
</style>
</head>
<body>
<nav>
<div class="logo">کافه<span>کتاب</span></div>
<ul>
<li><a href="#">منو</a></li>
<li><a href="#">کتابها</a></li>
<li><a href="#">تماس</a></li>
</ul>
<a class="cta" href="#">رزرو میز</a>
</nav>
<header>
<h1>قهوهٔ تازه، کتاب خوب</h1>
<p>هر روز از ساعت ۸ صبح تا ۱۱ شب</p>
</header>
</body>
</html>
چیدمان یک داشبورد با grid-template-areas: نوار کناری، سربرگ و بخش اصلی. کارتهای آمار در سه ستون برابرند و نمودار هفته زیر همهٔ آنها کشیده میشود.
<!doctype html>
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8">
<style>
body { margin: 0; min-height: 100vh; font-family: system-ui, sans-serif; background: #f1f5f9; color: #0f172a;
display: grid; grid-template-columns: 100px 1fr; grid-template-rows: auto 1fr;
grid-template-areas: "side head" "side main"; }
header { grid-area: head; padding: 14px 16px; font-weight: 800; background: #fff; }
aside { grid-area: side; background: #1e293b; color: #cbd5e1; padding: 12px 10px; font-size: 14px; }
aside p { margin: 0 0 8px; padding: 6px 10px; border-radius: 8px; }
aside .on { background: #334155; color: #fff; }
main { grid-area: main; padding: 14px; display: grid; gap: 10px; align-content: start;
grid-template-columns: repeat(3, 1fr); }
.card { background: #fff; border-radius: 12px; padding: 10px 12px; box-shadow: 0 1px 3px rgba(15, 23, 42, .1); }
.card span { display: block; font-size: 12px; color: #64748b; }
.card b { font-size: 19px; }
.chart { grid-column: 1 / -1; }
.bars { display: flex; align-items: flex-end; gap: 8px; height: 80px; margin-top: 8px; }
.bars i { flex: 1; border-radius: 6px 6px 0 0; background: linear-gradient(#60a5fa, #2563eb); }
@media (max-width: 380px) { body { grid-template-columns: 80px 1fr; } }
</style>
</head>
<body>
<header>داشبورد کافهکتاب</header>
<aside>
<p class="on">امروز</p>
<p>سفارشها</p>
<p>کتابها</p>
</aside>
<main>
<div class="card"><span>سفارشها</span><b>۴۸</b></div>
<div class="card"><span>فروش کتاب</span><b>۳۱</b></div>
<div class="card"><span>رزرو میز</span><b>۱۲</b></div>
<div class="card chart"><span>فروش این هفته</span>
<div class="bars">
<i style="height: 45%"></i><i style="height: 60%"></i><i style="height: 38%"></i><i style="height: 72%"></i>
<i style="height: 55%"></i><i style="height: 90%"></i><i style="height: 100%"></i>
</div>
</div>
</main>
</body>
</html>
مراحل یک سفارش با شمارهٔ فارسی و خط پیشرفت. شمارهها را شمارندهٔ CSS میگذارد و مرحلهٔ فعلی آرام میتپد.
<!doctype html>
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8">
<style>
:root { --done: #16a34a; --todo: #d1d5db; --size: 34px; }
body { margin: 0; padding: 24px 16px; font-family: system-ui, sans-serif; background: #f0fdf4; color: #14532d; }
h2 { margin: 0 0 22px; font-size: 17px; }
ol { list-style: none; padding: 0; margin: 0; display: flex; counter-reset: step; }
li { flex: 1; position: relative; text-align: center; font-size: 13px; counter-increment: step; }
li::before { content: counter(step, persian); position: relative; z-index: 1;
display: grid; place-items: center; width: var(--size); height: var(--size); margin: 0 auto 8px;
border-radius: 50%; background: var(--todo); color: #fff; font-weight: 700; }
li::after { content: ""; position: absolute; inset-block-start: calc(var(--size) / 2 - 2px);
inset-inline-start: 50%; width: 100%; height: 4px; background: var(--todo); }
li:last-child::after { display: none; }
.done::before, .done::after, .now::before { background: var(--done); }
.now::before { animation: pulse 1.6s ease-out infinite; }
@keyframes pulse { from { box-shadow: 0 0 0 0 rgba(22, 163, 74, .6); } to { box-shadow: 0 0 0 12px rgba(22, 163, 74, 0); } }
.eta { display: inline-block; margin-top: 22px; padding: 6px 14px; border-radius: 999px; background: #dcfce7; font-size: 13px; }
@media (prefers-reduced-motion: reduce) { .now::before { animation: none; } }
</style>
</head>
<body>
<h2>سفارش شما در راه است</h2>
<ol>
<li class="done">ثبت سفارش</li>
<li class="done">آمادهسازی</li>
<li class="now">ارسال</li>
<li>تحویل</li>
</ol>
<p class="eta">تحویل: فردا، ساعت ۱۰ تا ۱۲</p>
</body>
</html>
هر درس یک مفهوم را با مثال توضیح میدهد و یک کار مشخص از شما میخواهد.
پیشنمایش زنده، صفحهای را که میسازید با هر تغییر کد همان لحظه نشان میدهد.
داور دوره کد شما را میخواند و بررسی میکند که تگ، کلاس و ویژگی لازم سر جایش باشد. اگر گیر کردید، راهنمای همان تمرین کمکتان میکند.
۲۷ سرفصل، ۱۷۷ درس، ۱۳۸ تمرین
درسهای اول رایگان است و برای شروع پرداختی لازم نیست. هر وقت خواستید ادامه دهید، همین دوره را بخرید یا با اشتراک پرو همهٔ دورهها را باز کنید.
۱۲ درس ابتدایی رایگان است. برای ادامه، اشتراک بگیرید یا دوره را بخرید.
بدون نیاز به پرداخت مبلغی برای شروع
اگر میخواهید طراحی سایت را از پایه یاد بگیرید و تاکنون کدی ننوشتهاید.
اگر طرح صفحه را در ابزار طراحی میکشید و میخواهید خودتان آن را به صفحهٔ وب تبدیل کنید.
HTML و CSS قدم اول مسیر برنامهنویسی فرانتاند است و در هر پروژهٔ وب به کارتان میآید.
پیشنیاز: یک رایانه و یک مرورگر. تجربهٔ برنامهنویسی لازم نیست.
اولین صفحهٔ وبتان را همین امروز در مرورگر بسازید. شروع رایگان است و در کمتر از دو دقیقه وارد محیط یادگیری میشوید.