Pandraghon
Pandraghon

Reputation: 62

`overflow:auto` not working in Chrome with dynamic height

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):

enter image description here

Chrome (wrong behavior):

enter image description here

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

Answers (2)

wangdev87
wangdev87

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

wangdev87
wangdev87

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

Related Questions