<div class="container" id="app">
  <header>
    <h1>Contents</h1>
  </header>
  
  <div class="content">
    <section>
      <img src="http://www.baltana.com/files/wallpapers-3/Guardians-Of-The-Galaxy-Vol.-2-Rocket-Raccoon-And-Groot-Wallpaper-11123.jpg" alt="" />
      <section class="main">
        <article>
          <h2><span class="red">Pre.</span>view</h2>
          <ul class="preview">
            <li v-for="item in Preview">
              <h3>{{ item.num }}</h3>
              <h4>{{ item.title }}</h4>
              <p>{{ item.desc }}</p>
            </li>
          </ul>
        </article>
        <article>
          <h2><span class="yellow">On.</span>screen</h2>
          <ul class="onscreen">
            <li v-for="item in OnScreen">
              <h4 class="yellow">{{ item.num }}</h4>
              <ul v-if="item.movie.length > 0">
                <li v-for="m in item.movie">
                  {{ m.title }}
                  <ratings :stars="m.rating"></ratings>
                </li>
              </ul>
            </li>
          </ul>
        </article>
      </section>
    </section>

    <section class="side">
      <article>
        <h2><span class="blue">Features</h2>
          <ul class="features">
            <li v-for="item in Features">
              <h3>{{ item.num }}</h3>
              <h4>{{ item.title }}</h4>
              <p>{{ item.desc }}</p>
            </li>
          </ul>
      </article>
      <article>
        <h2><span class="blue">Re.</span>view</h2>
        <ul class="review">
            <li v-for="item in Review">
              <h3>{{ item.num }}</h3>
              <h4>{{ item.title }}</h4>
              <p>{{ item.desc }}</p>
            </li>
          </ul>
      </article>
    </section>
  </div>

</div>

<template id="ratings">
  <div class="ratings">
    <ul>
      <li v-for="star in stars">
        <i class="fa fa-star"></i>
      </li>
    </ul>
  </div>
</template>
@import url('https://fonts.googleapis.com/css?family=Bungee|Pathway+Gothic+One');

* {
  box-sizing: border-box;
}
body {
  background-color: #040001;
  color: #FFFFFF;
}

header {
  margin: 20px 0;
}
header h1 {
  font-size: 10em;
  letter-spacing: .1em;
  font-family: 'Bungee', cursive;
  text-align: center;
}

section {
/*   width: 300px; */
}
section h2 {
  font-size: 1.7em;
  font-family: 'Bungee', cursive;
  padding: 10px 0;
  margin-bottom: 10px;
  border-bottom: 2px solid #FFFFFF;
}

img {
  width: 700px;
  margin-left: -100px;
}

.container {
  padding: 50px;
  margin: 0 auto;
  width: 80%;
  display: flex;
  flex-direction: column;
  align-items: center;;
}

.content {
  display: flex;
  overflow: hidden;
}

.ratings {
  margin: 4px 0 0 8px;
}
.ratings ul {
  display: flex;
}
.ratings ul li {
  border: none;
}
.ratings i {
  font-size: .5em;
  padding: 0 2px;
}

.main {
  margin-top: 30px;
  display: flex;
}
.main article {
  width: 320px;
  padding-right: 30px;
}

.features p, .review p {
  line-height: 1.5em;
}

.preview {
  padding: 20px 0;
}
.preview li {
  margin-bottom: 20px;
}
.preview h3 {
  font-family: 'Pathway Gothic One', sans-serif;
  font-size: 1.8em;
  font-weight: 600;
  float: left;
  margin-right: 10px;
}
.preview h4 {
  text-transform: uppercase;
  margin: 2px 0 5px 0;
}

.onscreen {
  padding: 20px 0;
  font-family: 'Pathway Gothic One', sans-serif;
  text-transform: uppercase;
}
.onscreen h4 {
  margin-right: 10px;
}
.onscreen li {
  margin-bottom: 10px;
  display: flex;
}
.onscreen li ul li {
  margin-bottom: 0;
  padding-bottom: 5px;
}


.side article {
  width: 320px;
  padding-right: 30px;
}

.features {
  padding: 20px 0;
}
.features li {
  margin-bottom: 20px;
}
.features h3 {
  font-family: 'Pathway Gothic One', sans-serif;
  font-size: 1.8em;
  font-weight: 600;
  float: left;
  margin-right: 10px;
}
.features h4 {
  text-transform: uppercase;
  margin: 2px 0 5px 0;
}

.review {
  padding: 20px 0;
}
.review li {
  margin-bottom: 20px;
}
.review h3 {
  font-family: 'Pathway Gothic One', sans-serif;
  font-size: 1.8em;
  font-weight: 600;
  float: left;
  margin-right: 10px;
}
.review h4 {
  text-transform: uppercase;
  margin: 2px 0 5px 0;
}

.red {
  color: #FF3200;
}
.yellow {
  color: #FFC700;
}
.blue {
  color: #0185B5;
}
/*jshint esversion: 6 */

