קו תחתון בכרטיסייה "מיקום עוגן"

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

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

יוצרים את הקו התחתון באמצעות רכיב מדומה ::before ב-<ul> שמכיל את הרכיבים <li>. השימוש ברכיב פסאודו הוא הגישה המועדפת כי הוא שומר על ה-DOM נקי ומונע הוספה של רכיבים מיותרים לאפקטים דקורטיביים בלבד.

ul::before {
  /* Use a pseudo-element on the container to represent the animated indicator */
  content: '';
}

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

li.active {
  /* Make a unique anchor-name for the active element. */
  anchor-name: --active;
}

מצמידים את הקו התחתון לעוגן של הפריט הפעיל באמצעות position-anchor שתואם ל-anchor-name בעוגן, והופכים אותו ל-position: absolute.

ul::before {
  /* Tether the underline to the active element. */
  position: absolute;
  position-anchor: --active;
}

ממקמים את הקו התחתון ביחס לעוגן באמצעות מאפייני ה-inset והפונקציות anchor().

ul::before {
  /* DO NOT use position-area, which can not be transitioned. */
  /* Use calc() to offset the top slightly */
  inset-block-start: calc(anchor(bottom) + .1lh);
  inset-inline-start: anchor(left);
  inset-inline-end: anchor(right);
}

מוסיפים גובה וסגנונות חזותיים אחרים.

ul::before {
  /* Apply your project's styles for the indicator */
  block-size: .25lh;
  background: red;
}

בסוף, מוסיפים מעבר במאפיינים של inset.

ul::before {
  @media (prefers-reduced-motion: no-preference) {
    /* MANDATORY: The transition must be wrapped in a prefers-reduced-motion media query to respect user preferences. */
    transition: inset .2s;
  }
}

זהו אינדיקטור חזותי בלבד, ואין להשתמש בו כתחליף להגדרת ערכי ה-ARIA המתאימים של aria-current="page" או aria-selected.

<!-- MANDATORY: Provide explicit assistive technology state alongside the visual tab underline -->
<nav aria-label="Primary">
  <ul>
    <li class="active">
      <a href="/home" aria-current="page">Home</a>
    </li>
    <li>
      <a href="/about">About</a>
    </li>
  </ul>
</nav>

אסטרטגיות חלופיות

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

ul li.active {
  @supports not (position-anchor: auto) {
    /* Choose a color appropriate to the app theme. */
    border-bottom: .25lh var(--primary) solid;
  }
}