nuxt.js - 如何动态设置 css 背景图片
nuxt.js - how to set css background image dynamicaly
我正在使用 Nuxt.js,并且有一个自定义组件。
该组件在使用css设置背景图片的组件中有css。
我已经尝试了以下方法,但是当我 运行 这样做时出现错误。
错误是:
invalid expression: Invalid regular expression flags in
组件
<template>
<section class="bg-img hero is-mobile header-image" v-bind:style="{ backgroundImage: 'url(' + image + ')' }">
<div class="">
<div class="hero-body">
<div class="container">
<h1 class="title">
{{ result }}
</h1>
<h2 class="subtitle ">
Hero subtitle
</h2>
</div>
</div>
</div>
</section>
</template>
<script>
export default {
props: ['result', 'image']
}
</script>
<style>
.bg-img {
background-image: url(~/assets/autumn-tree.jpg);
background-position: center center;
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
background-color: #999;
}
</style>
我在 https://github.com/nuxt/nuxt.js/issues/2123 上找到了答案。
基本上,在组件中做:
<div :style="{ backgroundImage: `url(${backgroundUrl})` }">Content with background here</div>
可以正常写但是在'':'background-image'
v-bind:style="{ 'background-image': 'url(' + api.url + ')' }"
url('~@/assets/autumn-tree.jpg')
我犯了同样的错误,认为这是一个 nuxtjs 问题。 Webpack 使用语法来解析资源。
~ 强制 webpack 将请求视为模块请求。
然后@从根目录开始。
<template>
<div>
<div class="backgroundImage" :style="{ backgroundImage: `url(${backgroundImagePath})` }">
</div>
</template>
<script>
import backgroundImagePath from '~/assets/image.jpeg'
export default {
data() {
return { backgroundImagePath }
}
}
</script>
这也是使用 require 和 url 的组合来解析资产的另一个示例。
<b-col cols="8" class="hj_projectImage justify-content-center text-center" :style="{backgroundImage: `url(` + require(`~/assets/ProjectPictures/${this.ProjectPicture}`) + `)`}">
</b-col>
官方文档已经给出了解决方案,参见:https://nuxtjs.org/docs/2.x/directory-structure/assets#images
您需要做的就是删除斜线:
background-image: url("~assets/autumn-tree.jpg");
对于真正动态的图像,例如${image}.jpg
:
<img :src="require(`~/assets/img/${image}.jpg`)" />
总的来说我推荐使用nuxt-image
您可以在其中定义每个分辨率的图像 (media-query)。
使用 $img-feature 您还可以将其定义为 background-image:
export default {
computed: {
backgroundStyles() {
const imgUrl = this.$img('https://github.com/nuxt.png', { width: 100 })
return {
backgroundImage: `url('${imgUrl}')`
}
}
}
}
我正在使用 Nuxt.js,并且有一个自定义组件。
该组件在使用css设置背景图片的组件中有css。
我已经尝试了以下方法,但是当我 运行 这样做时出现错误。 错误是:
invalid expression: Invalid regular expression flags in
组件
<template>
<section class="bg-img hero is-mobile header-image" v-bind:style="{ backgroundImage: 'url(' + image + ')' }">
<div class="">
<div class="hero-body">
<div class="container">
<h1 class="title">
{{ result }}
</h1>
<h2 class="subtitle ">
Hero subtitle
</h2>
</div>
</div>
</div>
</section>
</template>
<script>
export default {
props: ['result', 'image']
}
</script>
<style>
.bg-img {
background-image: url(~/assets/autumn-tree.jpg);
background-position: center center;
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
background-color: #999;
}
</style>
我在 https://github.com/nuxt/nuxt.js/issues/2123 上找到了答案。
基本上,在组件中做:
<div :style="{ backgroundImage: `url(${backgroundUrl})` }">Content with background here</div>
可以正常写但是在'':'background-image'
v-bind:style="{ 'background-image': 'url(' + api.url + ')' }"
url('~@/assets/autumn-tree.jpg')
我犯了同样的错误,认为这是一个 nuxtjs 问题。 Webpack 使用语法来解析资源。
~ 强制 webpack 将请求视为模块请求。 然后@从根目录开始。
<template>
<div>
<div class="backgroundImage" :style="{ backgroundImage: `url(${backgroundImagePath})` }">
</div>
</template>
<script>
import backgroundImagePath from '~/assets/image.jpeg'
export default {
data() {
return { backgroundImagePath }
}
}
</script>
这也是使用 require 和 url 的组合来解析资产的另一个示例。
<b-col cols="8" class="hj_projectImage justify-content-center text-center" :style="{backgroundImage: `url(` + require(`~/assets/ProjectPictures/${this.ProjectPicture}`) + `)`}">
</b-col>
官方文档已经给出了解决方案,参见:https://nuxtjs.org/docs/2.x/directory-structure/assets#images
您需要做的就是删除斜线:
background-image: url("~assets/autumn-tree.jpg");
对于真正动态的图像,例如${image}.jpg
:
<img :src="require(`~/assets/img/${image}.jpg`)" />
总的来说我推荐使用nuxt-image
您可以在其中定义每个分辨率的图像 (media-query)。 使用 $img-feature 您还可以将其定义为 background-image:
export default {
computed: {
backgroundStyles() {
const imgUrl = this.$img('https://github.com/nuxt.png', { width: 100 })
return {
backgroundImage: `url('${imgUrl}')`
}
}
}
}