Dan*_*iel 6 html css transition css3 flexbox
我们假设我有一个可折叠的固定宽度边栏,如下所示:
HTML
<div class="container">
<div class="sidebar" id="sidebar">
SIDEBAR
</div>
<div class="content">
lorem bla bla
<button onclick="document.getElementsByClassName('sidebar')[0].classList.toggle('collapsed')">
toggle Sidebar
</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
body {
margin:0;
}
.container {
display: flex;
min-height:100px;
}
.sidebar {
position: relative;
left: 0;
width: 200px;
background-color: #ccc;
transition: all .25s;
}
.sidebar.collapsed {
left:-200px;
margin-right:-200px;
}
Run Code Online (Sandbox Code Playgroud)
Codepen:http://codepen.io/anon/pen/pJRYJb
我怎样才能从那里进入灵活宽度的侧边栏?
以下是约束:
这里的主要问题是,我不能找到一种方法,说margin-right: -100%
这里100%
指的侧边栏的宽度
任何帮助将不胜感激!
改变width
而不是position
点击怎么样?我max-width
在这种情况下使用,它的工作原理几乎与未知宽度相同。这可能会导致侧边栏上的内容回流,因此white-space:nowrap
如果可以接受,请使用。
body {
margin: 0;
}
.container {
display: flex;
}
.sidebar {
background: #ccc;
transition: all .1s;
max-width: 1000px;
}
.sidebar.collapsed {
max-width: 0;
overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="sidebar" id="sidebar">SIDEBAR</div>
<div class="content">lorem bla bla
<button onclick="document.getElementsByClassName('sidebar')[0].classList.toggle('collapsed')">toggle Sidebar</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
另一种解决方法是同时使用transform
宽度position
,但动画效果会略有不同。
body {
margin: 0;
}
.container {
display: flex;
}
.sidebar {
background: #ccc;
transition: all .1s;
}
.sidebar.collapsed {
transform: translateX(-100%);
position: absolute;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="sidebar" id="sidebar">
<div>SIDEBAR</div>
</div>
<div class="content">lorem bla bla
<button onclick="document.getElementsByClassName('sidebar')[0].classList.toggle('collapsed')">toggle Sidebar</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)