const preview = [
  {
    'num': 10,
    'title': 'Logan',
    'desc': "He's the best at what he does...and what he does is get super-old, grey and wrinkly." 
  },
  {
    'num': 14,
    'title': 'Beauty and the Beast',
    'desc': 'Guess which one Emma Watson is?'
  },
  {
    'num': 16,
    'title': 'Fences',
    'desc': "Denzel Washington won an award back when this was a play. Can he win another now that it's a movie"
  },
  {
    'num': 20,
    'title': 'Gillian Anderson',
    'desc': 'How is it that Scully looks wonderful with each passing year, while we fall to bits?'
  },
  {
    'num': 24,
    'title': 'Ghost in the Shell',
    'desc': "That's what happens when oysters die."
  }
];

const onscreen = [
  {
    'num': 28,
    'movie': [
      {
        'title': 'Manchester by the Sea',
        'rating': 5
      }
    ]
  },
  {
    'num': 30,
    'movie': [
      {
        'title': 'Collateral Beauty',
        'rating': 2
      },
      {
        'title': 'Moonlight',
        'rating': 4
      }
    ]
  },
  {
    'num': 31,
    'movie': [
      {
        'title': 'Lion',
        'rating': 4
      }
    ]
  },
  {
    'num': 32,
    'movie': [
      {
        'title': 'Rogue One',
        'rating': 4
      }
    ]
  },
  {
    'num': 34,
    'movie': [
      {
        'title': 'A Monster Calls',
        'rating': 4
      }
    ]
  },
  {
    'num': 35,
    'movie': [
      {
        'title': 'Monster Trucks',
        'rating': 2
      },
      {
        'title': "Rules Don't Apply",
        'rating': 2
      },
      {
        'title': 'Split',
        'rating': 4
      }
    ]
  },
  {
    'num': 36,
    'movie': [
      {
        'title': 'Assassins Creed',
        'rating': 3
      }
    ]
  },
  {
    'num': 37,
    'movie': [
      {
        'title': 'Live By Night',
        'rating': 2
      }
    ]
  },
  {
    'num': 38,
    'movie': [
      {
        'title': 'Jackie',
        'rating': 4
      }
    ]
  },
  {
    'num': 39,
    'movie': [
      {
        'title': 'Passengers',
        'rating': 4
      }
    ]
  }
];

const features = [
  {
    'num': 40,
    'title': 'T2 Trainspotting',
    'desc': "The Danny Boyle classic has spawned a sequel. Choose life. Choose a film magazine. Choose the 'Contents' page. Choose so-called witticisms instead of useful information. Choose choosing. Choose... oh, forget it." 
  },
  {
    'num': 48,
    'title': 'A Monster Calls',
    'desc': "Liam Neeson voices a walking, talking tree. It's the first time we've congratulated someone for their wooden acting."
  },
  {
    'num': 54,
    'title': "Assassin's Creed",
    'desc': "Going by the game, an assassin's creed centres on murder, strenous exercise and the importance of layering with a really fetching hood. So, basically, death and fashion - like The Neon Demon later in this issue..."
  },
  {
    'num': 60,
    'title': 'Micheal Fassbender',
    'desc': "County Kerry's best export, apart from Kerrygold butter. Which, judging by these pictures, Fassbender has never eaten in his life."
  },
  {
    'num': 64,
    'title': 'The Ultimate 2017 Preview',
    'desc': "As if 2017 wasn't already exciting enough with an orange-faced loon looking to upend civilization as we know it, there's also these excellent films to look forward to - check out our sneak peek at this year's greatest-to-come"
  },
  {
    'num': 80,
    'title': 'Casey Affleck',
    'desc': "The younger Batfleck is very good in Manchester By The Sea, but imagine how good he could've been in Sheets By The Water or Tablecloths By The Stream"
  }
];

const review = [
  {
    'num': 88,
    'title': 'The Neon Demon',
    'desc': "The best bits of the cannibal models"
  },
  {
    'num': 94,
    'title': "How to Make a Horror Movie",
    'desc': "The writer and director of Don't Breathe, Rodo Sayagues and Fede Alvarez, on how to create the perfect screamfest"
  },
  {
    'num': 106,
    'title': "Thrill of the Chase",
    'desc': "Behind the making of William Friedkin's classic car chase in To Live and Die in L.A."
  },
  {
    'num': 114,
    'title': "Classic Scene",
    'desc': "Peter Strickland gets depressive."
  }
];

const Ratings = Vue.component('ratings', {
  
  // TEMPLATE
  template: '#ratings',
  
  // PROPS
  props: ['stars']
  
});

new Vue({
  
  // ELEMENT
  el: '#app',
  
  // DATA
  data: {
    Preview: preview,
    OnScreen: onscreen,
    Features: features,
    Review: review
  }
  
});

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css

External JavaScript

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