vue踩坑--background-image路径问题

        在前端开发中,background-image属性非常常见,有很多时候需要使用内联样式来绑定此属性,但是在vue项目中,如果如下面代码填写路径会找不到图片

        项目中图片都放在src/img文件夹,img和background-image引用都用相对路径,即../../../这种形式。在项目打包build设置路径assetsPublicPath:'./',然后哪些没有转成base64的背景图都失效了。

<script type="text/javascript">
	import TemplateNav from './TemplateNav'
 
	export default {
		name: 'FooterNav',
		components: {
			'TemplateNav': TemplateNav
		},
		data() {
			return {
				//使用相对路径会找不到图片
				shouye:'url(../../assets/images/shouye/index2x.png)',
				fenlei:'url(../../assets/images/shouye/fenlei2x.png)',
				search:'url(../../assets/images/shouye/search2x.png)',
				shopcart:'url(../../assets/images/shouye/gouwuche2x.png)',
				mine:'url(../../assets/images/shouye/I2x.png)'
			}
		},
		props: {
			num: {
				default: '0'
			}
		},
	}
</script>

 报错如下:404(Not Found)

 正确的路径应该如下面这样

data() {
	return {
		shouye:'url(' + require('../../assets/images/shouye/index2x.png') + ')',
		fenlei:'url(' + require('../../assets/images/shouye/fenlei2x.png') + ')',
		search:'url(' + require('../../assets/images/shouye/search2x.png') + ')',
		shopcart:'url(' + require('../../assets/images/shouye/gouwuche2x.png') + ')',
		mine:'url(' + require('../../assets/images/shouye/I2x.png') + ')'
	}
},

使用require()方法,require()是node.js方法。

结合实际情况,处理方法如下:

img标签:

<img :src="require('../../../assets/images/icons/icon-add-pc.svg')">

背景图:

<div :style="{backgroundImage:'url('+require('../../../assets/images/icon/icon-add-pc.svg')+')'}"></div>


//i标签
<i :style="{backgroundImage:'url('+require('../../assets/home/ic-0-01.svg')+')'}"></i>

 扩展:图片格式(base64)

        图片的base64编码就是可以将一张图片数据编码成一串字符串,使用该字符串代替图像地址url。

使用base64图片的优点:

  1. 减少http请求次数
  2. 采用base64的图片随着页面一起下载,因此不会存在跨域请求的问题
  3. 没有图片更新要上传图片,因此不会造成清理图片缓存的问题。

使用base64图片的缺点:

  1. 增加css文件的大小,比http请求大30%左右
  2. 浏览器兼容性,支持ie10及以上
  3. 解析css的时间增长

base64图片与csssprites技术

        精灵图技术就是将图片合成一个大的图片,将多次图片请求合成一张大的请求,以此来达到减少http请求的次数。

对于base64图片常见误区

        base64虽然有优点,但是其缺点也很明显,在使用上存在一些明显的缺陷

  1. 使用base64不代表性能优化,使用base64减少了http请求,但是增加了css文件的体积,css文件体积增大意味着CPR的阻塞
  2. CPR(Critical Rendering Path,关键渲染路径):当浏览器从服务器接收到一个HTML页面的请求时,到屏幕上渲染出来要经过很多个步骤。浏览器完成这一系列的运行,或者说渲染出来我们常常称之为“关键渲染路径”。
  3. 图片不会导致关键路径的阻塞,而转换为base64后大大增加了css文件的体积,css文件的体积直接影响渲染,导致空白屏幕时间增长,html和css会阻塞渲染,而图片不会阻塞渲染。

感谢分享:vue踩坑系列——backgroundImage路径问题_MoLvSHan的博客-CSDN博客_background-image 相对路径
感谢分享:vue项目中打包background背景路径问题 - 这个男人 - 博客园

 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Vue中的背景图片可以通过CSS样式来设置,具体方法如下: 1. 在Vue组件中定义一个样式对象,包含background-image属性和对应的图片地址。 2. 在组件的模板中使用style绑定将样式对象应用到元素上。 例如: ``` <template> <div :style="bgStyle"></div> </template> <script> export default { data() { return { bgStyle: { 'background-image': 'url(图片地址)' } } } } </script> ``` 其中,图片地址可以是相对路径或绝对路径,也可以是通过import导入的模块路径。 ### 回答2: Vue 是一款流行的 JavaScript 框架,它拥有许多强大的功能,其中包括在 HTML 元素中添加背景图片。Vue 通过绑定数据将背景图片添加到元素中,这种方式可以让开发人员根据需要轻松更改背景图像。 在 Vue 中,通过样式绑定将背景图片添加到元素中。背景图片可以是本地文件或是通过 URL 加载的远程图像。要添加背景图片,需要将样式绑定添加到元素上,如下所示: ```html <template> <div :style="{ backgroundImage: 'url(' + imageURL + ')' }"></div> </template> <script> export default { data() { return { imageURL: 'example.png' } } } </script> ``` 在上面的代码中,我们使用了 Vue 组件的 template 属性来定义一个普通的 div 元素,并通过数据绑定将 backgroundImage 样式添加到该元素中。在数据绑定中,我们使用了一个 imageURL 变量,该变量引用了本地背景图片文件 example.png。 此外,我们还可以使用远程图像创建背景图像。为此,我们需要将 imageURL 更改为远程图像的 URL,如下所示: ```html <template> <div :style="{ backgroundImage: 'url(' + imageURL + ')' }"></div> </template> <script> export default { data() { return { imageURL: 'https://example.com/image.png' } } } </script> ``` 在上面的代码中,我们将 imageURL 变量的值更改为远程图像的 URL,该 URL 可以指向任何有效的远程图像文件。 总之,Vue 在处理背景图像中提供了广泛的灵活性,它使开发人员可以根据需要轻松更改背景图像,无论是本地文件还是远程图像。如果您需要在 Vue 应用程序中添加背景图像,上述方法提供了一种简单而有效的方法。 ### 回答3: Vue框架是一种流行的JavaScript框架,作为Web开发中新一代的渐进式框架,它提供了许多特性和辅助函数,其中包括处理动态CSS的能力。而在Vue的CSS处理能力中,background-image是其中之一的功能。 在Vue中,可以通过v-bind绑定属性来设置元素的background-image。例如: ``` <div v-bind:style="{ backgroundImage: 'url(' + imgSrc + ')' }"></div> ``` 上面的代码中,v-bind:style绑定了一个对象,其中backgroundImage属性的值是由Vue实例的data属性imgSrc拼接而成的字符串。 除此之外,Vue也支持使用组件绑定background-image。组件的CSS属性可以定义在组件的style属性中,同时还可以通过传递props来动态传递background-image属性值。 除了使用v-bind绑定属性,Vue还提供了另一种设置背景图片的方式,就是使用CSS伪元素来实现。Vue的伪元素使用的是::before和::after,通过设置content和background-image属性来替换标签元素的内容。例如: ``` <style> .myDiv::before { content: ""; background-image: url('my-image.jpg'); display: block; width: 100%; height: 100%; position: absolute; z-index: -1; top: 0; left: 0; } </style> <div class="myDiv">Hello, world!</div> ``` 上述代码中,伪元素::before被使用来插入了一张背景图片。同时,通过将它的z-index属性设置为-1,这张图片被放置到了元素的底部,并且不会遮盖元素的内容。 总之,在Vue框架中,使用background-image设置元素的背景图片非常灵活和方便。无论是通过v-bind绑定属性还是使用CSS伪元素,都能够实现出各种多彩的背景效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值