mình áp dụng thử cách của bạn, thay đổi độ rộng của div cần cẩn, rồi thêm transition để cho mượt
toàn bộ thành phần trong div main-left
html cần ẩn, ví dụ ở đây có 2 cái là profile, nav
<div class="main-left" id="hidden-main-left">
<div class="profile">
<p>profile</p>
</div>
<div class="nav">
<p>nav</p>
</div>
</div>
button để bật ẩn hiện ( 3 gạch)
<button type="button" class="button-toggle" onClick="hiddenMainLeft();">
<i class="icon-menu"></i>
</button>
css
.main-left {
flex: 0 0 230px; /* don't grow, don't shrink, stay fixed at 230px */
min-height: 100vh;
background: #222d32;
transition: 0.5s;
}
.hidden {
flex: 0 0 0px;
}
js
function hiddenMainLeft() {
var left = document.getElementById('hidden-main-left');
if (left.getAttribute('class') == 'main-left') {
// if (hidden.style.display === 'none') hidden.style.display = 'block';
left.setAttribute('class', 'main-left hidden');
}
else {
left.setAttribute('class', 'main-left');
// hidden.style.display = 'none';
}
}
tuy nhiên đây chỉ mới giải quyết được cái nền, nó sẽ ẩn hiện mượt, nhưng thành phần bên trong vẫn chưa ẩn được, mình dùng lai display: none cho từng thành phần thì lại mất hiệu ứng trượt như ở trên bạn đã nói, giải pháp nào không nhỉ
khi ẩn phần màu xám đi thì element bên trong mình k biết xử lý ntn để vẫn giữ được hiệu ứng
mình thử cách setInterval và setTimeout thì thấy cách hiển thị không đúng ý mình muốn