grid-template-columns,frvahidi vərepeat()ilə tor yaratmaq- Elementləri bir neçə sütuna yaymaq və
grid-template-areasilə səhifə maketi qurmaq - Grid ilə Flexbox arasında seçim etmək
- Media sorğuları və nisbi vahidlərlə «əvvəlcə mobil» adaptiv səhifə yazmaq
Eyni saytı telefonda, planşetdə və geniş monitorda açırsan: kompüterdə məhsullar üç sütunda düzülüb, telefonda isə bir sütunda və heç nə ekrandan kənara çıxmır. Bu, adaptiv dizayndır. Onun əsas alətləri CSS Grid (sətir və sütunlardan ibarət tor) və media sorğularıdır — bu dərsdə hər ikisini öyrənəcəksən.
CSS Grid: sətirlər və sütunlar
display: grid konteyneri tora çevirir. grid-template-columns sütunların sayını və enini verir. Burada xüsusi **fr** vahidi (fraction — pay) işlədilir: 1fr 2fr boş yeri üç paya bölür, birinci sütun bir pay, ikincisi iki pay alır. repeat(3, 1fr) isə 1fr 1fr 1fr-in qısa yazılışıdır. Flexbox-da olduğu kimi, gap xanalar arasında boşluq qoyur.
<style>
body { font-family: system-ui, sans-serif; padding: 12px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.grid div { padding: 16px; text-align: center; background: #fbcfe8; border-radius: 8px; }
.grid .wide { grid-column: span 2; background: #f9a8d4; }
.grid .tall { grid-row: span 2; background: #c4b5fd; }
</style>
<div class="grid">
<div class="wide">1 (span 2 columns)</div>
<div class="tall">2 (span 2 rows)</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>repeat(3, 1fr)-i 1fr 2fr 1fr et və orta sütunun iki dəfə genişləndiyinə bax. Elementlər boş xanaları özləri doldurur: 3 və 4 birinci elementin altındakı yerə düşür.grid-column: span 2 elementi iki sütuna, grid-row: span 2 isə iki sətrə yayır. Səhifənin bütün maketini isə grid-template-areas ilə «şəkil kimi» çəkmək olar: sahələrə ad ver və onları dırnaqlar içində sətir-sətir yerləşdir. Hər element grid-area ilə öz sahəsinə göndərilir.
<style>
body { font-family: system-ui, sans-serif; margin: 0; padding: 12px; }
.page {
display: grid;
grid-template-columns: 140px 1fr;
grid-template-areas:
"header header"
"side main"
"footer footer";
gap: 8px;
}
.page > * { padding: 12px; border-radius: 8px; }
header { grid-area: header; background: #fde68a; }
aside { grid-area: side; background: #bfdbfe; }
main { grid-area: main; background: #e2e8f0; min-height: 90px; }
footer { grid-area: footer; background: #d1fae5; }
</style>
<div class="page">
<header>Header</header>
<aside>Sidebar</aside>
<main>Main content</main>
<footer>Footer</footer>
</div>"side main"-i "main side" et — yan panel sağa keçəcək, HTML isə dəyişməyəcək. Sütunların enini də yerini dəyiş (grid-template-columns: 1fr 140px), yoxsa əsas hissə 140 px-lik dar sütuna düşər. .page > * selektoru .page-in bütün birbaşa uşaqlarını seçir.| Meyar | Flexbox | Grid |
|---|---|---|
| Ölçü | bir istiqamət: sətir və ya sütun | iki istiqamət: sətirlər və sütunlar birlikdə |
| Nəyə əsaslanır | məzmunun ölçüsünə | əvvəlcədən çəkilmiş tora |
| Tipik istifadə | menyu, düymələr sırası, kartın içi | səhifə maketi, qalereya, kart toru |
<style>
body { font-family: system-ui, sans-serif; margin: 0; padding: 12px; background: #0f172a; }
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
gap: 10px;
}
.tile { aspect-ratio: 1; display: flex; justify-content: center; align-items: center;
font-size: 40px; background: #1e293b; border-radius: 12px; }
</style>
<div class="gallery">
<div class="tile">🌊</div><div class="tile">🏔️</div><div class="tile">🌳</div>
<div class="tile">🌅</div><div class="tile">🏜️</div><div class="tile">🌋</div>
<div class="tile">🏝️</div><div class="tile">❄️</div>
</div>110px-i 200px et — sütunlar azalacaq, xanalar böyüyəcək. aspect-ratio: 1 hər xananı kvadrat edir, xananın içində isə emojini Flexbox mərkəzə gətirir.Adaptiv dizayn və media sorğuları
Media sorğusu CSS qaydalarını yalnız şərt ödənəndə tətbiq edir, məsələn, pəncərənin eni müəyyən qiymətdən böyük olanda: @media (min-width: 600px) { … }. Adaptiv səhifə yazmağın müasir üsulu əvvəlcə mobil (mobile-first) yanaşmasıdır: əsas üslubları kiçik ekran üçün yazırsan, sonra min-width sorğuları ilə geniş ekranlar üçün əlavələr edirsən.
<style>
body { font-family: system-ui, sans-serif; margin: 0; padding: 12px; }
h1 { font-size: 1.4rem; color: #7c3aed; }
.cards { display: grid; grid-template-columns: 1fr; gap: 10px; }
.card { padding: 14px; background: #ede9fe; border-radius: 10px; }
@media (min-width: 500px) {
.cards { grid-template-columns: 1fr 1fr; }
}
@media (min-width: 900px) {
.cards { grid-template-columns: repeat(3, 1fr); }
h1 { font-size: 2rem; }
}
</style>
<h1>Mobile first</h1>
<div class="cards">
<div class="card">One</div>
<div class="card">Two</div>
<div class="card">Three</div>
</div>500px-i 1500px et — telefon görünüşü açılacaq.- Hər səhifənin
<head>-ində<meta name="viewport" content="width=device-width, initial-scale=1">olmalıdır. Onsuz telefon brauzeri səhifəni təxminən 980px enində geniş ekran üçün çəkir və kiçildir — media sorğuları gözlənildiyi kimi işləmir. - Sabit
width: 800pxəvəzinəmax-width: 800pxyaz: geniş ekranda blok 800px-dən böyümür, dar ekranda isə sıxılır. - Şəkilləri çevik et:
img { max-width: 100%; height: auto; }— şəkil heç vaxt konteynerindən kənara çıxmır və nisbətini qoruyur. - Şrift ölçüləri üçün
rem, sahələr üçün%,frvəvwkimi nisbi vahidlərdən istifadə et.font-size: clamp(1.5rem, 5vw, 3rem)başlığı ekranla birlikdə böyüdür, amma verilən hədlər daxilində saxlayır.
Cmd+Option+I)F12Cmd+Shift+M)Ctrl+Shift+MƏsas fikirlər
display: gridvəgrid-template-columnstor yaradır;frboş yerin payıdır,repeat(3, 1fr)üç bərabər sütundur.spanelementi bir neçə xanaya yayır;grid-template-areasbütün maketi adlı sahələrlə çəkir.- Flexbox bir istiqamət, Grid iki istiqamət üçündür; onları birlikdə işlətmək normaldır.
- «Əvvəlcə mobil»: əsas üslublar kiçik ekran üçün,
@media (min-width: …)isə geniş ekranlar üçün əlavələrdir. - Viewport meta teqi,
max-width, çevik şəkillər və nisbi vahidlər adaptiv səhifənin əsasıdır.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.
grid-template-columns: 1fr 2fr yazılıb (gap yoxdur). Sütunların eni nə qədərdir?