在Firefox 3和谷歌Chrome 8.0中,以下工作正常:
<style type="text/css">
span:before { content: 'span: '; }
</style>
<span>Test</span> <!-- produces: "span: Test" -->
但当元素<input>时就不会了:
<style type="text/css">
input:before { content: 'input: '; }
</style>
<input type="text"></input> <!-- produces only the textbox; the generated content
is nowhere to be seen in both FF3 and Chrome 8 -->
为什么不像我想象的那样?
使用:before和:after可以指定哪些内容应该插入到该元素的内容之前(或之后)。输入元素没有内容。
例如,如果你写<input type="text">Test</input>(这是错误的),浏览器将纠正这一点,并将文本放在input元素之后。
你唯一能做的就是在span或div中包装每个输入元素,并在这些元素上应用CSS。
请参阅规范中的示例:
例如,下面的文档片段和样式表:
<h2> Header </h2> h2 {display:磨合;}
<p> Text </p> p:before {display: block;内容:“一些”;}
...将以与以下文档片段和样式表完全相同的方式呈现:
<h2> Header </h2> h2 {display:磨合;}
<p><span>Some</span> Text </p> span {display: block}
这是同样的原因,为什么它不工作<br>, <img>等(<textarea>似乎是特殊的)。
使用:before和:after可以指定哪些内容应该插入到该元素的内容之前(或之后)。输入元素没有内容。
例如,如果你写<input type="text">Test</input>(这是错误的),浏览器将纠正这一点,并将文本放在input元素之后。
你唯一能做的就是在span或div中包装每个输入元素,并在这些元素上应用CSS。
请参阅规范中的示例:
例如,下面的文档片段和样式表:
<h2> Header </h2> h2 {display:磨合;}
<p> Text </p> p:before {display: block;内容:“一些”;}
...将以与以下文档片段和样式表完全相同的方式呈现:
<h2> Header </h2> h2 {display:磨合;}
<p><span>Some</span> Text </p> span {display: block}
这是同样的原因,为什么它不工作<br>, <img>等(<textarea>似乎是特殊的)。
这并不是因为输入标记本身没有任何内容,而是因为它们的内容超出了CSS的范围。
输入元素是一种叫做替换元素的特殊类型,它们不支持:before和:after这样的伪选择器。
在CSS中,被替换的元素是表示为的元素
超出了CSS的范围。这些是外部物体
表示独立于CSS。典型替换元件
是<img>, <对象>,<视频>或窗体元素,如<textarea>
输入>和<。一些元素,如<audio>或<canvas>被替换
元素只在特定情况下使用。CSS中插入的对象
内容属性是匿名替换的元素。
请注意,这甚至在规范中被引用:
此规范没有完全定义:before的交互
和:替换元素后(如HTML中的IMG)。
更明确地说:
被替换的元素没有::before和::after
伪元素
使用标签标签和我们的方法=,是绑定输入。
如果遵循表单规则,并避免与标签混淆,请使用以下格式:
<style type="text/css">
label.lab:before { content: 'input: '; }
</style>
或者比较(短代码):
<style type="text/css">
div label { content: 'input: '; color: red; }
</style>
形成……
<label class="lab" for="single"></label><input name="n" id="single" ...><label for="single"> - simle</label>
或者比较(短代码):
<div><label></label><input name="n" ...></div>