Reputation: 62
I'm trying to make the content of a details
element scrollable, only using CSS (i.e. no JS). The height of this details
is dynamic, based on the viewport.
On Firefox, I obtain the expected result. But on Chrome, the overflow:auto
has no impact in this case:
Firefox (expected result):
Chrome (wrong behavior):
When setting a fixed height, the content is scrollable on Chrome, but I want it to be dynamic.
Here's the simplified code:
* {
box-sizing: border-box;
}
:root {
--summary-height: 32px;
--text-color: antiquewhite;
}
details {
width: 200px;
border: 1px solid dimgray;
}
details[open] {
height: 64vh;
flex: 1 1 0;
}
summary {
background-color: dimgray;
color: var(--text-color);
text-shadow: 0 0 3px #1a1a1a;
height: var(--summary-height);
line-height: var(--summary-height);
}
ul {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
list-style: none;
margin: 0;
padding: 0;
min-height: 0;
height: calc(100% - var(--summary-height));
overflow-y: auto;
scrollbar-width: thin;
}
li {
display: block;
}
<details open="">
<summary>Details</summary>
<ul>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
</ul>
</details>
(JSFiddle of the code above)
Here's the code in its context: JSFiddle
Thanks in advance!
Upvotes: 0
Views: 69
Reputation: 8751
Try with this. Set details height to 100% and ul height to the value you want.
* {
box-sizing: border-box;
}
:root {
--summary-height: 32px;
--text-color: antiquewhite;
}
details {
width: 200px;
border: 1px solid dimgray;
}
details[open] {
height: 100%;
flex: 1 1 0;
}
summary {
background-color: dimgray;
color: var(--text-color);
text-shadow: 0 0 3px #1a1a1a;
height: var(--summary-height);
line-height: var(--summary-height);
}
ul {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
list-style: none;
margin: 0;
padding: 0;
min-height: 0;
height: calc(64vh - var(--summary-height));
overflow-y: auto;
scrollbar-width: thin;
}
li {
display: block;
}
<details open="">
<summary>Details</summary>
<ul>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
</ul>
</details>
Upvotes: 1
Reputation: 8751
You should set overflow: auto
style in the details div container, not ul
container.
And add position: sticky
for the summary div container.
* {
box-sizing: border-box;
}
:root {
--summary-height: 32px;
--text-color: antiquewhite;
}
details {
width: 200px;
border: 1px solid dimgray;
overflow: auto;
}
details[open] {
height: 64vh;
flex: 1 1 0;
}
summary {
background-color: dimgray;
color: var(--text-color);
text-shadow: 0 0 3px #1a1a1a;
height: var(--summary-height);
line-height: var(--summary-height);
position: sticky;
top: 0;
}
ul {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
list-style: none;
margin: 0;
padding: 0;
min-height: 0;
height: calc(100% - var(--summary-height));
scrollbar-width: thin;
}
li {
display: block;
}
<details open="">
<summary>Details</summary>
<ul>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
<li><button><img src="https://via.placeholder.com/64" alt=""></button></li>
</ul>
</details>
Upvotes: 1