问题:
当点击一个标签时(对于一个单选按钮,它被故意隐藏在屏幕之外),浏览器会不期望地跳到页面的顶部。
- 注意:此问题在不同的浏览器中不一致-它发生在Safari和Chrome中,而不会发生在Firefox或Opera中 *
提问:
如何防止浏览器在单击单选按钮的标签时将滚动条跳到页面顶部?
示例代码:
· JS Fiddle
· HTML
<div class="rdbut">
<label class="colour">
<input id="option-AVGANT1Y2PC" type="radio" name="Multi-licence" value="1 Year 2 PC|+23.99|0" checked="checked" />
<span>£24.99</span></label>
</div>
<div class="rdbut">
<label class="colour">
<input id="option-AVGANT2Y2PC" type="radio" name="Multi-licence" value="2 Year 2 PC|+34.00|0" checked="checked" />
<span>£35.00</span></label>
</div>
· CSS
.rdbut {
margin: 0px;
}
.rdbut label {
float: left;
width: 65px;
margin: 4px;
background-color: #EFEFEF;
box-shadow: 0px 1px 3px rgba(50, 50, 50, 0.25);
border: none;
overflow: auto;
display: inline;
}
.rdbut label span {
text-align: center;
font-size: 12px;
padding: 3px 8px;
display: block;
}
.rdbut label input {
position: absolute;
top: -9999px;
left: -9999px;
}
.rdbut input:checked+span {
background-color: #404040;
color: #F7F7F7;
}
.rdbut .colour {
background-color: #FF8E22;
color: #ffffff;
}
8条答案
按热度按时间b1uwtaje1#
真有趣我不知道它为什么会这样,但治愈不想要的行为很容易:将无线电输入的CSS
top
和left
值交换为visibility: hidden
。像这样:
更新JSFiddle:http://jsfiddle.net/XkQ7T/1/。
.
顺便说一句,在每个单选按钮上设置
checked
是没有用的-只有最后一个实际上被选中。它会使你的代码无效。此外,您需要在无线电输入组周围使用form
标记。j91ykkif2#
我也有同样的问题,我使用@Frank Conijn的解决方案,但如果无线电设置
visibility: hidden;
或display:none
,标签(for="#id”)在IE8中不起作用,最后,我这样修复它:不设置
top
值v8wbuo2f3#
接受的答案不可访问:
visibility: hidden;
将hide your content from screen readers。不管怎样,麻烦就在这里:具体来说,
top: -9999;
会导致浏览器尝试访问该点。我喜欢设置一个类来隐藏这样的东西,使用以下参数。你可以把它放在任何地方:
注意
top: auto;
,它应该可以防止跳转。nwlqm0z14#
这就是我所做的,它工作得很好,仍然允许访问。
这样,输入总是在“视图”中,因此标签永远不必强制滚动到它。“top:0”是可选的,对我来说,它默认在屏幕中间,我只是把它显式地放在某个地方。
zvms9eto5#
只需在单选按钮中添加“display:none”即可。
tzcvj98z6#
如果您自定义了单选按钮,请不要使用display:none将其隐藏在页面中,也不要使用bigleft:-9999px。
最好使用不透明度:0,宽度:1 px,高度:1 px,让收音机接近你的假单选按钮
1l5u6lss7#
浏览器跳转的原因是输入(单选或复选框)及其标签彼此远离,当您单击可见的
label
时,input
获得焦点,因此浏览器转到input
(焦点)所在的位置。更改布局:将标签的
input
、label
和::before
元素放在网格中。网格固定位置,因此您可以当场隐藏输入。这样标签和输入就不会发散,所以焦点不会产生问题:py49o6xq8#
display:none;或可见性:hidden - >不会帮助你,如果你需要一个可访问的:(它将修复一个页面滚动的问题,但为屏幕阅读器创建一个问题。
这个变体对我很好(谢谢@James Hang!):