假设我想用图像装饰指向某些文件类型的链接。我可以声明我的链接为

<a href='foo.pdf' class='pdflink'>A File!</a>

然后有CSS

.pdflink:after { content: url('/images/pdf.png') }

现在,这工作得很好,除非pdf.png的大小不适合我的链接文本。

我希望能够告诉浏览器缩放:after图像,但我无法找到正确的语法。或者这就像背景图像一样,无法调整大小?

ETA:我倾向于a)将源图像大小调整为“正确的”大小,服务器端和/或b)更改标记,简单地内联提供IMG标记。我试图避免这两件事,但他们听起来会更兼容,而不是试图做纯粹的CSS的东西。我最初的问题的答案似乎是“你有时可以做到”。


当前回答

这里是另一个(工作)解决方案:只是调整你的图像到你想要的大小:)

.pdflink:after {
    display: block;
    width: 20px;
    height: 10px;
    content:url('/images/pdf.png');
}

你需要pdf.png为20px * 10px,这样才能工作。 css中的20px/10px在这里给出块的大小,以便块之后的元素不会与图像混淆

不要忘记保留原始图像的原始大小的副本

其他回答

由于我的另一个答案显然没有被很好地理解,这里有第二次尝试:

有两种方法可以回答这个问题。

实用(给我看看那该死的照片!)

忘掉:后面的伪选择器吧,找一些像

.pdflink {
    min-height: 20px;
    padding-right: 10px;
    background-position: right bottom;
    background-size: 10px 20px;
    background-repeat: no-repeat;
}

理论

问题是:你能对生成的内容进行样式化吗?答案是:不,你不能。关于这个问题,W3C邮件列表上已经进行了长时间的讨论,但到目前为止还没有解决方案。

生成的内容呈现到生成的框中,您可以设置该框的样式,但不能设置内容的样式。不同的浏览器显示出非常不同的行为

#foo{内容:url("bar.jpg");宽度:42 px;高度:42 px;} #foo::before {content: url("bar.jpg");宽度:42 px;高度:42 px;} Chrome浏览器调整了第一个的大小,但使用了图像的固有尺寸 第二点 Firefox和ie不支持第一种方法,而使用了固有维度 第二个 Opera对这两种情况都使用了内在维度

(来自http://lists.w3.org/Archives/Public/www-style/2011Nov/0451.html)

类似地,浏览器在http://jsfiddle.net/Nwupm/1/(生成了多个元素)上显示的结果也非常不同。请记住,CSS3仍处于早期开发阶段,这个问题还没有解决。

注意:after伪元素是一个方框,其中包含生成的图像。没有办法设置图像的样式,但可以设置方框的样式。

以下只是一个想法,上面的解决方案更实用。

.pdflink:after {
    content: url('/images/pdf.png');
    transform: scale(.5);
}

http://jsfiddle.net/Nwupm/

缺点:你需要知道图像的固有尺寸,它会给你留下一些空白,这是我无法摆脱的ATM。

允许调整背景尺寸。但是,您仍然需要指定块的宽度和高度。

.pdflink:after {
    background-image: url('/images/pdf.png');
    background-size: 10px 20px;
    display: inline-block;
    width: 10px; 
    height: 20px;
    content:"";
}

请参见MDN上的完整兼容性表。

你可以像这样改变Before或After元素的高度或宽度:

.element:after {
  display: block;
  content: url('your-image.png');
  height: 50px; //add any value you need for height or width
  width: 50px;
}

你可以使用缩放属性。检查这个jsfiddle