rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
98.69k stars 12.75k forks source link

Horizontal overscroll on iOS #92771

Open jsha opened 2 years ago

jsha commented 2 years ago

Steps to reproduce:

  1. Visit e.g. https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html or https://doc.rust-lang.org/nightly/std/vec/struct.Vec.html on an iPhone in Safari.
  2. Press the screen and drag left or right.

Expected result:

No left-right scrolling happens.

Actual result:

Browser applies the "overscroll" effect horizontally, letting the scroll go past the edge of the screen, then bounce back.

This is unpleasant for scrolling long docs. It means that an up-down scroll that is not perfectly vertical can get turned into a horizontal scroll.

According to https://stackoverflow.com/questions/15879710/disabling-horizontal-scroll-on-an-iphone-website it sounds like this happens when some element has horizontal overflow. Worth noting that some shorter pages like https://doc.rust-lang.org/nightly/std/string/trait.ToString.html don't exhibit the same behavior. So presumably there is indeed some horizontal overflow on the really long pages like Vec and Iterator, and we need to figure out where it is.

Tested on an iPhone 7 running iOS 15.2.

jsha commented 2 years ago

Here's an example of an item that exceeds the horizontal bounds in mobile mode: https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.try_find

The Residual<Option<Self::Item>>>::TryType part of the type signature is too wide for the window but doesn't get wrapped. Adding overflow-wrap: anywhere fixes it.

jsha commented 2 years ago

Reopening. This is fixed on beta, but on nightly it's regressed. I'm not yet sure why, but it seems like the proximate cause it that some item-infos extend past the right border, like this one on Iterator's page, on the impl for ScmCredentials:

PXL_20220327_061722813 MP