我可以在CSS中更改图像的高度:在/之后:伪元素吗?

Cod*_*rer 226 css pseudo-element

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

<a href='foo.pdf' class='pdflink'>A File!</a>
Run Code Online (Sandbox Code Playgroud)

然后有CSS喜欢

.pdflink:after { content: url('/images/pdf.png') }
Run Code Online (Sandbox Code Playgroud)

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

我希望能够告诉浏览器缩放:after图像,但我不能为我的生活找到正确的语法.或者这就像背景图像,只是不能调整大小?

ETA:我倾向于a)将源图像的大小调整为"正确"大小,服务器端和/或b)更改标记以简单地提供内联的IMG标记.我试图避免这些事情,但他们听起来比试图纯粹用CSS做的东西更兼容.答案我原来的问题似乎是"你可以排序的做到这一点,有时".

Ans*_*osa 343

background-size允许调整.但是,您仍然需要指定块的宽度和高度.

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

请参阅MDN上的完整兼容性表.

  • 这种技术还需要设置`width:10px; 身高:20px;`看图像. (23认同)
  • 如果是这样的话,你根本不应该使用`:after`.[在IE8下面不支持.](https://developer.mozilla.org/en/CSS/:after#Browser_compatibility) (14认同)
  • (对于`:before`)我还需要`position:absolute`和`left:-10px`. (4认同)
  • 这很好,除了我们的大多数客户都在IE 7或8(公司废话,对不起). (3认同)
  • 还要注意这确实有效,但**只有**具有特定的`background-image`属性,简单的`背景将无效. (3认同)
  • 编辑后添加了“ display:inline-block”(已在Chrome中对其进行了修复),伪元素默认为“ display:inline”,因此未应用“ height”和“ width”,从而使元素仅与其文本内容一样大(这是空的) (2认同)
  • 我认为更改为(background-size:100%100%;)将改善代码,因此您只需更改“ width”和“ height”样式即可设置图像大小。 (2认同)

use*_*621 89

请注意,:after伪元素是一个框,后者又包含生成的图像.无法为图像设置样式,但您可以设置框的样式.

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

.pdflink:after {
    content: url('/images/pdf.png');
    transform: scale(.5);
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/Nwupm/

缺点:你需要知道图像的内在尺寸,它会留下一些空白,我无法摆脱ATM.

  • zoom:0.5也值得考虑. (6认同)

use*_*621 35

由于我的其他答案显然不是很清楚,这是第二次尝试:

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

实用(只是告诉我该死的照片!)

忘记:after伪选择器,去寻找类似的东西

.pdflink {
    min-height: 20px;
    padding-right: 10px;
    background-position: right bottom;
    background-size: 10px 20px;
    background-repeat: no-repeat;
}
Run Code Online (Sandbox Code Playgroud)

理论

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

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

#foo         {content: url("bar.jpg"); width: 42px; height:42px;}  
#foo::before {content: url("bar.jpg"); width: 42px; height:42px;}
Run Code Online (Sandbox Code Playgroud)

Chrome会调整第一个的大小,但会使用第二个图像的内在尺寸

firefox和ie不支持第一个,并使用第二个内在维度

opera使用两种情况的内在维度

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

类似地,浏览器在诸如http://jsfiddle.net/Nwupm/1/之类的内容上显示出非常不同的结果,其中生成了多个元素.请记住,CSS3仍处于早期开发阶段,这个问题还有待解决.


San*_*nez 11

您应该使用背景而不是图像.

.pdflink:after {
  content: "";
  background-image:url(your-image-url.png);
  background-size: 100% 100%;
  display: inline-block;

  /*size of your image*/
  height: 25px;
  width:25px;

  /*if you want to change the position you can use margins or:*/
  position:relative;
  top:5px;

}
Run Code Online (Sandbox Code Playgroud)


小智 10

是的,最初的问题是八年前提出的,但它实际上一如既往地与今天相关。现在,我已经在 ::before 和 ::after 的这个问题上从一个支柱到另一个帖子,大约一周了,它一直让我转过弯。

从这个页面以及其他关于该主题的页面 - 我终于将它们放在一起并在伪标签中缩小了图像的大小。

** 运行 note .colnav 只是我的容器类,它包含一组 < UL > 和 < LI > 标签,其中包含一组 < a href。

下面是代码(完整)

.colnav li.nexus-button a:hover:before {   
    background-image: url('/images/fleur-de-lis.png');
    background-size: 90px 20px;
    background-repeat: no-repeat;
    width: 130px;
    height: 20px;
    margin-left: -120px;
    margin-top: -3px;
    transform: scale(1.5);
    content: "";
    position: absolute;
}
Run Code Online (Sandbox Code Playgroud)

图像文件的尺寸为 120 x 80,图片被缩小到 90x 20,然后它非常适合 html href 标签后面,并且所有这些都与最后的位置:绝对声明结合在一起。


小智 6

diplay: block; 没有任何影响

positionin 也很奇怪地根据前端基础工作,所以要小心

body:before{ 
    content:url(https://i.imgur.com/LJvMTyw.png);
    transform: scale(.3);
    position: fixed;
    left: 50%;
    top: -6%;
    background: white;
}
Run Code Online (Sandbox Code Playgroud)


Usm*_*med 5

您可以设置元素本身的宽度和高度,而不是设置背景图像的宽度和高度。

.pdflink::after {
  content: '';
  background-image: url(/images/pdf.png);
  width: 100px;
  height: 100px;
  background-size: contain;
}
Run Code Online (Sandbox Code Playgroud)