≪ Today I learned.
RSS購読
    公開日
    タグ
    CSS
    著者
    ダーシノ

    sibling-indexとsibling-countで作るリングメニュー

    sibling-indexsibling-countを使うと、CSSで兄弟要素の全数とその中での位置を取得できる。

    .item {
      width: calc(sibling-count() * 100px);
      margin-inline-start: calc(sibling-index() * 10px);
    }

    要素の全数と位置を取得できるので、たとえば角度の計算が必要なリングメニューのようなUIを簡単に実装できる。

    <div class="ring-menu" role="menu">
      <div class="item" role="menuitem">1</div>
      <div class="item" role="menuitem">2</div>
      <div class="item" role="menuitem">3</div>
      <div class="item" role="menuitem">4</div>
      <div class="item" role="menuitem">5</div>
      ...
    </div>
    .ring-menu {
      position: relative; 
      width: 300px;
      height: 300px;
    
      .item {
        position: absolute;
        background-color: #333;
        color: #eee;
        inline-size: 50px;
        block-size: 50px;
        border-radius: 50%;
        text-align: center;
        align-content: center;
    
        --angle: calc(360deg / sibling-count() * (sibling-index() - 1));
    
        --x: var(calc(50% + sin(var(--angle)) * 100px));
        --y: var(calc(50% + cos(var(--angle)) * 100px));
    
        top: var(--y);
        left: var(--x);
      }
    }

    デモ