Est-il possible d'ajouter la variable dynamique dans le style?
Je veux dire quelque chose comme:
<style>
.class_name{
background-image({{project.background}});
}
@media all and (-webkit-min-device-pixel-ratio : 1.5),
all and (-o-min-device-pixel-ratio: 3/2),
all and (min--moz-device-pixel-ratio: 1.5),
all and (min-device-pixel-ratio: 1.5) {
.class_name{
background-image({{project.background_retina}});
}
}
</style>
Le meilleur moyen d'inclure des styles dynamiques est d'utiliser variables CSS . Pour éviter les styles en ligne tout en obtenant l'avantage (ou la nécessité —p. Ex., Couleurs définies par l'utilisateur dans une charge utile de données) du style dynamique, utilisez une balise <style>
à l'intérieur du <template>
(pour que les valeurs puissent être insérées par Vue). Utilisez un :root
pseudo-class pour contenir les variables afin qu’elles soient accessibles dans l’étendue CSS de l’application.
Notez que certaines valeurs CSS, telles que comme url()
ne peuvent pas être interpolées, elles doivent donc être des variables complètes.
Exemple ( Nuxt.vue
avec ES6/ES2015 syntaxe):
<template>
<div>
<style>
:root {
--accent-color: {{ accentColor }};
--hero-image: url('{{ heroImage }}');
}
</style>
<div class="punchy">
<h1>Pow.</h1>
</div>
</div>
</template>
<script>
export default {
data() { return {
accentColor: '#f00',
heroImage: 'https://vuejs.org/images/logo.png',
}},
}
</script>
<style>
.punchy {
background-image: var(--hero-image);
border: 4px solid var(--accent-color);
display: inline-block;
width: 250px; height: 250px;
}
h1 {
color: var(--accent-color);
}
</style>
Également créé un autre exemple d'exécution plus complexe sur Codepen .
Comme vous utilisez vuejs, utilisez vuejs pour changer d’arrière-plan css
var vm = new Vue({
el: '#vue-instance',
data: {
rows: [
{value: 'green'},
{value: 'red'},
{value: 'blue'},
],
item:""
},
methods:{
onTimeSlotClick: function(item){
console.log(item);
document.querySelector(".dynamic").style.background = item;
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.16/vue.js"></script>
<div id="vue-instance">
<select class="form-control" v-model="item" v-on:change="onTimeSlotClick(item)">
<option value="">Select</option>
<option v-for="row in rows">
{{row.value}}
</option>
</select>
<div class='dynamic'>VALUE</div>
<br/><br/>
<div :style="{ background: item}">Another</div>
</div>
J'ai rencontré le même problème.J'ai essayé d'utiliser la valeur de couleur d'arrière-plan de la base de données.J'ai trouvé une bonne solution pour ajouter une valeur de couleur d'arrière-plan sur inline css quelle valeur j'ai définie à partir de la base de données.
<img :src="/Imagesource.jpg" alt="" :style="{'background-color':Your_Variable_Name}">
CSS <style>
est statique. Je ne pense pas que vous puissiez faire cela ... vous pourriez avoir à chercher une approche différente.
Vous pouvez essayer d'utiliser variables CSS . Par exemple, (le code ci-dessous n'est pas testé)
<template>
<div class="class_name" :style="{'--bkgImage': 'url(' + project.background + ')', '--bkgImageMobile': 'url(' + project.backgroundRetina + ')'}">
</div>
</template>
<style>
.class_name{
background-image: var(--bkgImage);
}
@media all and (-webkit-min-device-pixel-ratio : 1.5),
all and (-o-min-device-pixel-ratio: 3/2),
all and (min--moz-device-pixel-ratio: 1.5),
all and (min-device-pixel-ratio: 1.5) {
.class_name{
background-image: var(--bkgImageMobile);
}
}
</style>
Remarque: Seuls les derniers navigateurs prennent en charge CSS Variables
.
METTRE À JOUR:
Si vous voyez toujours des problèmes avec le :style
dans le modèle, essayez ceci,
<div :style="'--bkgImage: url(' + project.background + '); --bkgImageMobile: url(' + project.backgroundRetina + ')'">
</div>