Zusammenklappbarer flexibler Breite Seitenleiste mit nur CSS

Nehmen wir an ich habe eine zusammenklappbare Feste Breite sidebar, die wie folgt definiert:

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 hier: http://codepen.io/anon/pen/pJRYJb

Also hier die Frage:

Wie kann ich von dort aus eine mit flexibler Breite sidebar?

Hier sind die Einschränkungen:

  • kein javascript (ich will den browser auf den Umgang mit den layouting – nicht von mir)
  • die sidebar darf keine überschneidungen der Inhalte
  • wenn zusammengebrochen, die sidebar ist nach rechts an den Rand ausgerichtet werden muss, mit dem Fenster Links der Grenze (in der Lage sein zu befestigen absolut positioniert-Registerkarte auf der rechten Seite, immer sichtbar)
  • die Breite der sidebar sollten nicht ändern, wenn zugeklappt, um zu vermeiden, fließt während des übergangs
  • reibungslosen übergang ohne plötzliche Sprünge
  • moderne CSS (flexboxes, calc) ist in Ordnung,

Das Hauptproblem hier ist, dass ich kann nicht einen Weg finden, zu sagen margin-right: -100% wo 100% bezieht sich auf die Breite der sidebar

Jede Hilfe wird sehr geschätzt!

  • javascript ist gut geeignet für die Auslösung der Zusammenbruch der Logik. Aber ich will nicht, um die Verwendung von javascript für das Layout.
  • Wie wäre width: auto; display: flex; für .sidebar
  • und was mache ich in .sidebar.collapsed?
  • Was bedeutet flexible-Breite bedeuten? Wie flex: 1?
  • es bedeutet: sollten die nehmen so viel Breite, wie es die Kinder – als ob es display: inline-block
InformationsquelleAutor Daniel | 2015-06-01
Schreibe einen Kommentar