תחביר טווח שאילתות המדיה החדש של CSS PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

תחביר טווח שאילתות המדיה החדש של CSS

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

אז, נניח שאנחנו רוצים להחיל סגנון CSS מסוים על מסמך מודפס:

@media print {
  .element {
    /* Style away! */
  }
}

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

/* When the viewport width is at least 30em... */
@media screen and (min-width: 30em) {
  .element {
    /* Style away! */
  }
}

שים לב and שם? זה אופרטור שמאפשר לנו לשלב הצהרות. בדוגמה זו, שילבנו תנאי שסוג המדיה הוא a screen וזהו min-width התכונה מוגדרת ל 30em (או מעל). אנחנו יכולים לעשות את אותו הדבר כדי למקד לטווח של גדלי תצוגה:

/* When the viewport width is between 30em - 80em */
@media screen and (min-width: 30em) and (max-width: 80em) {
  .element {
    /* Style away! */
  }
}

כעת הסגנונות הללו חלים על טווח מפורש של רוחבי יציאת תצוגה ולא על רוחב בודד!

אבל מפרט ה-Media Queries Level 4 הציג תחביר חדש למיקוד בטווח רחב של יציאות תצוגה באמצעות אופרטורים להשוואה מתמטית נפוצה - דברים כמו <, >, ו = - זה הגיוני יותר מבחינה תחבירית תוך כתיבת פחות קוד.

בואו נחפור איך זה עובד.

מפעילי השוואה חדשים

הדוגמה האחרונה היא המחשה טובה לאופן שבו "זיפנו" טווחים על ידי שילוב תנאים באמצעות and מַפעִיל. השינוי הגדול במפרט Media Queries Level 4 הוא שיש לנו אופרטורים חדשים שמשווים ערכים במקום לשלב ביניהם:

  • < מעריך אם ערך הוא פחות מ ערך אחר
  • > מעריך אם ערך הוא גדול מ ערך אחר
  • = מעריך אם ערך הוא שווה לערך אחר
  • <= מעריך אם ערך הוא פחות או שווה to ערך אחר
  • >= מעריך אם ערך הוא גדול או שווה to ערך אחר

הנה איך אולי כתבנו שאילתת מדיה שמחילה סגנונות אם הדפדפן כן 600px רחב או גדול יותר:

@media (min-width: 600px) {
  .element {
    /* Style away! */
  }
}

כך נראה לכתוב את אותו הדבר באמצעות אופרטור השוואה:

@media (width >= 600px) {
  .element {
    /* Style away! */
  }
}

מיקוד לטווח רחב של יציאות תצוגה

לעתים קרובות כאשר אנו כותבים CSS Media Queries, אנו יוצרים מה שנקרא a נקודת עצירה - מצב שבו העיצוב "נשבר" ומערכת של סגנונות מיושמים כדי לתקן אותו. לעיצוב יכולות להיות המון נקודות שבירה! והם בדרך כלל מבוססים על נקודת התצוגה בין שני רוחבים: היכן מתחילה נקודת השבירה והיכן מסתיימת נקודת הפריצה.

הנה איך עשינו את זה באמצעות and אופרטור לשילוב שני ערכי נקודת השבירה:

/* When the browser is between 400px - 1000px */
@media (min-width: 400px) and (max-width: 1000px) {
  /* etc. */
}

אתה מתחיל לקבל תחושה טובה של כמה קצר וקל יותר לכתוב שאילתת מדיה כשאנחנו מוותרים על הבולאני and מפעיל לטובת תחביר השוואת הטווחים החדש:

@media (400px <= width <= 1000px) {
  /* etc. */
}

הרבה יותר קל, נכון? וברור בדיוק מה עושה שאילתת המדיה הזו.

תמיכת דפדפן

תחביר שאילתת מדיה משופר זה עדיין בימיו הראשונים בזמן כתיבת שורות אלה ואינו נתמך באופן נרחב כרגע כמו הגישה המשלבת min-width ו max-width. אבל אנחנו מתקרבים! ספארי הוא הנקודה העיקרית היחידה בשלב זה, אבל יש כרטיס פתוח לזה שאתה יכול לעקוב.

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

שולחן העבודה

Chrome Firefox IE אדג ' ספארי
104 63 לא 104 לא

נייד / טאבלט

אנדרואיד כרום אנדרואיד פיירפוקס אנדרואיד iOS ספארי
106 106 106 לא

בואו נסתכל על דוגמה

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

תחביר טווח שאילתות המדיה החדש של CSS

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

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

כדי לראות מה קורה, הנה איך הפריסה מגיבה בין שתי נקודות השבירה הקטנות יותר. רשימת הניווט הנסתרת מוצגת גם כן title ב main גדל פנימה font-size.

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

/* Base styles (any screen size) */
header {
  display: flex;
  justify-content: center;
}

header ul {
  display: none;
}

.title p {
  font-size: 3.75rem;
}

/* When the media type is a screen with a width greater or equal to 768px */
@media screen and (width >= 768px) {
  header {
    justify-content: space-between;
  }

  header ul {
    display: flex;
    justify-content: space-between;
    gap: 3rem;
  }

  .title p {
    font-size: 5.75rem;
  }
}

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

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

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

