div+background-image和img标签的选择

本文探讨了HTML中img标签与div+background-image在显示图片时的区别,包括浏览器上下文、图片显示效果及应用场景,帮助开发者更好地选择合适的图片展示方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

img标签和div+background-image的选择

前言

  一般情况下,标签和div+background-image都能在块级元素中显示图片,之前就在想,这两种方式有什么区别。通过这两天的实践,逐渐摸清了他们之间的区别以及适用情况,在这篇文章中总结他们的使用要点。

区别

浏览器上下文的区别

  使用div+background-image实现图片显示的时候,该块级元素的上下文为普通的块级上下文

div上下文

而使用img显示图片的时候,上下文为img上下文,可以对图片进行另存为等操作。

img上下文

块大小对图片显示的区别

  下面例子中,img和div的大小为600px*350px, 图片大小为128px*128px
div+background-image的默认样式如下图所示
div默认样式

默认样式有几个注意点

  1. 当原始图片比设置的宽高小,会在块中重复显示以铺满块。
  2. 当原始图片比设置的宽高大,图片会在块中截断。

div+background-image可以通过backgroung-sizebackground-rpestbackground-positionbackground-originbackground-clip 等CSS样式来调整显示的样式,当然也可以调整为和img的默认样式一样

div{
    background-size: 600px 350px;
}

div+background-image通过几种样式的组合可以调整出各种各样的显示效果,

使用img标签显示图片的话,图片实际显示的宽高就是设定的宽高,没有别的办法来设定显示的样式,可以看出一旦设定的宽高比和原来图片的宽高比不一致,显示出的图片就会有拉伸的现象。

img默认样式

但当你只设置宽或只设置高,高或者宽就会按照原来的宽高比自动设置。

选择

选择div+background-image的情况

  根据div+background-image的特性可以得出选择使用这种方法实现显示图片的情况

  1. 图片用来当作块的背景的情况,这也是这种方法最原始的用法
  2. 由于这种方法的上下文是普通的块级上下文,没有图片另存为等操作,所以可以用于不希望用户能轻易保存图片的情况
  3. 可以用于宽高给定的同时不希望图片拉伸且允许图片截断的情况

选择img标签的情况

  img是一个语义化标签,在刚接触html+css的时候肯定有接触到语义化的概念以及渐进增强的概念,虽然现在的前端都不太注重渐进增强,但选用img标签能很好的适应语义化和渐进增强。选用它的情况如下

  1. 有明确的语义化要求的情况下选用img标签
  2. 图片是页面的组成部分而不是修饰部分的时候选用img标签
  3. 显示图片只给定宽或高且不能截断图片并要保证图片宽高比的情况下选用img标签

总结

  这是我最近在做html图片显示方面的总结,可能有一些地方不不正确或这不完善,希望读者能够指出,不吝赐教

### CSS 实现 Div 背景图片虚化效果 为了实现 `div` 元素背景图片的模糊效果,可以通过组合使用伪元素(`:before` 或 `:after`)、CSS 属性 `filter: blur()` 其他样式来完成。以下是具体方法: #### 使用伪元素滤镜属性 通过设置一个伪元素覆盖在 `div` 上,并对其应用模糊滤镜,从而达到背景图虚化的视觉效果。 ```css .div-container { position: relative; width: 300px; height: 200px; overflow: hidden; } .div-container::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-image: url('img_tree.png'); background-size: cover; background-position: center; filter: blur(5px); /* 设置模糊程度 */ z-index: -1; /* 将其置于内容层之下 */ } ``` 上述代码中定义了一个容器 `.div-container` 并为其设置了固定宽高以及相对定位[^2]。接着创建了该容器的一个伪元素 `::before` 来承载实际显示的背景图像并施加模糊过滤器 `filter: blur()`. 需要注意的是,在某些浏览器版本下可能需要额外添加前缀 `-webkit-filter:` 才能正常工作于旧版 Webkit 引擎之上运行的应用程序里[^3]. 另外一种方式则是直接作用于目标 DIV 自身而非借助伪类: ```css .blur-background { width: 300px; height: 200px; background-image: url('img_tree.png'); background-size: cover; background-position: center; filter: blur(8px); } ``` 这种方式简单明了,但是会连同内部文字一起被影响变得不清晰所以通常推荐第一种方案. 最后提醒一点关于性能优化方面如果页面中有大量这样的动态变化或者动画可能会引起重绘开销较大因此考虑采用硬件加速技术如 transform 或者 opacity 这些触发 GPU 渲染而不是单纯依靠软件合成器来进行操作.[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若即

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值