CSS (גיליונות סגנון מדורגים – Cascading Style Sheets) היא השפה ששולטת במראה של אתרי אינטרנט. בעוד ש-HTML מגדיר את המבנה והתוכן של עמוד, CSS אחראית על כל מה שוויזואלי – צבעים, גופנים, מרווחים, פריסות ואנימציות.
במדריך זה אלווה אתכם דרך כל מושג מרכזי ב-CSS מהיסודות. בין אם אתם כותבים את שורת ה-CSS הראשונה שלכם או משלימים פערים בידע הקיים, תמצאו כאן הסברים ברורים ודוגמאות מעשיות לכל נושא.
מה זה CSS?
CSS היא שפת עיצוב המאפשרת להגדיר באמצעות חוקים את ההצגה של מסמכי HTML או XML. היא שולטת במראה של אלמנטים בעמוד האינטרנט על ידי יישום סגנונות כמו צבע, גודל, מרווח ופריסה.
CSS מאפשר למפתחים להפריד בין התוכן (HTML) לבין העיצוב (CSS), מה שהופך את התחזוקה של אתרים לפשוטה יותר ומאפשר סקלאביליות.
הנה התחביר הבסיסי של CSS:
selector {
property: value;
}
לכלל CSS יש שלושה חלקים. ה-selector (סלקטור) אומר לדפדפן איזה אלמנט HTML לעצב. ה-property (תכונה) היא ההיבט שאתם רוצים לשנות (כמו צבע או גודל גופן). ה-value (ערך) הוא מה שאתם רוצים להגדיר.
ניתן להוסיף מספר תכונות בתוך אותו כלל, כל אחת בשורה נפרדת ומסתיימת בנקודה-פסיק:
p {
color: blue;
font-size: 16px;
text-align: center;
}
כלל זה מטרגט כל אלמנט <p> בעמוד והופך את הטקסט לכחול, בגודל 16 פיקסלים וממורכז.
הערות ב-CSS
הערות מאפשרות לכם להשאיר הסברים בקוד ה-CSS שהדפדפן מתעלם מהם. הן מתחילות ב-/* ומסתיימות ב-*/:
/* זו הערה - הדפדפן ידלג עליה */
p {
color: blue; /* ניתן גם להוסיף הערה בתוך שורה */
}
השתמשו בהערות כדי להסביר למה כתבתם כלל מסוים, לא מה הוא עושה. זה עוזר לכם (ולאחרים) להבין את הקוד בהמשך.
איך להוסיף CSS ל-HTML
ישנן שלוש דרכים להחיל CSS על עמוד HTML. הבנת ההבדל ביניהן חשובה מכיוון שהיא משפיעה על האופן שבו אתם מארגנים ומתחזקים את הקוד.
1. CSS מוטבע (Inline)
CSS מוטבע נכתב ישירות על אלמנט HTML באמצעות מאפיין style. הוא משפיע רק על אותו אלמנט בודד:
<p style="color: red; font-size: 18px;">פסקה זו אדומה.</p>
סגנונות מוטבעים שימושיים לשינויים מהירים וחד-פעמיים, אך קשים לתחזוקה. אם תרצו לשנות את הצבע של 50 פסקאות, תצטרכו לערוך כל אחת בנפרד.
2. CSS פנימי (Internal)
CSS פנימי ממוקם בתוך תג <style> בחלק <head> של קובץ ה-HTML. הוא חל על כל האלמנטים התואמים בעמוד זה:
<head>
<style>
p {
color: blue;
font-size: 16px;
}
</style>
</head>
זה עדיף על סגנונות מוטבעים מכיוון שאתם מגדירים את הכלל פעם אחת והוא חל בכל מקום בעמוד. עם זאת, הסגנונות עובדים רק בקובץ HTML הבודד הזה.
3. CSS חיצוני (External) – מומלץ
CSS חיצוני נמצא בקובץ .css נפרד שמקושר ל-HTML באמצעות תג <link>. זוהי הגישה המומלצת לפרויקטים אמיתיים:
<head>
<link rel="stylesheet" href="styles.css">
</head>
ובקובץ styles.css:
p {
color: blue;
font-size: 16px;
}
קובצי CSS חיצוניים שומרים על ה-HTML נקי ומאפשרים לכם לשתף את אותם סגנונות בכל עמודי האתר. שנו את קובץ ה-CSS פעם אחת, וכל העמודים מתעדכנים אוטומטית.
לכל דבר מעבר לניסוי מהיר, השתמשו ב-CSS חיצוני. זה שומר על הפרדה בין ה-HTML ל-CSS, מקל על תחזוקת הקוד ומאפשר לדפדפנים לשמור את קובץ ה-CSS במטמון לטעינה מהירה יותר.
דוגמה:
בואו ניישם כמה חוקי CSS בסיסיים על אלמנט מסוג פסקה (<p>):
<!DOCTYPE html>
<html lang="he">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
p {
color: blue;
font-size: 16px;
text-align: center;
}
</style>
</head>
<body>
<p>זו פסקה מעוצבת!</p>
</body>
</html>
סלקטורים ב- CSS
סלקטורים ב- CSS משמשים לבחירת HTML Elements והחלת סגנונות עליהם. קיימים מספר סוגי סלקטורים בהם ניתן להשתמש:
1. סלקטור אוניברסלי (Universal Selector)
* {
margin: 0;
padding: 0;
}
סלקטור זה מחיל CSS על כל האלמנטים בעמוד.
2. סלקטור של אלמנט (Element Selector)
h1 {
font-size: 24px;
color: green;
}
סלקטור זה מחיל CSS על אלמנט HTML מסוים (לדוגמה, <h1>).
3. סלקטור של מחלקה (Class Selector)
.box {
background-color: lightgray;
padding: 10px;
}
סלקטורים של מחלקה מכוונים לאלמנטים שיש להם מאפיין class ספציפי.
4. סלקטור של מזהה (ID Selector)
#header {
background-color: black;
color: white;
padding: 15px;
}
סלקטור של מזהה (ID) מכוונים לאלמנטים עם מזהה מסויים. אלו סלקטורים ספציפיים יותר מסלקטורים של מחלקה. (אסביר בהרחבה על CSS specificity בהמשך הפוסט).
5. סלקטורים מקובצים
ניתן להחיל את אותו סגנון על מספר סלקטורים באופן הבא:
h1, h2, p {
font-family: Arial, sans-serif;
}
תכונות CSS
תכונות CSS הן המאפיין המרכזי הקובע כיצד יוצגו אלמנטים. בואו נחקור כמה תכונות CSS בסיסיות:
1. צבעים
ניתן להגדיר צבעים באמצעות שמות צבעים, HEX (קודים הקסדצימליים), RGB, או ערכי HSL.
p {
color: #ff5733; /* HEX */
background-color: rgb(255, 255, 255); /* RGB */
}
2. גופנים (fonts)
תכונות הגופן שולטות במראה הטקסט בעמוד.
body {
font-family: Arial, sans-serif;
font-size: 18px;
font-weight: bold;
}
3. מסגרת (borders)
התכונה border מגדירה את הסגנון, הרוחב והצבע של מסגרת האלמנט.
div {
border: 1px solid black;
border-radius: 5px;
}
4. ״ריפוד״ ומרווח (padding & margin)
padding שולט במרווח בתוך האלמנט, בעוד ש margin שולט במרווח שמחוץ לו.
div {
padding: 20px;
margin: 30px;
}
למשל, אם נקח אלמנט במימדים 120×40 פיקסלים ונגדיר לו ריפוד של 20px, מסגרת של 2px ומרווח של 10px ייראה כך:

