是否可以不显示元素,如display:none,但继续显示:before和/或:after?
我试过
#myspan {display:none}
#myspan:after {display:inline; content:"*"}
但这没有用。我试图让 CSS 用星号替换跨度的内容,而不引入 jQuery。
是否可以不显示元素,如display:none,但继续显示:before和/或:after?
我试过
#myspan {display:none}
#myspan:after {display:inline; content:"*"}
但这没有用。我试图让 CSS 用星号替换跨度的内容,而不引入 jQuery。
不,这是不可能的。
伪元素呈现为子元素:
<span id="myspan">whatever<after></span>
并display:none
隐藏包含所有子元素的元素。
在我看来,JavaScript 是你最好的选择。即使没有 jQuery 更改文本也不难:
document.getElementById("myspan").innerHTML = "*";
但是,如果你真的想用 CSS 来做,你可以使用负数text-indent
来隐藏文本和relative
定位以显示星号:
#myspan {
text-indent: -9999px;
display: block;
}
#myspan:before {
content: '*';
position: absolute;
top: 0;
left: 9999px;
}
</p>
这绝对是可能的。使用font-size: 0px
代替display: none
:
#myspan {
/* display: none; */
font-size: 0px;
}
#myspan:after {
/* display: inline; */
font-size: 16px;
content: "*"
}
在这种情况下,您只能将 px/pt 用于显示文本字体单位。
我认为一个非常简单的方法是利用可见性属性。但请注意,“隐藏”元素仍会占用空间。但是,如果您对此感到满意,只需将父元素设置为“隐藏”,将伪元素设置为“可见”即可:
#myspan {visibility:hidden}
#myspan: after {visibility:visible}
处理好能见度后,请随意摆弄这个位置,以避免多余的空间。
就像是,
myspan {
visibility: hidden;
position: relative;
}
myspan:after {
visibility: visible;
position: absolute;
left: 10px;
}
采用:
#myspan {font-size:0}
#myspan:after {font-size:16px; content:"*"}
如果您指定了最小字体大小,它将不起作用(浏览器设置)。我只会将此方法用于上一个和下一个按钮,以便屏幕阅读器将读取“上一个”,但您想用 \276e 替换它。因此,请计划文本显示时的外观。
正如@bookcasey 所解释的,display: none
在元素上进行设置也不可避免地隐藏了:after
or:before
伪元素(因为它们实际上并不是在元素之后或之前显示的东西,而是在元素内部、在其真实内容之后或之前添加的内容)。
但是,根据旧的 (2003) CSS3 Generated and Replaced Content Module草案,通过简单地设置元素,用生成的内容替换元素的真实内容的目标原则上是可能的,例如content
#myspan { content: "*"; }
到目前为止,只有 Opera 支持这一点。但是 WebKit 浏览器也支持替换内容是图像的特殊情况:
#myspan { content: url(asterisk.png); }
这是可能的,但您需要使用visibility:hidden
而不是display:none
.
有关详细信息,请参阅以下问题中的答案: 如何用 CSS 替换文本?
您需要将它们分成多个内容 DIV 块,因为样式是由子元素继承的。因此,一旦定义了父显示样式,就不可能了。