- 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 () {
var listItem = makeElement('li', 'product');
var title = makeElement('h2', 'product__title', 'Professional selfie stick');
listItem.appendChild(title);
var picture = makeElement('img', 'product__image');
picture.src = 'device/item-4.jpg';
picture.alt = 'Professional selfie stick';
listItem.appendChild(picture);
var price = makeElement('p', 'product__price', '1000');
listItem.appendChild(price);
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();
cardList.appendChild(cardItem);
Console
Goalscompleted
0
- Uncomment the
productInfo
object. - Add the
product
parameter to thecreateCard
function declaration, andproductInfo
to its call. - In the body of the
createCard
function, replace the'Professional selfie stick'
string with the value of thetext
property of theproduct
object (for the title and alt). - Replace the image address with the value of the
imgUrl
property of theproduct
object. - Change the price to the value of the
price
property of theproduct
object.
Comments