【问题标题】:on webkit browsers typing into edit box causes scrolling在 webkit 浏览器上输入编辑框会导致滚动
【发布时间】:2014-06-05 07:18:48
【问题描述】:

我在 WebKit 浏览器(Chrome 和 Safari)上的网站标记存在问题,即当我在右侧滑块的编辑框中键入内容时,它会滚动左侧区域。

请看以下示例:
http://jsbin.com/obiyec/7
http://jsbin.com/obiyec/7/edit - html 代码(输入在 id="palette" 的 div 内)

  1. 在 Chrome 或 Safari 中打开下一个链接
  2. 在右上角的编辑框中输入内容
  3. 注意左侧区域的滚动条会移动

如果可能的话,根本不可能彻底改变这个标记

问。如何防止滚动条移动并使其行为与FF相同?

【问题讨论】:

  • 您的问题描述不清楚。您的示例中没有“编辑框”,它只是一个静态的div。也许你想要textarea
  • @Sparky672 尝试链接。如果你在 Chrome 中打开JSBin,右上角会有一个输入框。输入它,左侧的divoverflow: auto 将滚动到右侧,即使它没有被交互。
  • @MyHeadHurts,我在 Safari 中,无法在左上角的框中输入任何内容。查看HTML,它只是一个div
  • @Sparky672 抱歉,我是个白痴。我的意思是右上角的输入框(我也更正了评论)。
  • @MyHeadHurts,我也试过了。在右上角的框中输入文本(然后按回车键)在 Safari 中没有任何作用。

标签: html css google-chrome safari webkit


【解决方案1】:

这里的问题是,看起来你在做什么和你实际上在做什么是两件不同的事情。

看起来左侧的div 具有固定宽度,overflow: auto (div#kb-board) 和右侧的输入字段是不相关的元素 - 但它们不是。输入字段实际上是 div#kb-board 的子字段,但其父字段 (div#palette) 的位置为 fixed,因此它位于页面的右上角。

因此,输入字段实际上位于 div#kb-board 的右侧,当您输入它时,滚动条会随着您将焦点移到该 div 的右侧而移动。

所以在这种情况下,我会说 Chrome 正在显示正确的行为。

要解决此问题,您应该停止在 div#kb-board 中嵌套 div#palette。由于它使用固定定位,因此无需嵌套。

<div id="kb-board">
    <div id="boards-container">
        <div id="lane">...</div>
    </div>
    <!-- div#palette was originally here -->
</div>
<div id="palette">
    <input type="text" value="Type here" />
</div>

工作示例:http://jsbin.com/obiyec/8

【讨论】:

  • 你是对的。我怀疑 FF 可能会忽略关注 div 而不是 WebKit 的需要。不错的收获。谢谢!
  • 谁能给我指出input type="edit" 的文档?谢谢。
  • @Sparky672 对不起,我的意思是 input type="text" 。这是:dev.w3.org/html5/spec/…
  • 我们正在使用一个我们没有处理 html div 等的框架。布局是在更抽象的层次上创建的。但是根据您的回答,我们看到只需简化布局即可解决相同的问题。所以简化工作!感谢提示
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多