[해피CGI][cgimall] 그리드 재배치 애니메이션CSS
그리드 카드의 위치가 바뀔 때 CSS만으로 부드러운 이동 효과를 구현한 예제입니다.
JavaScript 없이 레이아웃 변화에 따른 애니메이션을 적용할 수 있습니다.
카드 목록, 갤러리, 대시보드 UI의 전환 효과를 만들 때 참고하기 좋습니다.

HTML 구조
<div class="container">
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
<div class="cell">
<div class="content">CONTENT</div>
</div>
</div>
CSS 소스
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.container {
display: grid;
grid-template-columns: repeat(auto-fill, 6rem);
gap: 1em;
}
.cell {
height: auto;
aspect-ratio: 1;
anchor-scope: --a;
anchor-name: --a;
}
.content {
position: absolute;
position-anchor: --a;
inset: anchor(inside);
width: 6rem;
height: 6rem;
background: white;
border: 1px dotted black;
border-radius: 0.5rem;
place-content: center;
text-align: center;
transition: inset 0.2s ease;
}
body {
padding: 5vh;
}
