:before
好吧,从技术上讲,不可能让:after
伪元素对元素input
起作用
来自W3C:
12.1 :before 和 :after 伪元素
作者使用 :before 和 :after 伪元素指定生成内容的样式和位置。正如它们的名字所示,:before 和 :after 伪元素指定了元素文档树内容之前和之后的内容位置。'content' 属性与这些伪元素一起指定插入的内容。
所以我有一个项目,我有标签形式的提交按钮,input
由于某种原因,其他开发人员限制我使用<button>
标签而不是通常的输入提交按钮,所以我想出了另一个解决方案,将按钮包装在一个span
集合中到position: relative;
然后使用:after
伪绝对定位图标。
注意:演示小提琴使用 FontAwesome 3.2.1 的内容代码,因此您可能需要相应地更改content
属性的值。
HTML
<span><input type="submit" value="Send" class="btn btn-default" /></span>
CSS
input[type="submit"] {
margin: 10px;
padding-right: 30px;
}
span {
position: relative;
}
span:after {
font-family: FontAwesome;
content: "\f004"; /* Value may need to be changed in newer version of font awesome*/
font-size: 13px;
position: absolute;
right: 20px;
top: 1px;
pointer-events: none;
}
Demo
现在这里的一切都是不言自明的,关于一个属性,即pointer-events: none;
,我使用了它,因为在将鼠标悬停在:after
伪生成的内容上时,您的按钮不会点击,所以使用 的值none
将强制点击动作通过该内容.
来自Mozilla 开发者网络:
除了指示该元素不是鼠标事件的目标之外,值 none 还指示鼠标事件“通过”该元素并以该元素“下方”的任何内容为目标。
将心形字体/图标悬停Demo,看看如果你不使用会发生什么pointer-events: none;