A Pen by Gregg Pollack on CodePen.
Created
March 13, 2020 03:00
-
-
Save shixudongleo/adc87ee502c2cf192f6807c3bac9753e to your computer and use it in GitHub Desktop.
Solution 6 - Intro to Vue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="nav-bar"></div> | |
<div id="app"> | |
<div class="product"> | |
<div class="product-image"> | |
<img :src="image" /> | |
</div> | |
<div class="product-info"> | |
<h1>{{ product }}</h1> | |
<p v-if="inStock">In Stock</p> | |
<p v-else :class="{ outOfStock: !inStock }">Out of Stock</p> | |
<ul> | |
<li v-for="detail in details">{{ detail }}</li> | |
</ul> | |
<div class="color-box" | |
v-for="variant in variants" | |
:key="variant.variantId" | |
:style="{ backgroundColor: variant.variantColor }" | |
@mouseover="updateProduct(variant.variantImage)" | |
> | |
</div> | |
<button v-on:click="addToCart" | |
:disabled="!inStock" | |
:class="{ disabledButton: !inStock }" | |
> | |
Add to cart | |
</button> | |
<div class="cart"> | |
<p>Cart({{ cart }})</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//When inStock is false, bind a class to the “Out of Stock” p tag that adds text-decoration: line-through to that element. | |
var app = new Vue({ | |
el: '#app', | |
data: { | |
product: 'Socks', | |
image: 'https://www.vuemastery.com/images/challenges/vmSocks-green-onWhite.jpg', | |
inStock: false, | |
details: ['80% cotton', '20% polyester', 'Gender-neutral'], | |
variants: [ | |
{ | |
variantId: 2234, | |
variantColor: 'green', | |
variantImage: 'https://www.vuemastery.com/images/challenges/vmSocks-green-onWhite.jpg' | |
}, | |
{ | |
variantId: 2235, | |
variantColor: 'blue', | |
variantImage: 'https://www.vuemastery.com/images/challenges/vmSocks-blue-onWhite.jpg' | |
} | |
], | |
cart: 0 | |
}, | |
methods: { | |
addToCart() { | |
this.cart += 1 | |
}, | |
updateProduct(variantImage) { | |
this.image = variantImage | |
} | |
} | |
}) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
body { | |
font-family: tahoma; | |
color:#282828; | |
margin: 0px; | |
} | |
.nav-bar { | |
background: linear-gradient(-90deg, #84CF6A, #16C0B0); | |
height: 60px; | |
margin-bottom: 15px; | |
} | |
#app { | |
display: flex; | |
} | |
img { | |
border: 1px solid #d8d8d8; | |
width: 70%; | |
margin: 40px; | |
box-shadow: 0px .5px 1px #d8d8d8; | |
} | |
.product-image { | |
flex-basis: 700px; | |
} | |
.product-info { | |
margin-top: 10px; | |
flex-basis: 500px; | |
} | |
.color-box { | |
width: 40px; | |
height: 40px; | |
margin-top: 5px; | |
} | |
.cart { | |
margin-right: 25px; | |
float: right; | |
border: 1px solid #d8d8d8; | |
padding: 5px 20px; | |
} | |
button { | |
margin-top: 30px; | |
border: none; | |
background-color: #1E95EA; | |
color: white; | |
height: 40px; | |
width: 100px; | |
font-size: 14px; | |
} | |
.disabledButton { | |
background-color: #d8d8d8; | |
} | |
.review-form { | |
width: 30%; | |
padding: 20px; | |
border: 1px solid #d8d8d8; | |
} | |
input { | |
width: 100%; | |
height: 25px; | |
margin-bottom: 20px; | |
} | |
textarea { | |
width: 100%; | |
height: 60px; | |
} | |
.outOfStock { | |
text-decoration: line-through; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment