חיפוש ]

עבודה עם תכונות לוגיות (Logical Properties) ב- CSS

כאדם שמנהל אתר המספק תוכן בשפות הנכתבות משמאל לימין (LTR) ומימין לשמאל (RTL), אני לא יכול לתאר עד כמה התרגשתי כשגיליתי את תכונות ה-CSS הלוגיות (בלעז CSS Logical Properties).

השימוש ב Logical Properties שינה את הדרך שבה אני ניגש לעיצוב layout, במיוחד כשמדובר בהפיכת האתר שלי לפונקציונלי ויעיל בשפות שונות. אותן תכונות לוגיות הפכו את הבנייה של אתר אדפטיבי ורספונסיבי להרבה יותר קלה.

לפני כן, הסתמכתי רבות על תכונות CSS מסורתיות כמו margin-left או padding-right. כעת, ותודות לתכונות הלוגיות, כל זה מטופל באופן דינמי על בסיס אופן הכתיבה של הדף. אין יותר פתרונות עקיפים או קוד כפול רק בכדי לוודא שהעיצוב נראה טוב גם בשפות LTR וגם RTL!

בפוסט זה, אשתף את כל מה שלמדתי על תכונות CSS לוגיות וכיצד הן האיצו את תהליך הפיתוח שלי והפכו אותו למסודר יותר עבור אתרים מרובי-שפות.

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

Logical vs Physical CSS Properties

מהן תכונות CSS לוגיות?

ב-CSS מסורתי, תכונות כמו margin-left או padding-right נקראות ״תכונות פיזיות״ מכיוון והן מתארות מיקום יחסי לקצוות הפיזיים של המסך או של אלמנט. לעומת זאת, תכונות לוגיות מתארות את יחסי המיקום באופן גמיש יותר, וזאת בהתחשב במצב הכתיבה (writing-mode) של המסמך.

לדוגמה, במקום להשתמש ב-margin-left ו-margin-right, אפשר להשתמש ב-margin-inline-start ו-margin-inline-end כדי להתאים את העיצוב לשפות LTR ו-RTL. השימוש בתכונות הלוגיות מבטיח שכאשר כיוון הכתיבה משתנה, העיצוב עדיין יישאר תקין ולא יהיה צורך לבצע שינויים ב-CSS.

דוגמה לתכונות לוגיות מול תכונות פיזיות:


/* תכונות פיזיות */
.element {
    margin-left: 20px;
    margin-right: 10px;
}

/* תכונות לוגיות */
.element {
    margin-inline-start: 20px;
    margin-inline-end: 10px;
}

בדוגמה זו, השימוש ב margin-inline-start ו-margin-inline-end לדאג להתאים את השוליים (margins) אוטומטית לשפות LTR ו-RTL ובכך הופך את ה-CSS שלכם לפלקסבילי יותר.

יתרונות השימוש בתכונות לוגיות

לתכונות הלוגיות יתרונות רבים, במיוחד עבור אתרים שצריכים לתמוך בשפות מרובות או במתווים מורכבים:

  • התאמה לשפה: תכונות לוגיות מתאימות עצמן אוטומטית בהתאם לכיוון הכתיבה של השפה (למשל  LTR או RTL).
  • קוד נקי יותר: במקום לשכפל קוד CSS לכיווני כתיבה שונים, התכונות הלוגיות מספקות פתרון יחיד.
  • התאמה למצב כתיבה: הן מאפשרות ליצור מתווים שתומכים במצבי כתיבה אנכיים כמו יפנית או סינית.
  • הכנה לעתיד: תכונות לוגיות מבטיחות שה-CSS שלכם יהיה מוכן לשינויים עתידיים, כשהמגמות בפיתוח אתרים מתקדמות לעיצובים גמישים יותר.

״תכונות לוגיות מצמצמות את הצורך בקוד כפול והופכות את הטיפול באתרים מרובי שפות להרבה ליעיל יותר.״

בואו נדבר כעת על התכונות המרכזיות של Logical CSS ונבדוק כיצד הן שונות מהמקבילות הפיזיות שלהן:

גודל (ממדים של רוחב וגובה)

הדרך המסורתית להגדיר רוחב וגובה היא עם width ו-height. תכונות לוגיות מספקות את התכונות inline-size ו-block-size שמאפשרות גמישות על בסיס מצב הכתיבה. תכונות אלו מתאימות את עצמן אוטומטית לזרימת הטקסט, בין אם היא אופקית (כמו באנגלית) או אנכית (כמו ביפנית).

תכונות לוגיות לגודל:

  • inline-size: מקבילה ל-width במצבי כתיבה אופקיים אך מתאימה את עצמה במצבי כתיבה אנכיים.
  • block-size: מקבילה ל-height אך מותאמת למצבי כתיבה שונים.

דוגמה:


/* שיטה מסורתית */
.element {
    width: 300px;
    height: 200px;
}

/* שיטה לוגית */
.element {
    inline-size: 300px;
    block-size: 200px;
}

שוליים (Margin)

במקום להשתמש ב-margin-left או margin-right, התכונות הלוגיות מאפשרות מרווחים אינליין שעובדים גם ב-LTR וגם ב-RTL. כמו כן, margin-block-start ו-margin-block-end מטפלים במרווחים אנכיים בצורה לוגית.

תכונות לוגיות למרווח:

  • margin-inline-start: המקבילה הלוגית ל-margin-left.
  • margin-inline-end: המקבילה הלוגית ל-margin-right.
  • margin-block-start: המקבילה הלוגית ל-margin-top.
  • margin-block-end: המקבילה הלוגית ל-margin-bottom.

דוגמה:


/* שיטה מסורתית */
.element {
    margin-left: 20px;
    margin-right: 10px;
}

/* שיטה לוגית */
.element {
    margin-inline-start: 20px;
    margin-inline-end: 10px;
}

״שימוש בתכונות לוגיות למרווח הופך את ה-CSS שלך לגמיש ויעיל יותר, תוך צמצום הצורך בסגנונות שונים לשפות RTL ו-LTR.״

ריווח פנימי (Padding)

הריווח הפנימי פועל בצורה דומה לשוליים כשמשתמשים בתכונות לוגיות. במקום להשתמש ב-padding-left או padding-right, מספקות התכונות לוגיות את padding-inline-start ו-padding-inline-end.

תכונות לוגיות לריווח פנימי:

  • padding-inline-start: המקבילה הלוגית ל-padding-left.
  • padding-inline-end: המקבילה הלוגית ל-padding-right.
  • padding-block-start: המקבילה הלוגית ל-padding-top.
  • padding-block-end: המקבילה הלוגית ל-padding-bottom.

דוגמה:


/* שיטה מסורתית */
.element {
    padding-left: 20px;
    padding-right: 10px;
}

/* שיטה לוגית */
.element {
    padding-inline-start: 20px;
    padding-inline-end: 10px;
}

מיקום אלמנטים (Positioned Elements)

כאשר ממקמים אלמנטים עם top, right, bottom, ו-left, תכונות לוגיות מציעות את השימוש  ב-inset שמבוסס על מצב הכתיבה. השימוש בתכונות לוגיות ל Positions Elements מבטיחות שהמיקום יתאים לזרימת המסמך.

תכונות לוגיות למיקום:

  • inset-inline-start: מקבילה ל-left ב-LTR ו-right ב-RTL.
  • inset-inline-end: מקבילה ל-right ב-LTR ו-left ב-RTL.
  • inset-block-start: מקבילה ל-top.
  • inset-block-end: מקבילה ל-bottom.

דוגמה:


/* שיטה מסורתית */
.element {
    top: 10px;
    left: 20px;
}

/* שיטה לוגית */
.element {
    inset-block-start: 10px;
    inset-inline-start: 20px;
}

מסגרות (Borders)

בדומה למרווחים וריווח פנימי, תכונות לוגיות מאפשרות יישום מסגרות באופן גמיש יותר וזאת באמצעות border-inline-start, border-inline-end, border-block-start, ו-border-block-end. שימוש באלו מבטיח שהמסגרות יתאימו אוטומטית לכיוון הזרימה.

