当前位置: 首页 > 面试题库 >

为什么:before和:after伪元素需要'content'属性?

韶兴德
2023-03-14
问题内容

在以下情况下,为什么:after选择器需要content属性才能起作用?

.test {

    width: 20px;

    height: 20px;

    background: blue;

    position:relative;

}



.test:after {

    width: 20px;

    height: 20px;

    background: red;

    display: block;

    position: absolute;

    top: 0px;

    left: 20px;

}


<div class="test"></div>

请注意,直到您指定content属性,您才看不到伪元素:

.test {

    width: 20px;

    height: 20px;

    background: blue;

    position:relative;

}



.test:after {

    width: 20px;

    height: 20px;

    background: red;

    display: block;

    position: absolute;

    top: 0px;

    left: 20px;

    content:"hi";

}


<div class="test"></div>

为什么这是预期的功能?您可能会认为显示块将迫使该元素显示出来。奇怪的是,您实际上可以在Web调试器中看到样式。但是,它们不会显示在页面上。


问题答案:

以下是各种W3C规范和草案的参考:

选择器级别3

伪元素’:before’和’:after’可用于在元素内容之前或之后插入生成的内容。

:before和:after伪元素

作者使用:before和:after伪元素指定生成内容的样式和位置。顾名思义,:before和:after伪元素指定元素的文档树内容之前和之后的内容位置。
“ content”属性与这些伪元素一起指定了要插入的内容。

内容属性

初始:

该属性与:before和:after伪元素一起使用以在文档中生成内容。值具有以下含义:

- 不产生伪元件。

应用于:: before和:: after伪元素的样式会影响所生成内容的显示。该content属性
生成的该内容,如果不存在该属性,content: none则假定为默认值,这意味着没有样式可以应用。

如果您不想重复content:'';多次,则可以简单地通过全局样式化CSS中所有:: before和::
after伪元素的方式来覆盖此内容:

::before, ::after {
    content:'';
}


 类似资料:
  • 问题内容: 我正在尝试将伪元素与元素一起使用。 考虑一下HTML和CSS … HTML CSS 这不会产生预期的效果(已在Chrome 13和Firefox 6中测试)。但是,它可以使用或元素。 为什么不? 有没有一种方法可以使伪元素与元素一起使用? 问题答案: 规范说 … 注意。该规范并未完全定义替换元素(例如HTML中的IMG)以及与替换元素的交互。这将在以后的规范中更详细地定义。 我猜这意味

  • 问题内容: 我正在尝试为HTML5中的提出一些好的默认样式,并尝试了以下方法: las,内容从不显示。对于伪元素,双冒号和单冒号都不是问题。我都尝试过。拥有一个伪元素和一个伪类也不是问题。我已经尝试过不使用和了。在Chrome,Safari和Firefox中,我得到了相同的行为(Firefox没有和类,但是我尝试了不使用它们。) 在伪元素工作细,,,和元素-其中一些是块元件和一些是内联。 因此,我

  • 问题内容: 在此MS兼容性表上,它说IE9不支持伪元素和,但是当我尝试时,它似乎支持伪元素… 难道我做错了什么?我认为并且将是隐藏IE9中内容的好工具,而实际上却不是。 问题答案: IE8和更高版本支持CSS2伪元素和(具有传统的单冒号表示法)。它们不是CSS3的新功能。 另一方面,双冒号表示法是CSS3的新功能。IE9 确实 支持and和CSS1伪元素and的新符号。然而,展望未来,没有新的伪元

  • 问题内容: 我正在使用和CSS伪元素,并且它在 IE8 和所有现代浏览器中都可以正常工作,但在 IE7中 却不能正常工作。在 IE7中 是否存在已知的解决方法? 问题答案: 我在项目中使用的是IE8.js(http://code.google.com/p/ie7-js/),我必须将其删除,因为它在10/15秒内阻止了IE7。 为了保留用:after和:before伪元素生成的内容,而没有IE8.j

  • 问题内容: 我尝试通过多种方式通过jQuery隐藏:after伪类,但没有成功,但我找到了另一种解决方案,方法是在div下添加一个包含:after内容的空div,然后将其完全隐藏,产生相同的效果。 但是我只是好奇是否有人设法找到一种隐藏:after或:before东西的方法。这是我尝试的无效的方法。 只是为了给您提供上下文,我有一个包含搜索表单等的div,并且当搜索处于活动状态时,我想在div下启

  • 问题内容: 如果我有一个光子列表,如何使用CSS伪元素:before {content:’‘}来影响?下面有三个选项,我想在每个选项之前插入文本。 我知道可以使用javascript / jQuery完成此操作,但是CSS是否可行? 问题答案: 实际上,和和伪元素在子元素之前/之后添加了一个子节点,因此,这对不能包含子节点的任何元素都无效。 (大致)等同于: 如果要更新文本值,则需要使用JavaS