【发布时间】:2019-08-19 15:09:28
【问题描述】:
我正在根据我们的分析团队的要求修改 UI 代码。所有可点击元素必须是a 或button。
我已经覆盖了 button 和 a 样式,因此它们看起来没有任何不同。在桌面浏览器中,它们的行为似乎也没有什么不同。
但是从开发工具打开chrome“设备仿真”,你可以看到button和a元素有不同的行为。它们各自的目标点击区域似乎更小,你必须直接点击 svg "X" 而不是块级元素的任何部分。
我尝试了a 和button 元素。我还在 jsfiddle 中重新创建了这个问题。
这个 jsfiddle 重现了这个问题(在 chrome 中的移动设备模拟器模式下测试)https://jsfiddle.net/8jze13t0/1/
// script.js
let i = 0;
const closeBtns = document.querySelectorAll('.close');
const clickCount = document.querySelector('.click-count');
Array.from(closeBtns).forEach(btn => btn.addEventListener('click', (e) => {
e.preventDefault();
i++;
clickCount.innerText = i;
}))
clickCount.innerText = i;
body {
background: darkBlue;
color: white;
font-family: sans-serif;
}
.close {
margin-top: 10px;
white-space: nowrap;
text-indent: 100%;
overflow: hidden;
background: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.4809 10.0128L19.9119 0.579492C20.0423 0.479492 20.0423 0.246029 19.9119 0.112695C19.7819 -0.020638 19.5709 -0.020638 19.4406 0.112695L10.0096 9.54564L0.578599 0.112695C0.448599 -0.020638 0.237599 -0.020638 0.107266 0.112695C-0.0227344 0.246029 -0.0227344 0.479492 0.107266 0.579492L9.53826 10.0128L0.107266 19.4457C-0.0227344 19.5794 -0.0227344 19.8128 0.107266 19.9128C0.172599 19.9795 0.257599 20.0128 0.342933 20.0128C0.428266 20.0128 0.513599 19.9795 0.578599 19.9128L10.0096 10.5128L19.4406 19.9128C19.5059 19.9795 19.5909 20.0128 19.6763 20.0128C19.7616 20.0128 19.8469 19.9795 19.9119 19.9128C20.0423 19.8128 20.0423 19.5794 19.9119 19.4457L10.4809 10.0128Z' fill='white'/%3E%3C/svg%3E");
width: 20px;
height: 20px;
margin-right: 16px;
display: block;
}
button {
outline: 0;
border: 0;
background: none;
padding: 0;
font-family: inherit;
font-style: inherit;
cursor: pointer;
}
<p>
Click Count:
<span class="click-count">
</span>
</p>
<p>
First Example With `div:`
<div class="close">
Close me
</div>
</p>
<p>
Second Example With `button`
<button class="close">
Close me
</button>
</p>
<p>
Third Example With `a`
<a href="#close" class="close">
Close me
</a>
</p>
这是问题的屏幕截图(带注释):
我希望能够单击移动模拟器中块级元素内的任何位置并触发事件处理程序。
【问题讨论】:
-
旁注,
<p>元素不能包含<div>s -
这与您隐藏文本的方式有关。删除文本,删除文本缩进和溢出,正常工作。如果您不打算使用它,为什么要在其中输入文本
-
@Huangism 该文本适用于屏幕阅读器和搜索引擎。我可以将其删除以代替
aria-label属性...但我不确定为什么它对按钮的影响与对 div 的影响不同。 -
@CharlieHoover 我是这么认为的(屏幕阅读器),但还有其他选择,请参阅我的答案。至于为什么,我不确定,移动浏览器一定有某种规则让它变得怪异。此外,我们使用的是 chrome 开发工具,它在真实设备上的行为可能相同,也可能不同
标签: javascript html css button dom-events