【问题标题】:Can you set a background image to an image?您可以将背景图像设置为图像吗?
【发布时间】:2013-08-02 18:35:13
【问题描述】:

我正在尝试在 img 标签上设置背景图像。这可能吗?

我的 HTML:

<div id="content">
<img src="my-image.jpg" alt="image" class="img-shadow">
</div>

我的 CSS:

#content img {
    float:right;
    margin:0 0 15px 15px;
    border:4px solid #ffffff;
}
.img-shadow {
    background-image:url('img-shadow.png');
    background-repeat:no-repeat;
    background-position:0 232px;
}

使用 Chrome 的“检查元素”我可以看到背景的路径是正确的。它只是没有显示在浏览器中。下面是我想要的效果。顺便一提。前景图像尺寸为 258x258(带边框),背景图像尺寸为 258x40。

【问题讨论】:

  • 如果你只需要一个阴影然后查看 CSS3 box-shadow 属性
  • @koala_dev 对不起,我没有解释得很好。不过,box-shadow 并不是我想要的效果。见上图。
  • 这些阴影也可以使用一些花哨的 CSS3 :afterbox-shadow 来重现
  • @koala_dev 不需要 css-level-3。您仍然可以使用 :after 和图像来做到这一点。
  • @MilchePatern 对,如果您不介意额外的 HTTP 请求,那实际上可能是这里最好的解决方案

标签: html css image background-image


【解决方案1】:

没有透明度和填充的图像将覆盖其自身的背景图像。具有背景图像的图像确实有效,前提是背景图像有一些间隙可以显示出来。

如果您只想在图像周围显示背景图像,则在图像周围添加填充就足够了。然后,如果您不喜欢填充占用空间,则可以设置相同大小的负边距。

将背景位置设置为0 0 以外的其他值是不够的;无论背景位置设置为什么,背景都不会超出元素所占据的区域(包括内边距,但不包括边框和边距)。

【讨论】:

  • 演示:jsfiddle.net/SzsbC/2 - 我会把它放在答案中,但显然 jsFiddle 链接在不包含代码的情况下是不允许的。我相信这是有充分理由的。 (可能是 Linkrot。)
  • 虽然图像是实心的,但背景位置设置为显示在图像下方一点点。见上图。
  • 背景图片不能显示在元素的区域之外,所以如果你想让背景图片显示在主图之外,你需要明确地给背景图片空间(以填充的形式)。
【解决方案2】:

这是一个使用容器元素和 CSS :after的解决方案

Demo fiddle

HTML

<div id="content">
    <div class="img-container">
        <img src="http://placehold.it/258x258" alt="image" class="img-shadow" />
    </div>
</div>

CSS

#content img {
    border:4px solid #ffffff;
    vertical-align: top;
}
.img-container{
    position: relative;
    display:inline-block;
}
.img-container:after {
    content: url('http://placehold.it/258x40');
    display: block;
    position: absolute;
    top: 100%;
    right: 0;
}

更新

并使用 CSS3 box-shadow

Demo fiddle

.img-container:after {
    content: '';
    display: block;
    position: absolute;
    top: 90%;
    right: 0;
    height: 20px;
    width: 258px;
    -webkit-transform: rotate(3deg);
    -moz-transform: rotate(3deg);
    -o-transform: rotate(3deg);
    -ms-transform: rotate(3deg);
    transform: rotate(3deg);
    -moz-box-shadow: 0 10px 10px rgba(0,0,0,0.5);
    -webkit-box-shadow: 0 10px 10px rgba(0,0,0,0.5);
    box-shadow: 0 10px 10px rgba(0,0,0,0.5);
    z-index: -1;
}

【讨论】:

  • 谢谢@koala_dev,你帮了很多忙!
【解决方案3】:

是的,您可以将背景图像添加到图像中。

.your-image{
    padding-bottom:18px; /* <-- height of texture image */
    background:transparent /* <-- to manage some-transparent.png don't set a bgColor */
    url(txtr-bottom-shadow-divider.png) /* <-- Your bottom right texture */
    no-repeat /* <--  */
    100% /* <-- align right */
    100% /* <-- align bottom */
    scroll  /* <-- avoid Yoda trolling for spam abuse. Joke */;
}

你注意到填充了吗?它是显示背景纹理,否则,图像将占用 100% 的可用空间(宽度和高度),因此您将看不到任何东西。

【讨论】:

  • 您是否使用:after 进行了测试?我相信您可能需要一个 cotainer 元素才能使其工作,并且使用填充会使阴影出现在边框内
  • @koala_dev 不需要外部容器。没错,我的示例不太适合 OP 需求。
【解决方案4】:

是的。只要确保你设置了一些padding,这样背景图像就会被窥视;演示:http://jsfiddle.net/jalbertbowdenii/p6fm4/1/

通过删除所有填充更新小提琴。要获得所需的“窥视”效果,请将您正在窥视的两个角设置为一点点填充,其他的设置为 0。就像这样:http://jsfiddle.net/jalbertbowdenii/p6fm4/5/

【讨论】:

  • display: block 不是必需的。
  • @albert 背景图像位置应使其在实心图像下方达到峰值。见上面想要的效果。
【解决方案5】:

是的,

这是最简单的方法:

在您的 CSS 文件中

body
    {
    background-image:url('img-shadow.png'); 
    background-repeat:repeat-x;
    background-position:center; 
    background-size: 100% 100%;
}

它将为您网站的每个页面设置它

您不需要为背景图像使用 IMG 标记。这是在 css 中设置背景图像的最佳形式,这样您就可以轻松地将项目分层。使用 IMG 标签,您需要确保放置在它上面的所有东西都是绝对定位的,因此它不会移动。这是一个巨大的痛苦。祝你好运

【讨论】:

  • 你做了太多假设+提出了一个非常严格的解决方案。如果 OP 不希望将其应用于所有图像、重复图像等怎么办?
  • @IdeoREX 'body' 不应该是另一个 .selector 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 2015-01-24
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多