css - 使 SVG 在移动设备中可滚动
问题描述
如何使 svg 在移动设备中水平滚动?
免责声明:以下示例经过简化,重点关注滚动问题。我知道我可以得到一个看起来像这样的可滚动框,div
而不是svg
. 但我正在努力在 D3中制作一个大宽度的热图。
以下代码可在桌面上滚动,但不能在移动设备上滚动:
svg {
background: linear-gradient(90deg, blue, yellow);
}
<svg height=300 width=1500></svg>
我尝试遵循为 svg 提供一个具有固定宽度的容器 并使svg 大于容器的建议。但结果是一样的——它适用于桌面,而不是移动设备:
body {
border: 2px dotted red;
width: 500px;
}
svg {
background: linear-gradient(90deg, blue, yellow);
overflow: scrollbar
}
<svg height=300 width=1500></svg>
通过访问我的jsfiddle的全屏版本,我使用最新版本的 Chrome 和 Firefox 浏览器测试了我的 iPhone 8 上的移动滚动。
根据MDN 网络文档,
溢出属性仅适用于建立新视口的元素
但这并不能解释移动设备和桌面设备之间的差异。而根据Soueidan的说法,
您可以通过 ... 嵌套
<svg>
s来建立新的视口和用户坐标系
...而且我确实已经在正文中嵌套了一个 svg,因此会建立一个新的视口,使溢出属性适用。
解决方案
@G-Cyr 解决了评论中的问题。@G-Cyr 提供的两个 jsfiddles 在移动设备中滚动:jsfiddle.net/3na9v6ps/5或jsfiddle.net/3na9v6ps/6。
我通过添加/embedded/result
到网址在手机上对其进行了测试。
@G-Cyr 需要对我的代码进行的唯一更改是overflow: auto
在 svg 的容器上使用,而不是在 svg 上使用,并overflow: hidden
在容器的容器上使用。
推荐阅读
- javascript - 从回调 API 调用异步代码安全吗?
- azure - 如何使用 Azure 认知搜索搜索字符串的一部分
- visual-studio-code - 只显示父文件夹名称?
- c++ - C ++写入路径名中包含不需要的空字符的文件
- python-3.x - 如何使用属性装饰器设置基类中定义的超属性?
- java - @KafkaHandler 接收良好,但不使用 @SendTo 发送回复。怎么了?
- firebase - 谁能帮我解决这个颤振错误,我正在学习颤振?
- python - 用Seaborn计算直方图下的面积
- sql - 检查字符串是否包含特定数字
- linux - 将 Docker 映像从 Azure 容器注册表部署到 Web 应用容器“无法注册层:处理 tar 文件时出错(退出状态 1)”