Skip to content Skip to sidebar Skip to footer

Vue.js V-bind:style Pseudo Element :: After Content Icon

I have a Bootstrap Vue ProgressBar. I need to add to the class '.progress-bar' pseudo element :: after with content icon (from FontAwsome). And I also want it to be dynamic. Becaus

Solution 1:

Let's say you have a parent component:

<div id="parent">
  <ChildComponent id="child"> // Possibly from another library?
</div>

// renders ->

<div id="parent">
   <div id="child">
     <div id="child-component-item">
        ::after
     </div>
   </div>
</div>

The challenge is creating a binding for the #child-component-item:after selector.

We can use css vars to solve this problem, by "reaching into" the child component with some CSS. Note that you may have to use ::v-deep if your style is scoped.

parent-component.js

<divid="parent-component":style="{'--bgColor': bgColor}"><ChildComponent></div><script>exportdefault {
    data() {
      return {
        bgColor: 'red'
      }
    }
  }
</script><style>#child-component-item:after {
      background-color: var(--bgColor)
   }
</style>

Solution 2:

Use css var()

And then :style="{ '--varName': xxx}"

Solution 3:

It seems you'd like to add one icon following the progress bar.

If so, check below demo, it uses one span simulate the icon, then bind left to move the icon.

Vue.config.productionTip = false
app = newVue({
  el: "#app",
  data: {
    counter: 0,
    max: 100,
    intervalID: null
  },
  methods: {
    runTask: function () {      
      clearInterval(this.intervalID)
      this.counter = 0this.intervalID = setInterval(() => {
        this.counter = (this.counter+7)%this.max
      }, 1000)
    }
  }
})
.badge {
  background-color:green;
  border: 1px solid black;
  padding: 2px;
  transition: 1s;
}
<scriptsrc="https://unpkg.com/vue@2.5.16/dist/vue.js"></script><linktype="text/css"rel="stylesheet"href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css"/><linktype="text/css"rel="stylesheet"href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css"/><scriptsrc="//unpkg.com/babel-polyfill@latest/dist/polyfill.min.js"></script><scriptsrc="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script><divid="app"><button @click="runTask()">Run</button><b-progressclass="mt-1":max="max"show-value><b-progress-bar:value="counter"variant="success"><spanclass="badge"style="position:absolute;":style="{'left':counter*100/max + '%'}"v-show="counter > 0">x</span></b-progress-bar></b-progress></div>

Post a Comment for "Vue.js V-bind:style Pseudo Element :: After Content Icon"