Anchored Auto Layout
npm

Hover or focus a box to measure it. Click its tag, or press ] and [, to pin one. Esc unpins.

    Legend
    • Anchor: a box with data-⚓️-name
    • Placed by anchors: out of flow
    • Gap from the anchor's edge, in px
    • Edges of the box you're inspecting

    Every tag, line and number here is itself placed by data-⚓️-* attributes. JS only measures.

    Animated grid reflow (after Bramus)

    Bramus's animated CSS grid technique rebuilt with the data-⚓️-* attribute library: anchor-scope + data-⚓️-fill, zero JS.

    Full page
    <header>
      <h1>Animated grid reflow</h1>
      <p>
        Resize the window (or drag the grid's dashed edge). Each invisible cell
        reflows instantly; the numbered tile is anchored to its cell with
        <code>data-⚓️-fill</code> and only its position transitions (<code>data-⚓️-transition="glide"</code>).
        No JavaScript. After
        <a href="https://www.bram.us/2026/09/07/animating-css-grid-layouts-with-css-anchor-positioning/">Bramus</a>.
      </p>
    </header>
    
    <div class="grid" data-⚓️-root>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">1</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">2</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">3</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">4</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">5</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">6</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">7</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">8</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">9</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">10</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">11</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">12</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">13</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">14</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">15</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">16</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">17</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">18</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">19</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">20</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">21</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">22</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">23</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">24</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">25</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">26</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">27</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">28</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">29</div></div>
      <div class="cell" data-⚓️-name="--tile" data-⚓️-scope-name="--tile"><div class="tile" data-⚓️-to="--tile" data-⚓️-fill data-⚓️-transition="glide">30</div></div>
    </div>

    data-⚓️-filldata-⚓️-namedata-⚓️-rootdata-⚓️-scope-namedata-⚓️-todata-⚓️-transition

    Copied