תכונות לוגיות לגבולות:

  • border-inline-start: המקבילה הלוגית ל-border-left.
  • border-inline-end: המקבילה הלוגית ל-border-right.
  • border-block-start: המקבילה הלוגית ל-border-top.
  • border-block-end: המקבילה הלוגית ל-border-bottom.

דוגמה:


/* שיטה מסורתית */
.element {
    border-left: 1px solid black;
    border-top: 1px solid black;
}

/* שיטה לוגית */
.element {
    border-inline-start: 1px solid black;
    border-block-start: 1px solid black;
}

רדיוס מסגרת (Border Radius)

בדיוק כפי שהתכונות הלוגיות פועלות על שוליים, הן גם מתייחסות ל-border-radius, עם תכונות כמו border-start-start-radius ו-border-end-end-radius.

תכונות לוגיות ל- Border Radius:

  • border-start-start-radius: המקבילה הלוגית ל-border-top-left-radius.
  • border-start-end-radius: המקבילה הלוגית ל-border-top-right-radius.
  • border-end-start-radius: המקבילה הלוגית ל-border-bottom-left-radius.
  • border-end-end-radius: המקבילה הלוגית ל-border-bottom-right-radius.

דוגמה:


/* שיטה מסורתית */
.element {
    border-top-left-radius: 10px;
    border-bottom-right-radius: 5px;
}

/* שיטה לוגית */
.element {
    border-start-start-radius: 10px;
    border-end-end-radius: 5px;
}

Floating and Clearing

ניתן אף להשתמש בתכונות לוגיות עבור אלמנטים צפים (float elements). במקום להשתמש ב-float: left או float: right, אפשר להשתמש ב-float: inline-start ו-float: inline-end. באופן דומה ניתן להשתמש ב- clear: inline-start ו-clear: inline-end.

דוגמה:


/* שיטה לוגית */
.element {
    float: inline-start;
    clear: inline-start;
}

יישור טקסט (Text Alignment)

יישור הטקסט יכול גם להתאים למצב הכתיבה. במקום להשתמש ב-text-align: left, ניתן להשתמש ב-text-align: start כך שהוא יתאים אוטומטית לשפות LTR ו-RTL.

דוגמה:


/* שיטה לוגית */
.element {
    text-align: start; /* מיישר שמאלה ב-LTR, ימינה ב-RTL */
}

גלישה (Overflow)

לתכונות הגלישה יש גם כן מקבילות לוגיות. במקום overflow-x ו-overflow-y, אפשר להשתמש ב-overflow-inline ו-overflow-block בכדי לטפל בגלישה על בסיס מצב הכתיבה.

הנה דוגמה:


/* שיטה לוגית */
.element {
    overflow-inline: auto;
    overflow-block: hidden;
}

התנהגות Overscroll-behavior

התכונות הלוגיות מתרחבות גם להתנהגות הגלישה. במקום להגדיר התנהגות גלילה בצירים פיזיים, אפשר להשתמש באותן Logical Properties בכדי לשלוט בהתנהגות הגלישה.

דוגמה:


/* שיטה לוגית */
.element {
    overscroll-behavior-inline: contain;
    overscroll-behavior-block: none;
}

תכונת מצב הכתיבה (Writing Mode)

התכונות הלוגיות מאד באות לידי ביטוי בשילוב עם התכונה writing-mode ב-CSS. תכונה זו מגדירה אם הטקסט יזרום בצורה אופקית או בצורה אנכית, מה שיכול להשפיע על האופן בו התכונות הלוגיות מיושמות.

דוגמה לתכונת מצב הכתיבה:


/* שינוי מצב הכתיבה לאנכי */
.element {
    writing-mode: vertical-rl;
    inline-size: 200px;
    block-size: 500px;
}

בדוגמה מעלה, תכונות לוגיות כמו inline-size ו-block-size יותאמו אוטומטית למצב הכתיבה האנכי מבלי הצורך להשתמש בתכונות width ו-height.

