<script type="text/x-template" id="traffic-light">
  <div class="traffic-light" :class="{active: isGreen}"></div>
</script>

<div id="app">
  <traffic-light />
</div>
body {
  width: 100vw;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

.traffic-light {
  width: 4vw;
  height: 4vw;
  border-radius: 100%;
  background-color: red;
  
  &.active {
    background-color: green;
  }
}
View Compiled
Vue.component('traffic-light', {
  template: '#traffic-light',
  name: 'TrafficLight',
  data () {
    return {
      isGreen: false,
      interval: null
    }
  },
  created () {
    this.interval = setInterval(() => {
      this.isGreen = !this.isGreen
    }, 5 * 1000)
  },
  beforeDestroy () {
    clearInterval(this.interval)
  }
})

let app = new Vue({
  el: '#app'
})
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js