是否可以在CSS中设置img标记的src属性的等价物?

Rak*_*yal 504 html css image

是否可以src在CSS中设置属性值?目前,我正在做的是:

<img src="pathTo/myImage.jpg"/>
Run Code Online (Sandbox Code Playgroud)

我希望它是这样的

<img class="myClass" />
Run Code Online (Sandbox Code Playgroud)
.myClass {
    some-src-property: url("pathTo/myImage.jpg");
Run Code Online (Sandbox Code Playgroud)

我想这样做而不使用CSS中的backgroundbackground-image:属性.

Pac*_*ier 843

使用content:url("image.jpg").

完整的解决方案(Live Demo):

<!doctype html>

<style>
.MyClass123{
	content:url("http://imgur.com/SZ8Cm.jpg");
}
</style>

<img class="MyClass123"/>
Run Code Online (Sandbox Code Playgroud)

经过测试和工作:

  • Chrome 14.0.835.163
  • Safari 4.0.5
  • 歌剧10.6

经过测试和工作:

  • FireFox 40.0.2(观察开发者网络工具,你可以看到URL加载,但图像没有显示)
  • Internet Explorer 11.0.9600.17905(URL从不加载)

  • @EricG,不同的应用程序有不同的要求.如果不符合您的要求,请不要使用它.如果是,请使用它. (34认同)
  • 值得补充的是,即使在支持将`content`分配给`img`的浏览器中,它也会改变其行为.图片开始忽略尺寸属性,在Chrome/Safari中,它会丢失"保存图片"等上下文菜单选项.这是因为赋值`content`有效地将`img`从_empty replacement_元素转换为类似`<span> <img> </ span>`的东西. (10认同)
  • @gotqn,目前只有Chrome Safari Opera. (7认同)
  • 不工作IE10是不行的.我们放弃了IE7(我们不要谈论IE6).IE8也是如果需要的话.但IE9 - IE10 ......没有. (4认同)
  • 没有适当的浏览器支持我不认为这是一个有效的答案,对不起. (3认同)
  • @ XP1:请记住,CSS3的内容特定的草案是一个废弃的草案,这是最后一次修改是十年前在您发布评论的时间 - CSS*2*,有比因为一些更新更.有一个很好的理由Moz/MS没有实现它 - 就它们而言,*模块不存在*,因此`content`仅适用于*:: before`和`:: after` .它正在这里复活:http://dev.w3.org/csswg/css-content上有一个大红色警告,上面写着"未准备好实施" - 所以我不愿意让作者能够使用它浏览器随时都可以. (3认同)
  • 仍然不能在 Firefox 66.0.3 中工作,以防有人想知道,尽管您仍然可以看到对图像的网络请求。 (3认同)
  • content 属性应与伪标记一起使用,请参阅http://www.w3schools.com/cssref/pr_gen_content.asp (2认同)
  • 令人难以置信的是,这确实适用于 Android 2.3,但不适用于 Firefox 30。 (2认同)
  • @EricG - 因为浏览器的怪癖不应该是开发人员的问题.如果浏览器没有正确响应代码,则对于使该浏览器修复的人来说这是一个问题.如果用户在浏览器供应商修复之前使用浏览器,那么这只是用户错误.该解决方案解决了开发人员的问题.其余的由Mozilla和微软的好人来解决. (2认同)
  • 值得注意的是,通过 CSS `content:` 加载的图像的加载优先级比通过 `src` 标签加载的图像低得多(假设 IMG 元素立即可见)。这对于让 IMG 元素在其 src 标签中加载低分辨率占位符以及在 CSS 内容中加载高分辨率图像非常有用。另一方面,如果您完全依赖 CSS `content:` 来加载没有低分辨率占位符的立即可见的高优先级图像(例如网站徽标),则可能会导致问题。 (2认同)
  • 我在媒体查询中使用了这种方法,效果很好。我在 chrome、firefox、edge 和 vivaldi 上测试了它。 (2认同)

Rob*_*bAu 176

我今天发现了一个解决方案(适用于IE6 +,FF,Opera,Chrome):

<img src='willbehidden.png' 
 style="width:0px; height:0px; padding: 8px; background: url(newimage.png);">
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • 图像缩小,直到宽度和高度不再可见.
  • 然后,您需要使用填充"重置"图像大小.这个给出一个16x16的图像.当然,你可以使用padding-left/padding-top来制作矩形图像.
  • 最后,使用背景将新图像放在那里.
  • 如果新的背景图像太大或太小,我建议使用background-size例如:background-size:cover;它使您的图像适合分配的空间.

它也适用于提交输入图像,它们保持可点击状态.

观看现场演示:http://www.audenaerde.org/csstricks.html#imagereplacecss

请享用!

  • 在这种情况下它是.但是,有些情况下,您无法控制HTML并希望操纵IMG.这个解决方案也有效 (11认同)
  • 必须把它交给你,这是一个令人着迷和聪明,但空DIV更直接. (8认同)
  • @RobAnu:这很有效 - [jsfiddle](http://jsfiddle.net/TimPietrusky/R7gQn) (6认同)
  • 没有对此答案进行排名,这可能是某些应用程序的解决方案,但此方法有一定的局限性.您无法控制图像文件的渲染尺寸.在正常使用中,如果在源中指定了文件,则可以控制图像的高度 - 宽度.但这与带有背景图像的div基本没什么不同,如果你的div比图像大,那你运气不好. (3认同)
  • 如果图像具有`src`属性,则这是您需要的技术.+1 - 帮了我很多忙 (2认同)
  • 聪明,但应该注意的是,此解决方案不会影响"保存图像"或"复制图像URL"操作的结果......在这些情况下,您仍将获得`src`属性中定义的图像. (2认同)

CSᵠ*_*CSᵠ 107

从CSS设置图像的可能方法的集合


CSS2:after伪元素或较新的语法::afterCSS3与沿content:属性:

第一个W3C建议书:级联样式表,2级CSS2规范 1998年5月12日
最新W3C建议书:选择器级别3 W3C建议书 2011年9月29日

这种方法追加仅仅满足一个元素文档树内容.

注意:一些浏览器通过实验content性地直接在一些元素选择器上呈现属性,而不管最新的W3C推荐定义:

适用于::before:after伪元素

CSS2语法(向前兼容):

.myClass:after {
  content: url("somepicture.jpg");
}
Run Code Online (Sandbox Code Playgroud)

CSS3选择器:

.myClass::after {
  content: url("somepicture.jpg");
}
Run Code Online (Sandbox Code Playgroud)

默认渲染:原始大小(不依赖于显式大小声明)

此规范未完全定义:替换元素(例如HTML中的IMG)之前和之后的交互.这将在未来的规范中更详细地定义.

但即使是在写这篇文章的时候,用行为<IMG>标签尚未定义,虽然它可以被用在黑客攻击和不符合标准的方式,与使用<img>不推荐!

伟大的候选人方法,见结论......



CSS1background-image:财产:

第一个W3C建议:层叠样式表,1级, 1996年12月17日

此属性设置元素的背景图像.设置背景图像时,还应设置在图像不可用时使用的背景颜色.当图像可用时,它覆盖在背景颜色的顶部.

这个属性从CSS开始就已经存在,但它值得一提.

默认渲染:原始大小(无法缩放,仅定位)

但是,

background-size:通过允许多个缩放选项,CSS3的属性得到了改进:

最新的W3C状态:候选推荐 CSS背景和边界模块级别3 2014年9月9日

[length> | <percentage> | auto ]{1,2} | cover | contain

但即使使用此属性,也取决于容器大小.

仍然是一个很好的候选方法,见结论......



CSS2list-style:财产以及display: list-item:

第一个W3C建议:层叠样式表,2级CSS2规范 1998年5月12日

list-style-image: 属性设置将用作列表项标记的图像(项目符号)

列表属性描述了列表的基本可视化格式:它们允许样式表指定标记类型(图像,字形或数字)

display: list-item- 此值使元素(例如,<li>在HTML中)生成主块框和标记框.

.myClass {
    display: list-item;
    list-style-position: inside;
    list-style-image: url("someimage.jpg");
}
Run Code Online (Sandbox Code Playgroud)

速记CSS :( <list-style-type> <list-style-position> <list-style-image>)

.myClass {
    display: list-item;
    list-style: square inside url("someimage.jpg");
}
Run Code Online (Sandbox Code Playgroud)

默认渲染:原始大小(不依赖于显式大小声明)

限制:

  • 继承将把"list-style"值从OL和UL元素传递给LI元素.这是指定列表样式信息的推荐方法.

  • 它们不允许作者为列表标记指定不同的样式(颜色,字体,对齐等)或调整其位置

此方法也不适用于<img>标记,因为无法在元素类型之间进行转换,这是有限的,不兼容的hack,不适用于Chrome.

好的候选人方法,见结论......



CSS3border-image:房产推荐:

最新的W3C状态:候选推荐 CSS背景和边界模块级别3 2014年9月9日

背景型依赖于在一个比较奇特方式指定尺寸的方法(用于该用途的情况下,没有定义)和回退边框属性迄今(例如border: solid):

请注意,即使它们永远不会导致滚动机制,也可能会由祖先或视口剪切开始图像.

这个例子说明了图像被构成仅作为右下角装饰:

.myClass {
    border: solid;
    border-width: 0 480px 320px 0;
    border-image: url("http://i.imgur.com/uKnMvyp.jpg") 0 100% 100% 0;
}
Run Code Online (Sandbox Code Playgroud)

适用于:所有元素,但内部表元素除外 border-collapse: collapse

它仍然不能改变一个<img>标签src(但这里是一个黑客),而是我们可以装饰它:

.myClass {
    border: solid;
    border-width: 0 96px 96px 0;
    border-image: url("http://upload.wikimedia.org/wikipedia/commons/9/95/Christmas_bell_icon_1.png") 
                  0 100% 100% 0;
}
Run Code Online (Sandbox Code Playgroud)
<img width="300" height="120" 
     src="http://fc03.deviantart.net/fs71/f/2012/253/b/0/merry_christmas_card_by_designworldwide-d5e9746.jpg" 
     class="myClass"
Run Code Online (Sandbox Code Playgroud)

标准传播后要考虑的良好候选方法.



CSS3element()符号工作草案值得一提:

注意:该element()函数仅重现引用元素的外观,而不是实际内容及其结构.

<div id="img1"></div>

<img id="pic1" src="http://i.imgur.com/uKnMvyp.jpg" class="hide" alt="wolf">
<img id="pic2" src="http://i.imgur.com/TOUfCfL.jpg" class="hide" alt="cat">
Run Code Online (Sandbox Code Playgroud)

我们将使用呈现内容两者之一的隐藏图像来改变图像背景中的#img1基础上,ID选择通过CSS:

#img1 {
    width: 480px; 
    height: 320px; 
    background: -moz-element(#pic1) no-repeat;
    background-size: 100% 100%;
}

.hide {display: none}
Run Code Online (Sandbox Code Playgroud)

注意:它是实验性的,仅适用-moz于Firefox中的前缀,仅适用于backgroundbackground-image属性,也需要指定大小.


结论

  1. 任何语义内容或结构信息都以HTML格式提供.
  2. 样式和表示信息在CSS中.
  3. 出于SEO目的,不要在CSS中隐藏有意义的图像.
  4. 打印时通常禁用背景图形.
  5. 自定义标签可以从CSS使用和设置样式,但没有Javascript或CSS 指导,Internet Explorer的原始版本无法理解.
  6. SPA(单页应用程序)按照设计通常在后台合并图像

话虽如此,让我们探索适合图像显示的HTML标签:

所述<li>元素[HTML4.01 +]

list-style-imagewith display: list-item方法的完美用法.

<li>元素可以是空的,可以流动的内容,它甚至允许真实省略</li>结束标记.

.bulletPics > li {display: list-item}
#img1 {list-style: square inside url("http://upload.wikimedia.org/wikipedia/commons/4/4d/Nuvola_erotic.png")}
#img2 {list-style: square inside url("http://upload.wikimedia.org/wikipedia/commons/7/74/Globe_icon_2014-06-26_22-09.png")}
#img3 {list-style: square inside url("http://upload.wikimedia.org/wikipedia/commons/c/c4/Kiwi_fruit.jpg")}
Run Code Online (Sandbox Code Playgroud)
<ul class="bulletPics">
    <li id="img1">movie</li>
    <li id="img2">earth</li>
    <li id="img3">kiwi</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

限制:难以定型(width:float:可能有帮助)

所述<figure>元素[HTML5 +]

图元素表示一些流内容,可选地带有标题,它是自包含的(如完整的句子),并且通常从文档的主流中引用为单个单元.

该元素有效且没有内容,但建议包含a <figcaption>.

因此,该元素可用于注释插图,图表,照片,代码清单等.

默认渲染:元素右对齐,左右填充!

所述<object>元素[HTML4 +]

要包含图像,作者可以使用OBJECT元素或IMG元素.

data属性是必需的,可以将有效的MIME类型作为值!

<object data="data:x-image/x,"></object>
Run Code Online (Sandbox Code Playgroud)

注意:使用<object>CSS 中的标记的一个技巧是设置一个 自定义的有效MimeType,x-image/x后跟没有数据(值在所需的逗号后没有数据,)

默认渲染:300 x 150px,但可以在HTML或CSS中指定大小.

<SVG>标签

需要支持SVG的浏览器并具有 <image>光栅图像元素

所述<canvas>元素[HTML5 +].

width属性默认为300,height属性默认为150.

<input>与元素type="image"

限制:

...该元素应该看起来像按钮,表示该元素是一个按钮.

当没有文字时,Chrome会跟随并呈现一个4x4像素的空方格

部分解决方案,设置value=" ":

<input type="image" id="img1" value=" ">
Run Code Online (Sandbox Code Playgroud)

还要注意HTML5.1中即将推出的<picture>元素,是目前的工作草案.

  • 这是一个正确的答案!现在只需要编辑问题. (5认同)

Emm*_*ery 25

我用这个CSS的空div解决方案:

#throbber {
    background-image: url(/Content/pictures/ajax-loader.gif);
    background-repeat: no-repeat;
    width: 48px;
    height: 48px;
    min-width: 48px;
    min-height: 48px;
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<div id="throbber"></div>
Run Code Online (Sandbox Code Playgroud)


Eri*_*icG 14

我找到了比建议的解决方案更好的方法,但确实使用了背景图像. 符合方法(无法确认IE6) 致谢:http://www.kryogenix.org/code/browser/lir/

<img src="pathTo/myImage.jpg"/>
Run Code Online (Sandbox Code Playgroud)

CSS:

img[src*="pathTo/myImage.jpg"] {

    background-image: url("mynewimg.jpg"); /* lets say 20x20 */
    width: 20px;

    display:inline-block;
    padding: 20px 0 0 0;
    height: 0px !important;

    /* for IE 5.5's bad box model */
    height /**/:20px;
}
Run Code Online (Sandbox Code Playgroud)

没有看到旧图像,新的图像被视为预期.


以下简洁的解决方案仅适用于webkit

img[src*="pathTo/myImage.jpg"] {

    /* note :) */
    content:'';
    display:inline-block;

    width: 20px;
    height: 20px;
    background-image: url("mynewimg.jpg"); /* lets say 20x20 */

}
Run Code Online (Sandbox Code Playgroud)


小智 13

他们是对的.IMG是一个内容元素,CSS是关于设计的.但是,当您为设计目的使用某些内容元素或属性时呢?我在我的网页上有IMG,如果我改变样式(CSS)必须改变.

那么这是一个用于定义CSS风格的IMG表示(没有真正的图像)的解决方案.

  1. 创建1x1透明gif或png.
  2. 将IMG的"src"分配给该图像.
  3. 使用CSS样式中的"background-image"定义最终演示文稿.

它像一个魅力:)

  • -1即使你的答案不错,他也特别提到他不想使用`background*` (5认同)

小智 11

这是一个非常好的解决方案 - > http://css-tricks.com/replace-the-image-in-an-img-with-css/

Pro(s)和Con(s):(
+)适用于矢量具有相对宽度/高度的图像(RobAu答案不能处理的东西)
(+)是跨浏览器(也适用于IE8 +)
(+)它只使用CSS.因此无需修改img src(或者如果您没有访问/不想更改已存在的img src属性).
( - )对不起,它确实使用了后台css属性:)


小智 9

您可以在HTML代码中定义2个图像,然后使用它们display: none;来决定哪个图像可见.


cle*_*tus 7

不,你不能通过CSS设置图像src属性.你可以得到的最接近的是,background或者background-image.我不建议这样做,因为它有点不合逻辑.

但是,如果您定位的浏览器能够使用它,则可以使用CSS3解决方案.content:url 按照Pacerier的回答中所述使用.您可以在下面的其他答案中找到其他跨浏览器解决方案.