- index.html
- style.css
- script.js
HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Catalog | Device</title>
  <link rel="stylesheet" href="device/setting.css">
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <ul class="products">
  </ul>
  <script src="script.js"></script>
</body>
</html>
CSS
.products {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  width: 570px;
  margin: 20px auto;
  padding: 0;
  list-style: none;
}
.product {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  width: 270px;
  margin-bottom: 30px;
}
.product__image {
  order: -1;
  width: 270px;
  height: 380px;
  margin-bottom: 15px;
}
.product__title {
  max-width: 180px;
  margin: 0;
  font-weight: 500;
  font-size: 18px;
  line-height: 24px;
}
.product__price {
  max-width: 80px;
  margin: 0;
  text-align: right;
  font-weight: 300;
  font-size: 16px;
  line-height: 27px;
}
.product--special {
  order: -1;
  width: 100%;
  height: 380px;
  flex-direction: column;
  justify-content: flex-start;
  align-content: space-between;
}
.product--special .product__title {
  width: 270px;
  max-width: 100%;
  margin-bottom: 10px;
  font-size: 28px;
  line-height: 36px;
}
.product--special .product__price {
  width: 270px;
  max-width: 100%;
  text-align: left;
  text-decoration: line-through;
  color: #cccccc;
}
.product--special .product__special-price {
  margin: 0;
}
.product--special .product__image {
  outline: 3px solid #ffc600;
}
.product--special::before {
  content: "Product of the day";
  position: absolute;
  top: 0;
  left: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 5px 10px;
  font-weight: 500;
  color: #111111;
  text-transform: uppercase;
  background-color: #ffc600;
}
.product--available::after,
.product--unavailable::after {
  position: absolute;
  top: 343px;
  left: 50%;
  padding: 10px 5px 2px 5px;
  border-bottom: 1px solid #57c74b;
  transform: translateX(-50%);
}
.product--available::after {
  content: "In stock";
}
.product--unavailable {
  filter: grayscale(1) opacity(0.7);
}
.product--unavailable::after {
  content: "Out of stock";
}
.product--special.product--available::after,
.product--special.product--unavailable::after {
  left: 135px;
}
JavaScript
var makeElement = function (tagName, className, text) {
  var element = document.createElement(tagName);
  element.classList.add(className);
  if (text) {
    element.textContent = text;
  }
  return element;
};
var createCard = function (product) {
  var listItem = makeElement('li', 'product');
  var title = makeElement('h2', 'product__title', product.text);
  listItem.appendChild(title);
  var picture = makeElement('img', 'product__image');
  picture.src = product.imgUrl;
  picture.alt = product.text;
  listItem.appendChild(picture);
  var price = makeElement('p', 'product__price', product.price);
  listItem.appendChild(price);
  var availabilityClass = 'product--available';
  if (!product.isAvailable) {
    availabilityClass = 'product--unavailable';
  }
  listItem.classList.add(availabilityClass);
  return listItem;
};
var cardList = document.querySelector('.products');
var productInfo = {
  isAvailable: true,
  imgUrl: 'device/item-1.jpg',
  text: 'Selfie stick for beginners',
  price: 200,
  isSpecial: false,
  specialPrice: null
};
var cardItem = createCard(productInfo);
cardList.appendChild(cardItem);
Console
Goalscompleted
0
- In the createCardfunction beforereturn, add a check to make sure that the product is covered by the special offer.
- If the condition is met, add the product--specialclass to the product card.
- Below in the condition, create a variable specialPriceand write in it a paragraph with the price of the special offer created withmakeElement.
- Below in the condition, add element specialPriceto the end oflistItem.
- In the productInfoobject, replaceisSpecialwithtrueand the value ofspecialPricewith300.
Comments