mail.qq.com)。<!-- HTML -->
<div class="sidebar">
<div class="panel-header" id="contactToggle">通訊錄 <i class="arrow"></i></div>
<div class="panel-body" id="contactList" style="display:none">
<ul><li>聯繫人 1</li><li>聯繫人 2</li>...</ul>
</div>
</div>
<!-- CSS -->
.panel-header { cursor: pointer; padding: 10px; background: #f5f5f5; border-bottom: 1px solid #ddd; }
.panel-body { max-height: 300px; overflow-y: auto; background: white; }
.arrow { transition: transform .2s; }
.arrow.open { transform: rotate(180deg); }
<!-- JS (原生) -->
const toggle = document.getElementById('contactToggle');
const body = document.getElementById('contactList');
const arrow = toggle.querySelector('.arrow');
toggle.addEventListener('click', () => {
const open = body.style.display !== 'none';
body.style.display = open ? 'none' : 'block';
arrow.classList.toggle('open', !open);
});
react-window、vue-virtual-scroller)。<input type="search" placeholder="搜索聯繫人">,輸入過濾 data-name 屬性。overflow:auto 且 **父容器有確定高度**。**不要從零寫 UI 組件**。F12 觀摩成熟產品(QQ 郵箱、Gmail、Outlook)、複製核心結構、接入自己數據、重構樣式隔離,是最高效、Bug 最少的路徑。