我有一个使用 css
display: flex;
制作的侧边栏和一个将侧边栏显示设置为 display: none;
的按钮。目前侧边栏关闭并立即打开,没有动画。我想要发生的是侧边栏从左侧弹出transition: 2.2s cubic-bezier(.36,-0.01,0,.77);
。侧边栏隐藏和显示,我只是想让它动起来。
我尝试将
transition: 2.2s cubic-bezier(.36,-0.01,0,.77);
放在侧边栏 CSS 中,但这没有用。这是侧边栏内容和 js 的代码。
function toggleSidebar() {
var sidebar = document.querySelector('sidebar');
var display = sidebar.style.display;
if (display == 'none') {
sidebar.style.display = 'flex';
} else {
sidebar.style.display = 'none';
}
}
body {
display: flex;
flex-direction: row;
background-image: url("https://4kwallpapers.com/images/wallpapers/macos-13-macos-ventura-macos-2022-stock-light-5k-retina-2048x1536-8135.jpg");
background-size: cover !important;
margin: 0px;
height: 100%;
}
sidebar {
flex: 0 0 200px;
flex-direction: column;
backdrop-filter: blur(30px) saturate(2);
-webkit-backdrop-filter: blur(30px) saturate(2);
padding-inline: 0;
padding-block: 13px;
overflow-y: auto;
overflow-x: hidden;
transition: 2.2s cubic-bezier(.36,-0.01,0,.77);
height: 100%;
}
.main {
flex: 1 1 auto;
flex-wrap: wrap;
flex-direction: column;
overflow: auto;
}
<body>
<sidebar>
<li><a href="#">Demo</a></li>
</sidebar>
<div class="main">
<button onclick="toggleSidebar()"/>
</div>
</body>
通过弹性框包裹侧边栏和主要内容。
更改侧边栏和主要的
flex
以显示/隐藏侧边栏。
顺便说一句,html 没有侧边栏标签,您可以使用
<aside>
代替。
const container = document.querySelector('.container')
const toggleSidebar = () => container.classList.toggle('active')
.container {
display: flex;
}
aside {
flex: 0;
flex-direction: column;
backdrop-filter: blur(30px) saturate(2);
-webkit-backdrop-filter: blur(30px) saturate(2);
padding-inline: 0;
padding-block: 13px;
overflow-y: auto;
overflow-x: hidden;
height: 100dvh;
background: gray;
transition: 2.2s cubic-bezier(.36, -0.01, 0, .77);
}
.main {
flex: 1;
flex-wrap: wrap;
flex-direction: column;
overflow: auto;
transition: 2.2s cubic-bezier(.36, -0.01, 0, .77);
}
.container.active aside {
flex: 0.4;
}
.container.active .main {
flex: 0.6;
}
<div class="container">
<aside>
<li><a href="#">Demo</a></li>
</aside>
<div class="main">
<button onclick="toggleSidebar()">sidebar</button>
</div>
</div>
您只需要切换一个将
flex-basis
设置为0的类。
function toggleSidebar() {
document.querySelector('sidebar')
.classList.toggle('closed');
}
body {
display: flex;
flex-direction: row;
background-image: url("https://4kwallpapers.com/images/wallpapers/macos-13-macos-ventura-macos-2022-stock-light-5k-retina-2048x1536-8135.jpg");
background-size: cover !important;
margin: 0px;
height: 100%;
}
sidebar {
flex: 0 0 200px;
flex-direction: column;
backdrop-filter: blur(30px) saturate(2);
-webkit-backdrop-filter: blur(30px) saturate(2);
padding-inline: 0;
padding-block: 13px;
overflow-y: auto;
overflow-x: hidden;
transition: 2.2s cubic-bezier(.36,-0.01,0,.77);
height: 100%;
}
sidebar.closed {
flex-basis: 0;
}
.main {
flex: 1 1 auto;
flex-wrap: wrap;
flex-direction: column;
overflow: auto;
}
<body>
<sidebar>
<li><a href="#">Demo</a></li>
</sidebar>
<div class="main">
<button onclick="toggleSidebar()">SIDEBAR</button>
</div>
</body>
您最初使用速记
flex-basis
属性将 200px
设置为 flex
。这就是决定侧边栏宽度的因素,如果您希望它从左侧弹出和弹出,这就是您需要设置动画的属性。