תמיכת דפדפנים

לתכונות לוגיות יש תמיכה רחבה בדפדפנים מודרניים, כולל Chrome, Firefox, Safari ו-Edge. עם זאת, עבור דפדפנים ישנים יותר, ייתכן שתצטרכו לספק fallback באמצעות תכונות מסורתיות.

Data on support for the css-logical-props feature across the major browsers from caniuse.com

דוגמה ל fallback:


/* פתרון לדפדפנים ישנים */
.element {
    margin-left: 20px;
    margin-right: 10px;

    /* תכונות לוגיות */
    margin-inline-start: 20px;
    margin-inline-end: 10px;
}

אסטרטגיות fallback לדפדפנים ישנים

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

אסטרטגיות לטיפול בדפדפנים ישנים:

  • השתמשו בתכונות מסורתיות: ספקו פתרונות פיזיים לפני התכונות הלוגיות.
  • Degradation Graceful: ודאו שהעמוד מתפקד נכון גם בלי התכונות הלוגיות, גם אם העיצוב לא יהיה אופטימלי.

שימושים בעולם האמיתי

תכונות לוגיות שימושיות במיוחד לאתרים שצריכים לתמוך בשפות מרובות או כאלו שכנראה יצפו בהם בכיוונים שונים. לדוגמה, אתר מסחר יכול להפיק תועלת מתכונות לוגיות בכדי לתמוך בקלות גם בעיצובים באנגלית וגם בעיצובים בערבית/עברית מבלי הצורך בכתיבת כללי CSS נפרדים לכל שפה.

דוגמאות:

  • אתרים מרובי שפות: מעבר קל בין עיצובים LTR ו-RTL עם תכונות לוגיות.
  • עיצוב רספונסיבי: ודאו שהטקסט והאלמנטים במתווה יזרמו נכון במעבר בין מצבי landscape ומצבי portrait במכשירים ניידים.
  • מתווים מורכבים: פשטו את ה-CSS הנדרש לאתרים עם מצבי כתיבה אנכיים (כגון יפנית, סינית).

״תכונות לוגיות מפשטות את המורכבות של פיתוח אתרים גלובלי, ומאפשרות למפתחים לתמוך במגוון רחב יותר של שפות ומצבי כתיבה בפחות מאמץ.״

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

יש מספר שיטות עבודה מומלצות שכדאי לקחת בחשבון כשמשתמשים בתכונות לוגיות ב-CSS:

  • התחילו להשתמש בתכונות לוגיות מוקדם: התחילו להשתמש בתכונות לוגיות כבר מההתחלה, במיוחד אם אתם יודעים שהאתר עתיד לתמוך בשפות מרובות או מתווים מורכבים.
  • ספקו פתרונות fallback: השתדלו לכלול תכונות CSS מסורתיות כפתרונות fallback לדפדפנים ישנים יותר שאינם תומכים בתכונות לוגיות.
  • בדקו במצבי כתיבה שונים: ודאו שהמתווה שלכם עובד נכון גם במצבי כתיבה אופקיים (LTR/RTL) וגם במצבי כתיבה אנכיים.

סיכום

תכונות לוגיות ב-CSS מספקות גישה מודרנית וגמישה לבניית מתווים המותאמים למצבי כתיבה ושפות שונות. באמצעות שימוש בתכונות אלו, תוכלו לפשט את ה-CSS שלכם, ליצור עיצובים עמידים יותר, ולתמוך בקלות בשפות וכיוונים שונים. תכונות לוגיות הן העתיד של עיצוב אתרים רספונסיבי ומאפשרות למפתחים ליצור מתווים אדפטיביים ומוכנים לעתיד לבוא.

רועי יוסף
רועי יוסף

מפתח אתרים ותבניות וורדפרס. אוהב טיפוגרפיה, צבעים ומה שביניהם ומכוון לספק אתרים עם ביצועים גבוהים, מותאמים למנועי חיפוש ובעלי קוד ולידי, סמנטי ונקי. צריכים עזרה? צרו איתי קשר.

0 תגובות...

תגובה חדשה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...