Responsive profile card
A friendly introduction with a flexible layout and a clear next step.
View exampleA good first building block
A constrained reading region with natural scrolling, a visible focus ring and a useful accessible name.
<main
>
<h1>A scrollbox you can use with a keyboard</h1>
<p
id="scroll-help"
>Focus the reading box, then use the arrow keys, Page Down or Page Up. The surrounding page still scrolls normally.</p
>
<section
class="scrollbox"
tabindex="0"
role="region"
aria-label="A short reading list"
aria-describedby="scroll-help"
>
<h2>Small steps for a useful page</h2>
<p>1. Give the page one clear purpose and a descriptive main heading.</p>
<p>2. Use paragraphs and lists to make the content easy to scan.</p>
<p>3. Choose links that describe their destinations.</p>
<p>4. Keep text readable at different screen widths.</p>
<p>5. Test the page with a keyboard as well as a pointer.</p>
<p>6. Respect reduced-motion preferences when adding animation.</p>
<p>7. Open the copied file and check that it works without missing assets.</p>
<p>8. Keep short text on the page when a nested scrollbox is unnecessary.</p>
</section
>
</main
>:root {
font-family: system-ui, sans-serif;
color: #18223b;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
padding: 24px;
background: #edf1ff;
display: grid;
place-items: center;
}
main {
min-width: 0;
width: min(100%, 600px);
background: white;
border-radius: 20px;
padding: clamp(20px, 5vw, 32px);
}
h1 {
font-size: clamp(24px, 5vw, 32px);
line-height: 1.2;
margin: 0 0 16px;
}
h2 {
font-size: 20px;
margin: 24px 0 12px;
}
p,
li {
line-height: 1.65;
}
a {
color: #2545a8;
text-underline-offset: 3px;
}
button,
input,
select,
textarea {
font: inherit;
}
button {
min-height: 44px;
border: 1px solid #9eaed0;
border-radius: 10px;
padding: 10px 14px;
background: #eff3ff;
color: #18223b;
cursor: pointer;
}
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
outline: 3px solid #3658bf;
outline-offset: 3px;
}
pre {
max-width: 100%;
overflow: auto;
white-space: pre-wrap;
overflow-wrap: anywhere;
background: #eef2fa;
padding: 16px;
border-radius: 10px;
}
code {
font-family: ui-monospace, monospace;
}
.scrollbox {
max-height: 220px;
overflow: auto;
overscroll-behavior: auto;
border: 1px solid #9eaed0;
border-radius: 12px;
padding: 20px;
scrollbar-gutter: stable;
}
.scrollbox h2 {
margin-top: 0;
}// No JavaScript needed for this example.<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My code example</title>
<style>
:root {
font-family: system-ui, sans-serif;
color: #18223b;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
padding: 24px;
background: #edf1ff;
display: grid;
place-items: center;
}
main {
min-width: 0;
width: min(100%, 600px);
background: white;
border-radius: 20px;
padding: clamp(20px, 5vw, 32px);
}
h1 {
font-size: clamp(24px, 5vw, 32px);
line-height: 1.2;
margin: 0 0 16px;
}
h2 {
font-size: 20px;
margin: 24px 0 12px;
}
p,
li {
line-height: 1.65;
}
a {
color: #2545a8;
text-underline-offset: 3px;
}
button,
input,
select,
textarea {
font: inherit;
}
button {
min-height: 44px;
border: 1px solid #9eaed0;
border-radius: 10px;
padding: 10px 14px;
background: #eff3ff;
color: #18223b;
cursor: pointer;
}
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
outline: 3px solid #3658bf;
outline-offset: 3px;
}
pre {
max-width: 100%;
overflow: auto;
white-space: pre-wrap;
overflow-wrap: anywhere;
background: #eef2fa;
padding: 16px;
border-radius: 10px;
}
code {
font-family: ui-monospace, monospace;
}
.scrollbox {
max-height: 220px;
overflow: auto;
overscroll-behavior: auto;
border: 1px solid #9eaed0;
border-radius: 12px;
padding: 20px;
scrollbar-gutter: stable;
}
.scrollbox h2 {
margin-top: 0;
}
</style>
</head>
<body>
<main
>
<h1>A scrollbox you can use with a keyboard</h1>
<p
id="scroll-help"
>Focus the reading box, then use the arrow keys, Page Down or Page Up. The surrounding page still scrolls normally.</p
>
<section
class="scrollbox"
tabindex="0"
role="region"
aria-label="A short reading list"
aria-describedby="scroll-help"
>
<h2>Small steps for a useful page</h2>
<p>1. Give the page one clear purpose and a descriptive main heading.</p>
<p>2. Use paragraphs and lists to make the content easy to scan.</p>
<p>3. Choose links that describe their destinations.</p>
<p>4. Keep text readable at different screen widths.</p>
<p>5. Test the page with a keyboard as well as a pointer.</p>
<p>6. Respect reduced-motion preferences when adding animation.</p>
<p>7. Open the copied file and check that it works without missing assets.</p>
<p>8. Keep short text on the page when a nested scrollbox is unnecessary.</p>
</section
>
</main
>
<script>
</script>
</body>
</html>example.html.The recovered 2014 HTML_Scrollbox.htm detail establishes a fixed-size div with overflow:auto as the historical purpose. This new implementation uses a labelled, focusable section and a maximum height. It needs no JavaScript, remote script or copied archive code.
Historical purpose: Recovered 2014-09-15 detail and embedded overflow:auto purpose; original new implementation. No archived code or numeric preview association is reused.
Avoid nested scrolling for short content. Keep the focus ring visible and describe the region. Browser and assistive-technology scrolling behavior varies, so test your actual content with a keyboard. Do not trap focus or block the surrounding page scroll.
This is newly authored code. It uses system fonts and no external assets.
Keep the ideas going