这是我的小提琴:http://jsfiddle.net/olexander/7hB8C/
我有一个锚,它被设计为一个按钮(样式被简化以显示问题) .
HTML:
<a href="javascript:void(0)" class="button demo">Button</a>
CSS:
.button {
border: none;
outline: none;
text-decoration: none;
display: inline-block;
}
.button:active {
transform: scale(0.8, 0.8);
-webkit-transform: scale(0.8, 0.8);
-moz-transform: scale(0.8, 0.8);
-o-transform: scale(0.8, 0.8);
-ms-transform: scale(0.8, 0.8);
}
.demo {
padding: 40px;
margin: 20px;
font-size: 5em;
color: black;
background-color: lightgray;
}
问题是链接按钮内有一个不可点击的区域 . 我可以解释一下,锚内部有一个文本节点,当mousedown转到文本节点时,在转换后,mouseup会出现在文本节点之外 . 这就是为什么不处理mouseclick的原因 .
如果我们在锚点中选择文本节点,它可以像这样(在mousedown之前和之后)可视化:
我想注意的是,至少在Chrome,Opera和Safari中重现了这个问题,即使我把链接放到href标签而不是处理点击事件 . 它也与 <button>
一起复制,而不是 <input type="button">
的问题,因为第一个使用内容,第二个值 .
有没有人有关于避免或解决这种行为的更好方法的想法?提前致谢!
UPDATE:
我发现使用streched "stub" <span>
来覆盖可点击区域的解决方案:
<a href="javascript:void(0)" class="button"><span class="stub"></span>Button</a>
和存根样式:
.button > span.stub {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
}
此版本发布于:http://jsfiddle.net/olexander/7hB8C/20/
存根可以通过javascript动态添加,但这个想法保持不变 . 由于内联span元素可以嵌套在anchor和buttons中,因此它不会破坏W3C HTML5 / XHTML5规则 .
Aequanox使解决方案更加完美!看看下面的答案 .
整个故事发表在这里:Animated anchor and button with css3
2 回答
似乎
:active
转换正在替换click事件 . 我认为这是一个浏览器错误 .在这里,我已将
:active
更改为类名.active
,并且apply在您的事件处理程序中:由于某种原因,直到我改变.button来之后这才起作用:
至:
去图......虽然它现在有效 .
您可以通过在css中插入标签来避免插入标记,从而保留标记清理程序:
但是文本不可选