5. רקעים
תכונות רקע משמשות לעיצוב הרקע של אלמנט.
body {
background-color: #f0f0f0;
background-image: url('background.jpg');
background-size: cover;
background-position: center;
}
6. תכונות טקסט
CSS נותן לכם שליטה מדויקת על אופן הצגת הטקסט מעבר לגופן ולצבע:
p {
text-align: center; /* left, center, right, justify */
text-decoration: underline; /* none, underline, line-through */
text-transform: uppercase; /* none, uppercase, lowercase, capitalize */
line-height: 1.6; /* שולט במרווח בין שורות */
letter-spacing: 1px; /* מרווח בין תווים */
}
התכונה line-height חשובה במיוחד לקריאות. ערך בין 1.4 ל-1.8 נוח בדרך כלל עבור טקסט גוף.
7. רוחב וגובה
התכונות width ו-height מגדירות את גודל אזור התוכן של אלמנט:
.box {
width: 300px;
height: 200px;
}
ניתן גם להגדיר מגבלות באמצעות min-width, max-width, min-height ו-max-height. אלו שימושיים לעיצובים רספונסיביים שבהם אתם רוצים שאלמנט יהיה גמיש אך לא קטן או גדול מדי:
.container {
width: 100%; /* תופס את מלוא רוחב ההורה */
max-width: 1200px; /* אך לעולם לא רחב מ-1200px */
}
8. שקיפות (Opacity)
התכונה opacity שולטת ברמת השקיפות של אלמנט. ערך של 1 משמעו גלוי לחלוטין, ו-0 משמעו בלתי נראה לחלוטין:
.faded {
opacity: 0.5; /* שקוף ב-50% */
}
יש לציין כי opacity משפיע על האלמנט כולו ועל כל הילדים שלו. אם אתם רוצים רק רקע שקוף למחצה, השתמשו בערך צבע מסוג rgba או hsla במקום:
.overlay {
background-color: rgba(0, 0, 0, 0.5); /* שחור שקוף למחצה */
}
9. גלישה (Overflow)
התכונה overflow שולטת במה שקורה כאשר התוכן גדול מדי עבור המכיל שלו:
.box {
width: 200px;
height: 100px;
overflow: hidden; /* חותך תוכן שגולש */
}
הערכים הנפוצים ביותר הם:
visible(ברירת מחדל): התוכן גולש מחוץ לקופסה.hidden: התוכן נחתך ואינו נראה.scroll: מציג תמיד פסי גלילה.auto: מציג פסי גלילה רק כשצריך.
יחידות מידה ב-CSS
כל ערך גודל ב-CSS צריך יחידת מידה. בחירת היחידה הנכונה חשובה לנגישות ולעיצוב רספונסיבי. הנה היחידות הנפוצות ביותר:
יחידות מוחלטות
px (פיקסלים) היא היחידה המוחלטת הנפוצה ביותר. פיקסל אחד הוא גודל קבוע על המסך. השתמשו בו עבור מסגרות, צלליות ופרטים קטנים שבהם אתם רוצים ערך מדויק שלא משתנה:
border: 1px solid black;
font-size: 16px;
יחידות יחסיות
יחידות יחסיות מתאימות את עצמן על בסיס משהו אחר, מה שהופך אותן לאידיאליות לעיצובים רספונסיביים:
% (אחוזים) יחסי לאלמנט ההורה. אם ההורה ברוחב 800px, ילד עם width: 50% יהיה ברוחב 400px:
.child {
width: 50%; /* חצי מרוחב ההורה */
}
em יחסי לגודל הגופן של האלמנט הנוכחי. אם גודל הגופן של האלמנט הוא 16px, אז 1em שווה ל-16px. שימושי עבור ריפוד ומרווחים שצריכים להתאים לגודל הטקסט:
.button {
font-size: 16px;
padding: 0.5em 1em; /* 8px למעלה/למטה, 16px שמאל/ימין */
}
rem (root em) יחסי לגודל הגופן של אלמנט השורש <html> (בדרך כלל 16px כברירת מחדל). בניגוד ל-em, הוא לא מצטבר כשאלמנטים מקוננים, מה שהופך אותו לצפוי יותר:
h1 {
font-size: 2rem; /* 32px אם השורש הוא 16px */
margin-bottom: 1rem; /* 16px */
}
vh ו-vw מייצגים גובה ורוחב ה-viewport (אזור התצוגה של הדפדפן). 1vh שווה ל-1% מגובה חלון הדפדפן. אלו מצוינים עבור אזורים במסך מלא:
.hero {
height: 100vh; /* גובה מסך מלא */
width: 100vw; /* רוחב מסך מלא */
}
כלל אצבע טוב: השתמשו ב-
remלגדלי גופנים, ב-pxלמסגרות וצלליות, ב-%לרוחבים, וב-vh/vwלפריסות במסך מלא.
מודל הקופסה (Box Model)
מודל הקופסה הוא אחד המושגים החשובים ביותר ב-CSS. כל אלמנט בעמוד מטופל כקופסה מלבנית המורכבת מארבע שכבות, מבפנים החוצה:
- Content (תוכן): הטקסט, התמונה או התוכן בפועל בתוך האלמנט.
- Padding (ריפוד): מרווח בין התוכן למסגרת. הריפוד נמצא בתוך האלמנט.
- Border (מסגרת): קו סביב הריפוד (והתוכן).
- Margin (מרווח): מרווח מחוץ למסגרת שמפריד בין האלמנט לאלמנטים אחרים.
div {
width: 200px;
padding: 10px;
border: 2px solid black;
margin: 20px;
}
עם ההתנהגות ברירת המחדל, הרוחב הכולל של אלמנט זה אינו 200px. הוא למעשה 200 (תוכן) + 10 + 10 (ריפוד שמאל וימין) + 2 + 2 (מסגרת שמאל וימין) = 224px. המרווח מוסיף מרחב מחוץ לאלמנט אך לא משפיע על הגודל שלו עצמו.
החישוב הזה יכול לבלבל, ולכן רוב המפתחים משנים את ההתנהגות ברירת המחדל.
התכונה Box-Sizing
כברירת מחדל, width ו-height חלים רק על אזור התוכן. ריפוד ומסגרת מתווספים מעל, מה שהופך אלמנטים לרחבים יותר ממה שציפיתם.
התכונה box-sizing: border-box משנה זאת כך ש-width ו-height כוללים את הריפוד והמסגרת. אם תגדירו width: 200px, האלמנט יהיה ברוחב 200px בדיוק ללא קשר לכמות הריפוד או המסגרת שתוסיפו:
/* החלת border-box על כל האלמנטים - שיטת עבודה מומלצת */
*, *::before, *::after {
box-sizing: border-box;
}
רוב ה-CSS resets והפריימוורקים מחילים box-sizing: border-box באופן גלובלי. זו נחשבת לשיטת עבודה מומלצת מכיוון שהיא הופכת את קביעת גודל האלמנטים להרבה יותר אינטואיטיבית. אם אתם מתחילים פרויקט חדש, הוסיפו כלל זה בראש קובץ ה-CSS שלכם.
תכונת Display
תכונת display היא אחת התכונות הבסיסיות ביותר ב-CSS. היא שולטת באופן שבו אלמנט מתנהג בפריסת העמוד.
אלמנטים מסוג Block
אלמנטים מסוג block תופסים את מלוא הרוחב הזמין ומתחילים בשורה חדשה. דוגמאות כוללות <div>, <p>, <h1> ו-<section>:
.box {
display: block;
width: 300px;
height: 100px;
background-color: lightblue;
}
גם אם תגדירו רוחב קטן מהמכיל, אלמנט block עדיין כופה ירידת שורה לפניו ואחריו.
אלמנטים מסוג Inline
אלמנטים מסוג inline תופסים רק את הרוחב שהתוכן שלהם דורש ולא מתחילים בשורה חדשה. דוגמאות כוללות <span>, <a> ו-<strong>:
.highlight {
display: inline;
background-color: yellow;
}
אלמנטים מסוג inline מתעלמים מתכונות width ו-height. לא ניתן להגדיר להם גודל ספציפי.
Inline-Block
inline-block משלב את הטוב משני העולמות. האלמנט יושב באותה שורה עם השכנים שלו (כמו inline), אך ניתן להגדיר לו width ו-height (כמו block):
.badge {
display: inline-block;
width: 80px;
height: 30px;
background-color: coral;
text-align: center;
}
None
display: none מסיר את האלמנט מהעמוד לחלוטין. הוא לא תופס מקום ואינו נראה:
.hidden {
display: none;
}
זה שונה מ-visibility: hidden, שמסתיר את האלמנט אך עדיין שומר את המקום שלו בפריסה.
טכניקות פריסה ב-CSS
CSS מציע מספר טכניקות פריסה שיעזרו לכם למקם ולארגן אלמנטים בעמוד. שני הכלים המודרניים החשובים ביותר הם Flexbox ו-Grid.
1. Flexbox
Flexbox הוא מודל פריסה חד-ממדי. הוא מסדר פריטים בשורה או בעמודה ונותן לכם שליטה על האופן שבו הם ממוקמים ומרווחים.
כדי להשתמש ב-Flexbox, הגדירו display: flex על מכיל ההורה. הילדים הישירים הופכים ל-"flex items":
.container {
display: flex;
justify-content: space-between; /* מפזר פריטים עם מרווח שווה ביניהם */
align-items: center; /* ממרכז פריטים אנכית */
}
תכונות ה-Flexbox המרכזיות על המכיל הן:
justify-content: שולט ביישור אופקי (start, center, space-between, space-around).align-items: שולט ביישור אנכי (stretch, center, flex-start, flex-end).flex-direction: קובע את הכיוון –row(ברירת מחדל, אופקי) אוcolumn(אנכי).gap: מוסיף מרווח בין פריטי flex ללא שימוש ב-margin.
2. Grid
CSS Grid הוא מערכת פריסה דו-ממדית. בעוד ש-Flexbox מטפל בכיוון אחד בכל פעם (שורה או עמודה), Grid מאפשר לכם לשלוט גם בשורות וגם בעמודות בו-זמנית:
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
קוד זה ייצור גריד עם שלוש עמודות ברוחב שווה עם מרווח של 10px ביניהן. היחידה 1fr משמעה "חלק אחד מהמרחב הזמין" – כך ששלוש עמודות 1fr מחלקות את המרחב באופן שווה לשלישים.
Grid ו-Flexbox הם כלים חשובים וחזקים המאפשרים פריסה של אלמנטים בעמוד. השתמשו ב-Flexbox לפריסות חד-ממדיות (שורת כרטיסים, סרגל ניווט) ו-Grid לפריסות דו-ממדיות המערבות גם שורות וגם עמודות (פריסת עמוד מלאה, גלריית תמונות).
3. מיקום (Positioning)
תכונת position שולטת באופן שבו אלמנט ממוקם בעמוד. ברגע שמגדירים מיקום שאינו static, ניתן להשתמש ב-top, right, bottom ו-left כדי להזיז אותו:
static(ברירת מחדל): האלמנט עוקב אחר זרימת המסמך הרגילה. תכונות הזזה לא חלות.relative: האלמנט נשאר במיקומו הרגיל, אך ניתן להזיז אותו עם הזזות. אלמנטים אחרים לא מושפעים.absolute: האלמנט מוסר מהזרימה הרגילה וממוקם ביחס לאב הקדמון הממוקם הקרוב ביותר.fixed: האלמנט ממוקם ביחס לחלון הדפדפן ונשאר במקומו כשהמשתמש גולל.sticky: האלמנט מתנהג כמוrelativeעד שהמשתמש גולל מעבר לסף מסוים, ואז הוא "נדבק" במקום כמוfixed.
/* הזזת האלמנט 10px למטה ו-20px ימינה מהמיקום הרגיל שלו */
div {
position: relative;
top: 10px;
left: 20px;
}4. Z-Index
כאשר אלמנטים חופפים (בשל מיקום), תכונת z-index שולטת באיזה מהם מופיע מעל. ערכים גבוהים יותר מוצגים מול ערכים נמוכים יותר:
.popup {
position: absolute;
z-index: 100; /* מופיע מעל אלמנטים עם z-index נמוך יותר */
}
.background {
position: relative;
z-index: 1;
}
תכונת z-index עובדת רק על אלמנטים שיש להם ערך position שאינו static.
עיצוב רספונסיבי
עיצוב רספונסיבי מבטיח שהאתר שלכם ייראה טוב בכל מכשיר, ממחשבים שולחניים ועד טלפונים ניידים. ניתן להשיג עיצוב רספונסיבי באמצעות Media Queries.
דוגמה:
@media (max-width: 768px) {
.container {
flex-direction: column;
}
}
בקוד זה אנו משנים את הפריסה לעמודה אחת כשרוחב המסך קטן מ-768px.
התגית Viewport Meta
תגית ה-meta חשובה מאוד לעיצוב רספונסיבי מכיוון והיא מבטיחה שהעמוד יותאם כראוי במכשירים ניידים.
<meta name="viewport" content="width=device-width, initial-scale=1.0">
למתקדמים ביניכם, תנו מבט בפוסט על עיצוב רספונסיבי ללא Media Queries.
אנימציות ב-CSS
אנימציות ב-CSS מאפשרות הנפשה ואנימציה כאשר משנים סגנון של אלמנטים. ניתן להגדיר keyframes כדי לציין את השינויים שיתרחשו בנקודות שונות במהלך האנימציה.
דוגמה:
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
div {
animation: fadeIn 2s;
}
דוגמה זו מייצרת אנימציית fade-in לאלמנט div באורך 2 שניות.
מעברים (transitions)
transitions ב- CSS מאפשרים להנפיש שינויים בתכונות CSS בצורה חלקה על פני משך זמן נתון.
button {
background-color: blue;
transition: background-color 0.3s;
}
button:hover {
background-color: green;
}
המרות (Transformations)
המרות ב-CSS מאפשרות לסובב, להגדיל, להקטין, להטות או להזיז אלמנטים.
div {
transform: rotate(45deg);
}
דוגמה זו מסובבת את האלמנט div ב-45 מעלות.
פסאודו-מחלקות ופסאודו-אלמנטים
פסאודו-מחלקות ופסאודו-אלמנטים מאפשרים לעצב אלמנטים במצבים מסוימים או חלקים מסוימים של אלמנט. בואו נחקור כמה דוגמאות:
1. דוגמה לפסאודו-מחלקה:
/* שינוי צבע קישור בהובר */
a:hover {
color: red;
}
דוגמה זו משנה את צבע הקישור כאשר המשתמש מרחף מעליו.
2. דוגמה לפסאודו-אלמנט (האות הראשונה):
/* עיצוב האות הראשונה של פסקה */
p::first-letter {
font-size: 24px;
color: red;
font-weight: bold;
}
דוגמה זו מכוונת לאות הראשונה של פסקה ומחילה עליה סגנונות מיוחדים.
3. דוגמה לפסאודו-אלמנטים (לפני ואחרי עם תוכן):
פסאודו-אלמנטים כמו ::before ו-::after מאפשרים להוסיף תוכן לפני או אחרי אלמנט באמצעות התכונה content.
/* הוספת מרכאות לפני blockquote */
blockquote::before {
content: open-quote;
font-size: 32px;
color: gray;
margin-right: 10px;
}
/* הוספת חתימה אחרי blockquote */
blockquote::after {
content: " - John Doe";
font-size: 14px;
color: gray;
display: block;
text-align: right;
margin-top: 10px;
}
בדוגמה זו, מרכאות נוספות לפני הציטוט, וחתימה נוספת לאחר הציטוט באמצעות פסאודו-אלמנטים ::before ו-::after.
דוגמת HTML:
<blockquote>
זהו ציטוט לדוגמה.
</blockquote>
זה יצורמרכאות פתיחה לפני הציטוט וחתימה לאחריו, הודות לשימוש בפסאודו-אלמנטים ::before ו-::after.
הנה פוסט נוסף על אלמנט פסאודו ::marker ב-CSS.
ה-Cascade וירושה (Inheritance)
ה-"C" ב-CSS מייצג "Cascading" (מדורג) – והבנת ה-Cascade היא המפתח להבנה מדוע הסגנונות שלכם לפעמים לא עובדים כצפוי.
ה-Cascade
כאשר מספר כללי CSS מטרגטים את אותו אלמנט ומגדירים את אותה תכונה, הדפדפן צריך להחליט איזה כלל מנצח. הוא משתמש בשלושה גורמים, בסדר עדיפות זה:
- חשיבות: כללים המסומנים ב-
!importantדורסים הכל. - ספציפיות: סלקטורים ספציפיים יותר מנצחים פחות ספציפיים (מוסבר בפירוט בסעיף הבא).
- סדר מקור: אם לשני כללים יש חשיבות וספציפיות שוות, הכלל שמופיע אחרון ב-CSS מנצח.
p {
color: blue;
}
p {
color: red; /* זה מנצח כי הוא מופיע אחרון */
}
ירושה (Inheritance)
חלק מתכונות ה-CSS עוברות בירושה מאלמנטים הורים לילדיהם. המשמעות היא שאם תגדירו תכונה על הורה, הילדים שלו מקבלים אוטומטית את אותו ערך אלא אם הם דורסים אותו.
תכונות שבדרך כלל עוברות בירושה כוללות תכונות הקשורות לטקסט כמו color, font-family, font-size, line-height ו-text-align:
body {
color: #333;
font-family: Arial, sans-serif;
}
/* כל הטקסט בתוך body יורש ערכים אלה אוטומטית.
אין צורך לחזור עליהם בכל אלמנט. */
תכונות הקשורות למודל הקופסה – כמו margin, padding, border, width ו-background – אינן עוברות בירושה. כל אלמנט מתחיל עם ברירות המחדל שלו עבור תכונות אלו.
ספציפיות ב-CSS
ספציפיות ב-CSS קובעת אילו סגנונות יוחלו כאשר מספר כללים מכוונים לאותו אלמנט.
חשבו על ספציפיות כמערכת ניקוד. לכל סוג סלקטור יש משקל שונה, והכלל עם הניקוד הגבוה ביותר מנצח:
- סגנונות אינליין: סגנונות אינליין הם בעלי ספציפיות גבוהה ביותר (לדוגמה,
<h1 style="color: red;">). - ID Selectors: כל סלקטור מסוג ID מוסיף משקל ספציפיות גבוה יותר (לדוגמה,
#header). - סלקטור מחלקה, מאפיינים, פסאודו-מחלקות: תורמים פחות מ-ID אך עדיין יותר מסלקטורים של אלמנט (לדוגמה,
.container,[type="text"],:hover). - סלקטור אלמנט ופסאודו-אלמנטים: בעלי ספציפיות הנמוכה ביותר (לדוגמה,
p,::before).
דרך פשוטה לחשוב על זה: סגנונות מוטבעים מנצחים מזהי ID, מזהי ID מנצחים מחלקות, ומחלקות מנצחות סלקטורי אלמנטים. כאשר לשני סלקטורים יש אותו סוג, זה עם יותר סלקטורים מאותו סוג מנצח.
דוגמה:
/* ספציפיות: (0, 1, 0, 1) */
#header p {
color: blue;
}
/* ספציפיות: (0, 0, 1, 1) */
.header p {
color: red;
}
בדוגמה זו, הכלל הראשון הוא בעל ספציפיות גבוהה יותר בגלל השימוש ב ID Selector, ולכן צבע הטקסט יהיה כחול, למרות שיש כלל מתחרה המכוון לאותו אלמנט עם סלקטור מחלקה.
כיצד לעקוף ספציפיות:
במקרים מסוימים, ייתכן שתרצו לעקוף כללים עם ספציפיות גבוהה. כדי לעשות זאת, תוכלו:
- להשתמש בסלקטורים ספציפיים יותר: הגדילו את הספציפיות של הכלל החדש שלכם כדי להבטיח שהוא יעקוף את הקודם.
- להשתמש ב-
!important: ההצהרה!importantתעקוף כל כלל אחר, אך השתמשו בה במשורה, כי היא יכולה להקשות על תחזוקת ה-CSS.
/* שימוש ב-!important לעקיפת ספציפיות */
p {
color: red !important;
}
עם זאת, השימוש ב-!important צריך להיות הפתרון האחרון. הוא מקשה על ניפוי שגיאות ב-CSS מכיוון שהוא שובר את ה-Cascade הרגיל. אם אתם מוצאים את עצמכם משתמשים ב-!important לעיתים קרובות, זה בדרך כלל סימן שהסלקטורים שלכם צריכים ארגון מחדש.
הבנת ספציפיות עוזרת להימנע מבעיות עיצוב בלתי צפויות, ומאפשרת לכם לכתוב CSS צפוי וקל לתחזוקה. על ידי שימוש בסלקטורים עקביים ופשוטים יותר, תוכלו למנוע קונפליקטים ולהבטיח שהסגנונות שלכם יפעלו כמצופה.
תכונות מתקדמות ב-CSS
CSS מציע גם תכונות מתקדמות לעיצובים מורכבים ואינטראקטיביים יותר. חלקן כוללות משתנים, תכונות מותאמות, וטכניקות פריסה מתקדמות.
1. משתני CSS
משתנים ב-CSS מאפשרים להגדיר ערכים הניתנים לשימוש חוזר לאורך גיליון הסגנונות שלכם.
:root {
--main-color: #3498db;
}
h1 {
color: var(--main-color);
}
משתני CSS הם נושא חשוב. עיינו בפוסט המסביר מהם משתני CSS וכיצד להשתמש בהם.
2. מעברי CSS
מעברים מאפשרים להנפיש את שינויי התכונות לאורך זמן.
button {
background-color: blue;
transition: background-color 0.3s;
}
button:hover {
background-color: green;
}
3. פונקציית repeat ב-CSS
הפונקציה ()repeat מפשטת דפוסים חוזרים, במיוחד בפריסות Grid. היא מאפשרת לחזור על סט ערכים מספר פעמים.
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
דוגמה זו יוצרת שלוש עמודות שוות באמצעות repeat(3, 1fr), כאשר כל עמודה תופסת חלק אחד מהשטח הזמין.
4. תכונות לוגיות ב-CSS (בלעז Logical Properties)
תכונות לוגיות מאפשרות לכם להתמודד עם שינויים בפריסה עבור מצבי כתיבה שונים. לדוגמה, margin-inline-start יכול להחליף את margin-left כדי לתמוך בשפות שנכתבות מימין לשמאל (RTL) וגם משמאל לימין (LTR).
div {
margin-inline-start: 20px;
}
5. Clipping & Masking ב-CSS
חיתוך ומסכות מאפשרים להגדיר אילו חלקים של אלמנט ייראו. המאפיין clip-path מאפשר ליצור צורות מותאמות לאלמנטים.
img {
clip-path: circle(50%);
}
6. mix-blend-mode ב-CSS
המאפיין mix-blend-mode מאפשר לכם לשלוט כיצד התוכן של אלמנט מתמזג עם התוכן של הרקע או של האלמנט ההורה שלו. זה יכול להיות שימושי ליצירת אפקטים ויזואליים מעניינים כמו שכבות או אינטראקציות צבע מורכבות.
דוגמת mix-blend-mode
.image {
mix-blend-mode: multiply;
}
בדוגמה זו, מצב השילוב multiply משלב את הצבעים של התמונה עם הרקע, ויוצר אפקט שכבות.
המאפיין mix-blend-mode תומך במצבי שילוב שונים כמו screen, overlay, ו-difference, ומאפשר עיצובים ויזואליים דינמיים ויצירתיים.
7. הפונקציה calc
פונקציות ב-CSS כמו calc() מאפשרות לבצע חישובים ולהשתמש בערכים דינמיים בגיליונות הסגנונות שלכם.
דוגמת calc()
div {
width: calc(100% - 50px);
}
שיטות עבודה מומלצות לכתיבת CSS
כתיבת CSS יעיל וניתן לתחזוקה היא חיונית להצלחה ארוכת טווח של כל פרויקט. הנה כמה שיטות עבודה מומלצות שכדאי לזכור:
1. השתמשו בשמות מחלקות משמעותיים
בחרו שמות מחלקות שמתארים את המטרה של האלמנט ולא את המראה שלו. שמות משמעותיים הופכים את הקוד שלכם לקריא יותר וניתן לתחזוקה.
/* שיטה לא מומלצת: שמות מחלקות כללים ומבוססי מראה */
.red-text {
color: red;
}
/* שיטה מומלצת: שמות מחלקות משמעותיים */
.alert-message {
color: red;
}
בדוגמה השנייה, .alert-message מתאר את המטרה של האלמנט, ולא רק את איך שהוא נראה.
2. הימנעו משימוש ב-IDs לעיצוב
ל-IDs יש ספציפיות גבוהה יותר ממחלקות, מה שהופך את זה לקשה יותר לעקוף את הסגנונות שלהם. עדיף להשתמש במחלקות לצורך עיצוב, כיוון שהן גמישות יותר וניתנות לשימוש חוזר.
/* שיטה לא מומלצת: שימוש ב-IDs לעיצוב */
#header {
background-color: blue;
}
/* שיטה מומלצת: שימוש במחלקות לעיצוב */
.header {
background-color: blue;
}
שימוש במחלקות במקום IDs מקל על שימוש חוזר בעיצובים ועל עקיפתם בעת הצורך ללא בעיות ספציפיות.
3. מזערו שימוש בסגנונות Inline
סגנונות אינליין יכולים להעמיס על ה-HTML שלכם ולהיות קשים יותר לתחזוקה בטווח הארוך. עדיף להפריד את הסגנונות לקבצי CSS חיצוניים.
<button style="background-color: green; color: white;">Click Me</button>
<button class="btn-primary">Click Me</button>
<!-- CSS חיצוני -->
.btn-primary {
background-color: green;
color: white;
}
באמצעות גיליונות סגנונות חיצוניים או סגנונות פנימיים, תוכלו לנהל ולתחזק את ה-CSS שלכם בצורה יעילה יותר.
4. ארגנו את ה-CSS שלכם
קבצו סגנונות קשורים יחד, והשתמשו בהערות כדי להפוך את ה-CSS שלכם לקריא יותר וקל לתחזוקה.
/* שיטה מומלצת: ארגון CSS ושימוש בהערות */
/* סגנונות גלובליים */
body {
font-family: Arial, sans-serif;
}
/* סגנונות ניווט */
.navbar {
background-color: #333;
}
.navbar a {
color: white;
text-decoration: none;
}
/* סגנונות כותרת תחתונה */
.footer {
background-color: #f1f1f1;
padding: 20px;
text-align: center;
}
CSS מאורגן מקל על הניווט, העדכון והתחזוקה ככל שהפרויקט שלכם גדל.
מידע נוסף
להלן כמה שיטות עבודה מומלצות וכלים שיעזרו לכם לכתוב CSS יעיל, תואם לדפדפנים שונים ובעל ביצועים גבוהים.
I. קדם-מעבדי CSS (Sass, LESS)
CSS preprocessors כמו Sass ו-LESS מוסיפים תכונות כמו משתנים, קינון ותכונות נוספות, מה שהופך את ה-CSS לחזק יותר וניתן לתחזוקה.
שימוש ב-Sass
Sass מאפשר לכם לכתוב CSS יעיל יותר באמצעות משתנים וקינון.
// קוד SCSS
$main-color: #3498db;
body {
background-color: $main-color;
}
קוד Sass זה, כאשר מקומפל, הופך ל-CSS רגיל:
body {
background-color: #3498db;
}
II. מסגרות CSS (Bootstrap, Tailwind)
מסגרות CSS כמו Bootstrap ו-Tailwind CSS מספקות מחלקות מוגדרות מראש כדי להקל על עיצוב רספונסיבי ופריסה.
דוגמת Bootstrap
מערכת הרשת של Bootstrap מאפשרת לכם ליצור פריסות רספונסיביות בקלות:
<div class="container">
<div class="row">
<div class="col-md-6">
<p>עמודה 1</p>
</div>
<div class="col-md-6">
<p>עמודה 2</p>
</div>
</div>
</div>
III. CSS Resets ו-Normalize.css
CSS Resets כמו Normalize.css מבטיחים שהדפדפנים יציגו את כל האלמנטים בצורה עקבית יותר, מה שמקל על יצירת אתרים תואמי דפדפנים.
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css">
IV. אופטימיזציה של ביצועי CSS
אופטימיזציה של CSS לביצועים יכולה להאיץ באופן משמעותי את זמן טעינת העמודים. מיניפיקציה של CSS, הסרת סגנונות שלא בשימוש עם PurgeCSS ושימוש בסלקטורים יעילים הן טכניקות נפוצות.
/* CSS ממוזער */
body{margin:0;padding:0;font-family:Arial,sans-serif;}
זהו נושא רחב יותר. עיינו בפוסט על 14 דרכים לאופטימיזציה של CSS לשיפור ביצועים.
V. כלי פיתוח בדפדפנים
רוב הדפדפנים מגיעים עם כלי פיתוח המאפשרים לכם לבדוק ולפתור בעיות ב-CSS. ב-Chrome, תוכלו ללחוץ לחיצה ימנית על כל אלמנט ולבחור "Inspect" כדי לצפות ולערוך את הסגנונות שלו בזמן אמת. זוהי הדרך המהירה ביותר להבין למה אלמנט נראה כפי שהוא נראה ולהתנסות בשינויים לפני שכותבים אותם בקובץ ה-CSS.
שאלות נפוצות
שאלות נפוצות של מתחילים הלומדים CSS:
.box) ניתן לשימוש על מספר אלמנטים והוא הדרך המועדפת לעצב דברים. ID (נבחר עם סולמית, כמו #header) צריך להיות ייחודי בעמוד - רק אלמנט אחד צריך לקבל ID מסוים. ל-ID יש ספציפיות גבוהה יותר מ-class, מה שמקשה על דריסתו. לצורכי עיצוב, השתמשו ב-class.px, em או rem לגדלי גופנים?
rem לגדלי גופנים. הוא יחסי לגודל הגופן של אלמנט השורש (בדרך כלל 16px), כך שהוא מתאים באופן עקבי לכל האתר ומכבד את העדפות גודל הגופן של המשתמש בדפדפן. השתמשו ב-px למסגרות ולפרטים קבועים קטנים. השתמשו ב-em כאשר אתם רוצים שריפוד או מרווחים יתאימו לגודל הגופן של האלמנט עצמו.box-sizing: border-box?
width: 200px, ריפוד ומסגרת מתווספים מעל, מה שהופך את האלמנט לרחב יותר מ-200px. עם box-sizing: border-box, הרוחב כולל ריפוד ומסגרת, כך שהאלמנט יהיה ברוחב 200px בדיוק. רוב המפתחים מחילים זאת באופן גלובלי על כל האלמנטים מכיוון שזה הופך את קביעת הגודל להרבה יותר צפויה.סיכום
CSS היא שפה רחבה ועוצמתית המהווה את הבסיס לעיצוב אתרים מודרני. משימוש בסיסי בעיצוב ועד פריסות ואנימציות מורכבות, שליטה ב-CSS מעניקה לכם שליטה מלאה על המראה והתחושה של הפרויקטים שלכם ברשת.
מדריך זה כיסה את המושגים המרכזיים: איך להוסיף CSS ל-HTML, סלקטורים, תכונות, יחידות מידה, מודל הקופסה, תכונת display, טכניקות פריסה עם Flexbox ו-Grid, עיצוב רספונסיבי, אנימציות, ה-Cascade, ספציפיות ותכונות מתקדמות. הדרך הטובה ביותר ללמוד היא לבנות דברים – התחילו עם עמוד פשוט והתנסו עם כל תכונה עד שתבינו מה היא עושה.

