Загрузка данных
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Выбор курсов</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>Выбери курс для обучения</h1>
<input id="search" type="search" placeholder="Поиск курса...">
<select id="category">
<option value="all">Все категории</option>
<option value="code">Программирование</option>
<option value="design">Дизайн</option>
<option value="marketing">Маркетинг</option>
</select>
<div id="courses" class="grid"></div>
<div class="total">
Выбрано: <span id="count">0</span> |
Сумма: <span id="sum">0 ₽</span>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
background: #f4f6fb;
color: #222;
padding: 30px 15px;
}
.container {
max-width: 900px;
margin: auto;
}
h1 {
text-align: center;
margin-bottom: 20px;
}
input, select {
width: 100%;
padding: 12px;
margin-bottom: 12px;
border: 1px solid #ddd;
border-radius: 10px;
font-size: 16px;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 15px;
}
.card {
background: #fff;
padding: 18px;
border-radius: 14px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.07);
}
.card h3 {
margin-bottom: 8px;
}
.card p {
color: #666;
font-size: 14px;
margin-bottom: 12px;
}
button {
width: 100%;
padding: 10px;
border: none;
border-radius: 8px;
background: #4f46e5;
color: #fff;
font-weight: bold;
cursor: pointer;
}
button.active {
background: #16a34a;
}
.total {
margin-top: 20px;
text-align: center;
font-size: 18px;
font-weight: bold;
}
const courses = [
{ id: 1, title: "Python с нуля", category: "code", price: 9900 },
{ id: 2, title: "Веб-разработка", category: "code", price: 14900 },
{ id: 3, title: "UI/UX дизайн", category: "design", price: 12900 },
{ id: 4, title: "SMM и реклама", category: "marketing", price: 7900 }
];
const selected = new Set();
const coursesEl = document.getElementById("courses");
const searchEl = document.getElementById("search");
const categoryEl = document.getElementById("category");
function render() {
const search = searchEl.value.toLowerCase();
const category = categoryEl.value;
coursesEl.innerHTML = "";
courses
.filter(c =>
c.title.toLowerCase().includes(search) &&
(category === "all" || c.category === category)
)
.forEach(course => {
const card = document.createElement("div");
card.className = "card";
const isSelected = selected.has(course.id);
card.innerHTML = `
<h3>${course.title}</h3>
<p>${course.price.toLocaleString("ru-RU")} ₽</p>
<button class="${isSelected ? "active" : ""}">
${isSelected ? "Выбрано ✓" : "Выбрать"}
</button>
`;
card.querySelector("button").onclick = () => {
isSelected ? selected.delete(course.id) : selected.add(course.id);
render();
updateTotal();
};
coursesEl.appendChild(card);
});
}
function updateTotal() {
const total = courses
.filter(c => selected.has(c.id))
.reduce((sum, c) => sum + c.price, 0);
document.getElementById("count").textContent = selected.size;
document.getElementById("sum").textContent = total.toLocaleString("ru-RU") + " ₽";
}
searchEl.addEventListener("input", render);
categoryEl.addEventListener("change", render);
render();
updateTotal();