שיטות עבודה מומלצות

ארגון קוד CSS

סדר הגיוני

.element {
    /* 1. מיקום */
    position: relative;
    top: 0;
    z-index: 1;

    /* 2. תצוגה */
    display: flex;

    /* 3. מידות */
    width: 100%;
    height: auto;

    /* 4. Box Model */
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;

    /* 5. רקע */
    background: white;

    /* 6. טיפוגרפיה */
    font-size: 16px;
    color: #333;

    /* 7. אנימציות */
    transition: all 0.3s ease;
}

קבצים נפרדים

styles/
├── base/
│   ├── reset.css
│   └── typography.css
├── components/
│   ├── buttons.css
│   ├── cards.css
│   └── forms.css
├── layout/
│   ├── header.css
│   ├── footer.css
│   └── grid.css
└── main.css

מתודולוגיית BEM

Block Element Modifier - שמות מחלקות ברורים:

/* Block */
.card { }

/* Element (עם __) */
.card__header { }
.card__body { }
.card__footer { }

/* Modifier (עם --) */
.card--featured { }
.card--small { }
.card__button--primary { }
<div class="card card--featured">
    <div class="card__header">כותרת</div>
    <div class="card__body">תוכן</div>
    <button class="card__button card__button--primary">לחץ</button>
</div>

CSS Variables

:root {
    /* צבעים */
    --color-primary: #3498db;
    --color-secondary: #2ecc71;
    --color-text: #333;
    --color-bg: #fff;

    /* גדלים */
    --spacing-sm: 8px;
    --spacing-md: 16px;
    --spacing-lg: 32px;

    /* גופנים */
    --font-family: 'Heebo', sans-serif;
    --font-size-base: 16px;

    /* צללים */
    --shadow-sm: 0 2px 4px rgba(0,0,0,0.1);
    --shadow-md: 0 4px 8px rgba(0,0,0,0.15);
}

.button {
    background: var(--color-primary);
    padding: var(--spacing-sm) var(--spacing-md);
    box-shadow: var(--shadow-sm);
}

ביצועים

תכונות לאנימציה

/* מהיר (GPU) */
transform: translateX(100px);
opacity: 0.5;

/* איטי (הימנעו) */
left: 100px;
width: 200px;

הימנעו מ-!important

/* לא מומלץ */
.text { color: red !important; }

/* מומלץ - סלקטור ספציפי יותר */
.section .text { color: red; }

נגישות

/* פוקוס ברור */
:focus {
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
}

/* כיבוד העדפות משתמש */
@media (prefers-reduced-motion: reduce) {
    * {
        animation-duration: 0.01ms !important;
        transition-duration: 0.01ms !important;
    }
}

/* קונטרסט מספיק */
.text {
    color: #333; /* לא אפור בהיר מדי על לבן */
}

Reset בסיסי

*, *::before, *::after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

html {
    font-size: 16px;
}

body {
    font-family: var(--font-family);
    line-height: 1.6;
    color: var(--color-text);
}

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

a {
    text-decoration: none;
    color: inherit;
}

button {
    cursor: pointer;
    border: none;
    background: none;
    font: inherit;
}

ul, ol {
    list-style: none;
}

כללי זהב

כלל הסבר
Mobile First התחילו ממובייל והרחיבו
DRY Don't Repeat Yourself
Specificity נמוכה השתמשו במחלקות, לא ID
שמות משמעותיים .nav-link לא .blue-text
הערות תעדו קוד מורכב
Variables לצבעים וגדלים חוזרים

🎉 סיום הקורס! חזרו ל-README

בדקו את עצמכם

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

  1. למה להימנע מ-!important?

    1. הוא עובד רק ב-Chrome
    2. הוא איטי
    3. הוא שובר את סדר הספציפיות, ומוביל למלחמות !important
    4. הוא לא עובד
    הצגת התשובה

    תשובה ג. עדיף לסדר את הסלקטורים נכון מאשר לכפות.

  2. למה כדאי להשתמש במשתני CSS (--main-color)?

    1. אין סיבה
    2. הם מהירים יותר
    3. ערך אחד במקום אחד: שינוי צבע המותג או מצב כהה בשורה אחת
    4. הם חובה
    הצגת התשובה

    תשובה ג. Custom Properties מאפשרים עיצוב עקבי וערכות נושא.