12

这是对我最近的问题的补充: 是否可以使用伪元素使包含元素环绕绝对定位的元素(如 clearfix)?

JSFiddle:http: //jsfiddle.net/derekmx271/T7A7M/

我正在尝试使用伪元素来“清除”绝对定位的图像。我已经尽可能地将相同的图像显示在幻灯片后面,但似乎无法将宽度应用于插入的图像。我疯了吗,或者你不能对内容为内容的伪元素应用宽度:url(img/image.jpg)?我尝试了不同的显示变体:块等,但无济于事......

#slider ul:after {
  content: url(http://www.cs7tutorials.com/img/slide1.jpg);
  display: block;
  position:relative;
  width:70px;
}

我需要将伪元素图像的宽度设置为 100%,将最大宽度设置为 800px,以便它具有与我的幻灯片相同的尺寸。

4

3 回答 3

28

content你没疯:用url(), image(), image-set(),element()或 CSS 渐变插入的图片确实不可能改变尺寸。图像始终按原样呈现。这称为替换内容或替换元素(除非我们在这里不讨论元素)。

但是,由于可以使用CSS2.1 规范第 10 节中的width描述height来调整被替换元素的大小,这引发了为什么这些属性似乎不适用于这里的问题。看起来,这个问题的答案是属性确实适用,但适用于伪元素框——你可以通过给你的伪元素一个背景颜色来看到这一点。图像不是替换伪元素框本身,而是呈现为伪元素框的元素,因此根本无法设置样式(因为它需要另一个不存在的伪元素)。

这就引出了另一个问题:为什么它不完全替换伪元素框?不幸的是,CSS2.1 根本没有指定这种行为,因此达成一致的实现是将内容呈现为伪元素框的子元素

CSS2.1 并没有真正明确定义 ::before 和 ::after 上的“内容”处理模型,但 CSS 2.1 中的信息示例,“内容”指定事物列表的事实,以及对一致性的渴望导致 UA 行为如下:'content' 属性指定成为 ::before 或 ::after 框的子项的事物列表。

-鲍里斯

希望这将在 CSS Generated Content level 3 中得到进一步解决,重写工作刚刚开始。

同时,如果您希望能够调整:after伪元素和生成的图像的大小,则需要将其应用为背景图像,并且——假设浏览器支持不是问题——使用background-sizewithwidthheight缩放它(基于这些属性适用于伪元素框的理解)。

于 2013-02-20T12:01:31.410 回答
0

看看演示使用background-image:http: //jsfiddle.net/T7A7M/12/

于 2013-02-20T11:57:13.583 回答
0

您可以设置宽度或高度,但不能同时设置,方法是使用display: flex并设置flex-direction到要设置的尺寸的相反轴。

例如:

.setWidth::before {
    content: url("myImg.png")
    display: flex;
    flex-direction: column;
    width: 200px;
}

.setHeight::before {
    content: url("myImg.png")
    display: flex;
    flex-direction: row;
    height: 200px;
}

演示在这里。

于 2021-05-04T21:00:21.270 回答