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>
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;
}
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;
}<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>另一种解决方法是同时使用transform宽度position,但动画效果会略有不同。
body {
    margin: 0;
}
.container {
    display: flex;
}
.sidebar {
    background: #ccc;
    transition: all .1s;
}
.sidebar.collapsed {
    transform: translateX(-100%);
    position: absolute;
}<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>