Using data attributes in css before/after for a background image

笑着哭i 提交于 2019-12-10 21:22:02

问题


So I have HTML markup that looks like this:

<a href="#" data-icon="data:image/png;base64,iVKAInsdal...">Some link</a>

Then I want to use that data-icon in my CSS to display as the base 64 background image. Something like:

a:before {
    content: "";
    width: 16px;
    height: 16px;
    padding-left: 16px;
    background: url(attr(data-icon)); // this doesn't work
}

Is there any way to do this?


回答1:


This IS possible!

(but not how you may think)

a{
    background-image:url(https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRrlZZQ3MwNcconkIeLX3_nS_IV81gJ8rincQsipqXGsiBkPmCX);
    background-repeat:no-repeat;
    background-position:1000px 1000px;
}

a:before {
    content: '';
    width: 16px;
    height: 16px;
    padding-left: 16px;
    background-image: inherit;
    background-position:0px 0px;
}

Unfortunately what you are attempting to do will not work, attr is only applicable to the content property.

The only possible alternative would be to give the parent a background image, then set background-image on the pseudo element to inherit. If you set the parent elements background-position outside its boundaries then the psuedo elements to zero, it will give the same effect of no image on the parent, but an image on the psuedo.




回答2:


Try:

content: attr(data-icon);

Codepen

JsFiddle

This will only work for text based data attributes though and not images.

You can apply a normal background, but only content allows attr.



来源:https://stackoverflow.com/questions/22816065/using-data-attributes-in-css-before-after-for-a-background-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!