לגבי הפריסה:

  • אל האני main האלמנט הופך לרשת בת 12 עמודות.
  • לחצן מוצג על התמונה.
  • גודל ה- .title הגופן של הרכיב גדל וחופף לתמונה.

בהנחה שעשינו את שיעורי הבית שלנו וקבענו בדיוק היכן השינויים האלה צריכים להתרחש, נוכל ליישם את הסגנונות האלה כאשר נקודת התצוגה תואמת את width תנאי לנקודת שבירה זו. אנחנו הולכים לומר שנקודת השבירה נמצאת ב 1000px:

/* When the media type is a screen with a width greater or equal to 1000px  */
@media screen and (width >= 1000px) {
  /* Becomes a 12-column grid */
  main {
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    grid-template-rows: auto 250px;
  }

  /* Places the .title on the grid */
  .title {
    grid-row: 1;
  }

  /* Bumps up the font-size */
  .title p {
    font-size: 7.75rem;
  }

  /* Places .images on the grid */
  .images {
    grid-row: 1 / span 2;
    align-self: end;
    position: relative;
  }

  /* Displays the button */
  .images .button {
    display: block;
    position: absolute;
    inset-block-end: 5rem;
    inset-inline-end: -1rem;
  }
}
הצגת מסלולי רשת ה-CSS עבור פריסת שולחן העבודה באמצעות שאילתת מדיה של CSS עם תחביר הטווח החדש.
תחביר טווח שאילתות המדיה החדש של CSS

תשחק עם זה:

מדוע קל יותר להבין את התחביר החדש

השורה התחתונה: קל יותר להבחין באופרטור השוואה (למשל width >= 320px) מאשר להבדיל בין min-width ו max-width באמצעות and מַפעִיל. על ידי הסרת הניואנס בין min- ו max-, יש לנו סינגל אחד width פרמטר לעבוד איתו והמפעילים מספרים לנו את השאר.

מעבר להבדלים החזותיים של התחבירים האלה, הם גם עושים דברים קצת שונים. באמצעות min- ו max- שווה ערך לשימוש באופרטורים של השוואה מתמטית:

  • max-width שווה ערך ל <= מפעיל (למשל (max-width: 320px) הוא זהה (width <= 320px)).
  • min-width שווה ערך ל >= מפעיל (למשל (min-width: 320px) הוא זהה (width >= 320px)).

שימו לב שאף אחד מהם אינו המקביל ל- > or < אופרטורים.

בוא ניקח דוגמה היישר ממפרט Media Queries Level 4 שבו אנו מגדירים סגנונות שונים על סמך נקודת שבירה ב- 320px ברוחב יציאת התצוגה באמצעות min-width ו max-width:

@media (max-width: 320px) { /* styles for viewports = 320px */ }

שתי שאילתות המדיה תואמות לתנאי כאשר רוחב יציאת התצוגה שווה ל 320px. זה לא בדיוק מה שאנחנו רוצים. אנחנו רוצים או אחד מהתנאים האלה ולא שניהם בו זמנית. כדי להימנע משינויים מרומזים, אנו עשויים להוסיף פיקסל לשאילתה בהתבסס על min-width:

@media (max-width: 320px){ /* styles for viewports = 321px */ }

אמנם זה מבטיח ששתי קבוצות הסגנונות לא יחולו בו זמנית כאשר רוחב יציאת התצוגה הוא 320px, כל רוחב נקודת מבט הנופל ביניהם 320px ו 321px יביא לאזור סופר קטן שבו אף אחד מהסגנונות בשתי השאילתות לא מוחל - מצב מוזר של "הבזק של תוכן לא מעוצב".

פתרון אחד הוא להגדיל את ערך סולם ההשוואה השני (מספרים אחרי הנקודה העשרונית) ל 320.01px:

@media (max-width: 320px) { /* styles for viewports = 320.01px */ }

אבל זה נהיה טיפשי ומסובך מדי. לכן תחביר טווח תכונות המדיה החדש הוא גישה מתאימה יותר:

@media (width <= 320px) { /* styles for viewports  320px) { /* styles for viewports > 320px */ }

גלישה את

אוף, כיסינו הרבה קרקע על התחביר החדש למיקוד טווחי רוחב של יציאות התצוגה ב-CSS Media Queries. כעת, לאחר שמפרט Media Queries Level 4 הציג את התחביר והוא אומץ בדפדפני Firefox ו-Chromium, אנו מתקרבים לאפשרות להשתמש באופרטורי ההשוואה החדשים ולשלב אותם עם תכונות מדיה אחרות במגוון width, כמו height ו aspect-ratio

וזו רק אחת מהתכונות החדשות יותר שהציג מפרט רמה 4, לצד א חבורה של שאילתות שנוכל לבצע בהתבסס על העדפות המשתמש. זה לא נגמר שם! בדוק את מדריך מלא לשאילתות מדיה ב-CSS להצצה של מה עשוי להיכלל ב-Media Queries Level 5.

בול זמן:

עוד מ טריקים של CSS