Как сделать так чтобы контент менял свое содержимое при нажатии на кнопку
Как сделать чтобы при нажатии на кнопку "меню" был блок меню, а блоск "basket" скрывался и наоборот
html {
background: yellow;
}
.menu {
height: 100vh;
width: 370px;
background: red;
}
.basket {
height: 100vh;
width: 370px;
background: red;
}
.block_mini {
margin-top: 50px;
margin-left: 85px;
width: 200px;
height: 50px;
background: black;
}
.btn {
display: flex;
}
.btn_ {
background: white;
width: 150px;
height: 40px;
cursor: pointer;
}
.block_mini_1 {
margin-top: 30px;
margin-left: 85px;
width: 100px;
height: 20px;
background: green;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<div class="menu"> <!-- по нажатию на кнопку "меню" -->
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
</div>
<!-- <div class="basket">
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
</div>
-->
<div class="btn">
<button class="btn_">меню</button>
<button class="btn_">корзина</button>
</div>
</body>
</html>
Ответы (3 шт):
Автор решения: Sevastopol'
→ Ссылка
var tabs = document.getElementById('main');
tabs.addEventListener("click", function(ev) {
var hideElement = document.getElementsByClassName('tab');
for (i = 0; i < hideElement.length; i++) {
hideElement[i].classList.remove("active")
}
var showElemtn = document.querySelectorAll('div#' + ev.target.id + '')[0];
showElemtn.classList.toggle("active");
});
html {
background: yellow;
}
.menu {
height: 70vh;
width: 370px;
background: red;
display: block;
}
.basket {
height: 70vh;
width: 370px;
background: red;
}
.block_mini {
margin-top: 50px;
margin-left: 85px;
width: 200px;
height: 50px;
background: black;
}
.btn {
display: flex;
}
.btn_ {
background: white;
width: 150px;
height: 40px;
cursor: pointer;
}
.block_mini_1 {
margin-top: 30px;
margin-left: 85px;
width: 100px;
height: 20px;
background: green;
}
.tab {
display: none;
}
.active {
display: block;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<div id="main">
<div class="tab menu" id="link1">
<div class="block_mini"></div>
<div class="block_mini"></div>
</div>
<div class="tab basket" id="link2">
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
</div>
<div>
<div class="btn">
<button class="btn_" id="link1">меню</button>
<button class="btn_" id="link2">корзина</button>
</div>
</body>
</html>
Автор решения: Алексей Шиманский
→ Ссылка
let btns = document.querySelectorAll('.btn_');
for (let i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
document.querySelectorAll('.items').forEach(function(el) {
el.style.display = 'none';
});
document.querySelector(`.${this.dataset.menuName}`).style.display = 'block';
});
}
html {
background: yellow;
}
.d-none {
display: none;
}
.menu {
height: 100vh;
width: 370px;
background: red;
}
.basket {
height: 100vh;
width: 370px;
background: red;
}
.block_mini {
margin-top: 50px;
margin-left: 85px;
width: 200px;
height: 50px;
background: black;
}
.btn {
display: flex;
}
.btn_ {
background: white;
width: 150px;
height: 40px;
cursor: pointer;
}
.block_mini_1 {
margin-top: 30px;
margin-left: 85px;
width: 100px;
height: 20px;
background: green;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<div class="items menu"> <!-- по нажатию на кнопку "меню" -->
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
</div>
<div class="items basket d-none">
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
</div>
<div class="btn">
<button class="btn_" data-menu-name="menu">меню</button>
<button class="btn_" data-menu-name="basket">корзина</button>
</div>
</body>
</html>
вместо ..style.display = 'none'; и .style.display = 'block'; лучше завести класс в стилях и оперировать ими
Автор решения: humster_spb
→ Ссылка
Ну и небольшой лайфхак - как сделать это на чистом html-css (без js): создаёте два радиобаттона, скрываете их, в качестве кнопок стилизуете лейблы к ним и в зависимости от того, какой из radio выбран, открываете соответствующий блок - меню или корзину.
body {
background: yellow;
}
.menu {
height: 100vh;
width: 370px;
background: green;
}
.basket {
height: 100vh;
width: 370px;
background: red;
}
.block_mini {
margin-top: 50px;
margin-left: 85px;
width: 200px;
height: 50px;
background: black;
}
.btn {
display: flex;
}
.btn_ {
background: white;
width: 150px;
height: 40px;
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid gray;
}
[type="radio"], .menu, .basket {
display: none;
}
#menu:checked ~ .menu,
#basket:checked ~ .basket{
display: block;
}
<input type="radio" name="radio" id="menu" checked>
<input type="radio" name="radio" id="basket">
<div class="menu">
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
</div>
<div class="basket">
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
</div>
<div class="btn">
<label for="menu" class="btn_">меню</label>
<label for="basket" class="btn_">корзина</label>
</div>