mirror of
https://github.com/kennethnym/aris.git
synced 2026-02-02 13:11:17 +00:00
39 lines
815 B
Markdown
39 lines
815 B
Markdown
|
|
---
|
|||
|
|
title: CSS content-visibility for Long Lists
|
|||
|
|
impact: HIGH
|
|||
|
|
impactDescription: faster initial render
|
|||
|
|
tags: rendering, css, content-visibility, long-lists
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## CSS content-visibility for Long Lists
|
|||
|
|
|
|||
|
|
Apply `content-visibility: auto` to defer off-screen rendering.
|
|||
|
|
|
|||
|
|
**CSS:**
|
|||
|
|
|
|||
|
|
```css
|
|||
|
|
.message-item {
|
|||
|
|
content-visibility: auto;
|
|||
|
|
contain-intrinsic-size: 0 80px;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Example:**
|
|||
|
|
|
|||
|
|
```tsx
|
|||
|
|
function MessageList({ messages }: { messages: Message[] }) {
|
|||
|
|
return (
|
|||
|
|
<div className="overflow-y-auto h-screen">
|
|||
|
|
{messages.map(msg => (
|
|||
|
|
<div key={msg.id} className="message-item">
|
|||
|
|
<Avatar user={msg.author} />
|
|||
|
|
<div>{msg.content}</div>
|
|||
|
|
</div>
|
|||
|
|
))}
|
|||
|
|
</div>
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
For 1000 messages, browser skips layout/paint for ~990 off-screen items (10× faster initial render).
|