עיצוב רספונסיבי

מהו עיצוב רספונסיבי?

עיצוב רספונסיבי (Responsive Design) הוא גישה שבה האתר מתאים את עצמו לכל גודל מסך - מטלפון נייד ועד מסך ענק.

📱 Mobile  →  📱 Tablet  →  💻 Laptop  →  🖥️ Desktop

Viewport Meta Tag

חובה! הוסיפו לכל דף HTML:

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
מאפיין משמעות
width=device-width רוחב הדף = רוחב המכשיר
initial-scale=1.0 זום התחלתי 100%

יחידות יחסיות

אחוזים (%)

.container {
    width: 90%;
    max-width: 1200px;
    margin: 0 auto;
}

.sidebar {
    width: 25%;
}

.main-content {
    width: 75%;
}

Viewport Units

.hero {
    height: 100vh;     /* 100% גובה החלון */
    width: 100vw;      /* 100% רוחב החלון */
}

.section {
    min-height: 50vh;
}

.text {
    font-size: 5vw;    /* 5% מרוחב החלון */
}
יחידה משמעות
vw 1% מרוחב ה-viewport
vh 1% מגובה ה-viewport
vmin הקטן מבין vw ו-vh
vmax הגדול מבין vw ו-vh

rem ו-em

html {
    font-size: 16px; /* בסיס */
}

h1 {
    font-size: 2rem;    /* 32px */
}

.card {
    padding: 1.5em;     /* יחסי לגופן של האלמנט */
}

Media Queries

הכלי העיקרי לרספונסיביות:

תחביר בסיסי

@media (condition) {
    /* סגנונות שמופעלים כאשר התנאי מתקיים */
}

לפי רוחב

/* מסכים עד 768px (טלפונים וטאבלטים) */
@media (max-width: 768px) {
    .sidebar {
        display: none;
    }
}

/* מסכים מעל 768px */
@media (min-width: 768px) {
    .container {
        display: flex;
    }
}

/* טווח ספציפי */
@media (min-width: 768px) and (max-width: 1024px) {
    /* טאבלטים */
}

Breakpoints נפוצים

/* Mobile First Approach */

/* ברירת מחדל - מובייל */
.container {
    padding: 15px;
}

/* טאבלט */
@media (min-width: 768px) {
    .container {
        padding: 30px;
    }
}

/* לפטופ */
@media (min-width: 1024px) {
    .container {
        padding: 40px;
        max-width: 1200px;
    }
}

/* דסקטופ גדול */
@media (min-width: 1440px) {
    .container {
        max-width: 1400px;
    }
}

טבלת Breakpoints

שם רוחב מכשירים
xs < 576px טלפונים קטנים
sm ≥ 576px טלפונים
md ≥ 768px טאבלטים
lg ≥ 1024px לפטופים
xl ≥ 1200px דסקטופ
xxl ≥ 1400px מסכים גדולים

Mobile-First vs Desktop-First

Mobile-First (מומלץ) ✅

/* ברירת מחדל: מובייל */
.nav {
    flex-direction: column;
}

/* מסכים גדולים יותר */
@media (min-width: 768px) {
    .nav {
        flex-direction: row;
    }
}

Desktop-First

/* ברירת מחדל: דסקטופ */
.nav {
    flex-direction: row;
}

/* מסכים קטנים יותר */
@media (max-width: 767px) {
    .nav {
        flex-direction: column;
    }
}

תמונות רספונסיביות

תמונה גמישה

img {
    max-width: 100%;
    height: auto;
}

object-fit

.cover-image {
    width: 100%;
    height: 300px;
    object-fit: cover;      /* חותך בצורה יפה */
    object-position: center;
}

srcset ב-HTML

<img 
    src="image-400.jpg"
    srcset="
        image-400.jpg 400w,
        image-800.jpg 800w,
        image-1200.jpg 1200w
    "
    sizes="
        (max-width: 600px) 100vw,
        (max-width: 1200px) 50vw,
        33vw
    "
    alt="תמונה רספונסיבית"
>

Flexbox רספונסיבי

.cards {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
}

.card {
    flex: 1 1 100%; /* מובייל: רוחב מלא */
}

@media (min-width: 600px) {
    .card {
        flex: 1 1 calc(50% - 10px); /* 2 בשורה */
    }
}

@media (min-width: 900px) {
    .card {
        flex: 1 1 calc(33.333% - 14px); /* 3 בשורה */
    }
}

Grid רספונסיבי

אוטומטי עם auto-fit

.grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 20px;
}

עם Media Queries

.grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 20px;
}

@media (min-width: 600px) {
    .grid {
        grid-template-columns: 1fr 1fr;
    }
}

@media (min-width: 900px) {
    .grid {
        grid-template-columns: repeat(3, 1fr);
    }
}

טיפוגרפיה רספונסיבית

clamp()

h1 {
    /* min, preferred, max */
    font-size: clamp(1.5rem, 4vw, 3rem);
}

p {
    font-size: clamp(0.875rem, 2vw, 1.125rem);
}

עם Media Queries

h1 {
    font-size: 1.75rem;
}

@media (min-width: 768px) {
    h1 {
        font-size: 2.5rem;
    }
}

@media (min-width: 1024px) {
    h1 {
        font-size: 3rem;
    }
}

דוגמה מלאה: דף רספונסיבי

/* ===== BASE STYLES (Mobile First) ===== */
* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

body {
    font-family: 'Heebo', sans-serif;
    line-height: 1.6;
}

.container {
    width: 100%;
    padding: 0 15px;
    margin: 0 auto;
}

/* ===== HEADER ===== */
.header {
    padding: 15px 0;
}

.nav {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.nav-links {
    display: none; /* מוסתר במובייל */
}

.menu-toggle {
    display: block;
}

/* ===== HERO ===== */
.hero {
    padding: 40px 0;
    text-align: center;
}

.hero h1 {
    font-size: 1.75rem;
    margin-bottom: 15px;
}

/* ===== CARDS ===== */
.cards {
    display: grid;
    gap: 20px;
}

/* ===== TABLET (768px+) ===== */
@media (min-width: 768px) {
    .container {
        max-width: 720px;
        padding: 0 20px;
    }

    .nav {
        flex-direction: row;
        justify-content: space-between;
        align-items: center;
    }

    .nav-links {
        display: flex;
        gap: 20px;
    }

    .menu-toggle {
        display: none;
    }

    .hero h1 {
        font-size: 2.5rem;
    }

    .cards {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* ===== DESKTOP (1024px+) ===== */
@media (min-width: 1024px) {
    .container {
        max-width: 960px;
    }

    .hero {
        padding: 80px 0;
    }

    .hero h1 {
        font-size: 3rem;
    }

    .cards {
        grid-template-columns: repeat(3, 1fr);
    }
}

/* ===== LARGE DESKTOP (1200px+) ===== */
@media (min-width: 1200px) {
    .container {
        max-width: 1140px;
    }
}

Media Queries נוספים

לפי כיוון מסך

@media (orientation: portrait) {
    /* מסך אנכי */
}

@media (orientation: landscape) {
    /* מסך רוחבי */
}

לפי יכולות

/* מסכים עם hover (לא מובייל) */
@media (hover: hover) {
    .button:hover {
        background: blue;
    }
}

/* מסכי רטינה */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
    /* תמונות ברזולוציה גבוהה */
}

הדפסה

@media print {
    .no-print {
        display: none;
    }

    body {
        font-size: 12pt;
    }
}

סיכום

נושא כלי
Viewport <meta name="viewport">
יחידות %, vw, vh, rem, em
התאמה @media queries
גישה Mobile-First
תמונות max-width: 100%, srcset
פריסה Flexbox, Grid עם auto-fit
טיפוגרפיה clamp()

הבא: אנימציות ומעברים ➡️

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה עושה media query כמו @media (max-width: 600px)?

    1. חוסם טלפונים
    2. מחיל כללים רק כשהמסך ברוחב 600px או פחות
    3. מגדיר גודל תמונה
    4. מקטין את כל הדף
    הצגת התשובה

    תשובה ב. כך מתאימים את הפריסה למסכים קטנים.

  2. בלי איזו שורה העיצוב הרספונסיבי לא יעבוד בטלפון?

    1. <meta charset>
    2. <link rel="icon">
    3. <meta name="viewport" content="width=device-width, initial-scale=1">
    4. <!DOCTYPE html>
    הצגת התשובה

    תשובה ג. בלי viewport הטלפון מציג את הדף כאילו הוא מסך רחב ומקטין הכול.

  3. מה הגישה Mobile First?

    1. להסתיר תוכן בטלפון
    2. לבנות אפליקציה במקום אתר
    3. לכתוב קודם את העיצוב למסך קטן, ולהוסיף עם min-width למסכים גדולים
    4. לבנות רק לטלפונים
    הצגת התשובה

    תשובה ג. הבסיס פשוט ומתאים לטלפון, והמסכים הגדולים מקבלים תוספות.