我试图在输入字段上使用:after CSS伪元素,但它不起作用。如果我将其与跨度一起使用,它可以正常工作。

<style type="text/css">
.mystyle:after {content:url(smiley.gif);}
.mystyle {color:red;}
</style>

这是有效的(将笑脸放在“buu!”之后,然后放在“somemore”之前)

<span class="mystyle">buuu!</span>a some more

这不起作用-它只将someValue涂成红色,但没有笑脸。

<input class="mystyle" type="text" value="someValue">

我做错了什么?我应该使用另一个伪选择器吗?

注意:我不能在输入周围添加跨度,因为它是由第三方控件生成的。


当前回答

:after和:before在Internet Explorer 7及以下版本中不受任何元素的支持。

它也不能用于替换的元素,如表单元素(输入)和图像元素。

换句话说,使用纯CSS是不可能的。

但是,如果使用jquery,则可以使用

$(".mystyle").after("add your smiley here");

之后的API文档

使用javascript附加内容。这将适用于所有浏览器。

其他回答

前后切换开关示例只需将输入包装在div块上

.fm表单控件{位置:相对;页边空白:25px;边距底部:25.2px;}.fm切换器{显示:无;}.fm切换开关:选中+.fm占位符切换开关:在之后{背景色:#94c6e7;}.fm切换器:已选中+.fm占位符切换器{左:24px;}.fm切换器[已禁用]+.fm占位符切换器{游标:不允许;}.fm切换器[已禁用]+.fm占位符切换器:之前{背景色:#cbd0d3;}.fm切换器[已禁用]+.fm占位符切换器:之后{背景色:#eaeeded;边框颜色:#cbd0d3;}.fm占位符切换器{左填充:53px;光标:指针;线条高度:24px;}.fm占位符切换器:之前{位置:绝对;内容:“”;左:0;顶部:50%;宽度:20px;高度:20px;页边空白:-10px;左边距:2px;背景色:#2980b9;z指数:2;-moz转换:所有0.15s都易于进出;-o型转换:所有0.15s都易于进出;-webkit转换:所有0.15s都易于输入输出;过渡:所有0.15s均缓进缓出;边框半径:12px;}.fm占位符切换器:在之后{位置:绝对;内容:“”;左:0;顶部:50%;宽度:48px;高度:20px;页边空白:-12px;背景色:#ffffff;z指数:1;边框半径:12px;边框:2px实心#bdc3c7;-moz转换:所有0.15s都易于进出;-o型转换:所有0.15s都易于进出;-webkit转换:所有0.15s都易于输入输出;过渡:所有0.15s均缓进缓出;}<div class='fm表单控件'><input class=‘m-switcher‘id=‘switcher_id‘type=‘checkbox‘><label class='m-placeholder-switcher'for='switcher_id'>切换器</label></div>

下一步尝试:

label[for=“userName”]{位置:相对;}label[for=“userName”]::之后{content:'[after]';宽度:22px;高度:22px;显示:内联块;位置:绝对;右:-30像素;}<label for=“userName”>姓名:<input type=“text”name=“userName”id=“userName“></label>

我使用背景图像为必填字段创建了红点。

input[type="text"][required] {
  background-image: radial-gradient(red 15%, transparent 16%);
  background-size: 1em 1em;
  background-position: top right;
  background-repeat: no-repeat
}

在Codepen上查看

尽管有解释指出Firefox不允许::after和::before内容用于无法显示任何内容的元素的行为是正确的,但这一规则似乎仍然适用:

input[type=checkbox] {
    -moz-appearance: initial;
}

由于::after是重新设置复选框或单选框样式的唯一方法,而不会引入更多无关的标记,如尾随跨度或标签,我认为可以强制Firefox允许显示::before和::aft内容,尽管不符合规范。

当我遇到同样的问题时,我发现了这篇文章,这是对我有效的解决方案。与替换输入的值相反,只需删除它并在其后面绝对放置一个大小相同的span,span可以使用您选择的图标字体将:before伪类应用于它。

<style type="text/css">

form {position: relative; }
.mystyle:before {content:url(smiley.gif); width: 30px; height: 30px; position: absolute; }
.mystyle {color:red; width: 30px; height: 30px; z-index: 1; position: absolute; }
</style>

<form>
<input class="mystyle" type="text" value=""><span class="mystyle"></span>
</form>