Как скрыть и показать таблицу-строку (css-таблицы)

Я пытаюсь скрыть и показать строку таблицы с помощью css-таблиц и чистого JavaScript (без jQuery).

У меня есть div с display, установленным в table-row и nav внутри него. Независимо от того, что я делаю, border-collapse и т.д., div все еще поддерживает некоторую высоту.

Любые идеи?

HTML:

  <!-- Header -->
  <header id='header'> <!-- Table Row 1 -->
    <div id="header-table">
      <div id='back'>
        <button id='back-button'>&#8592;</button>
      </div>
      <div id="title">
        <h1 id='title-h1'>Title</h1>
      </div>
      <div id="menu">
        <button id='menu-button'>&equiv;</button>
      </div>
    </div>
  </header>

    <nav id="menu-nav">
      <a href="#intro">Introductory Page</a>
      <a href="#list">Activity List</a>
      <a href="#settings">Settings</a>
      <a href="#about">About</a>
    </nav>

  <div id="body"> <!-- Table Row 3 -->

    <div id="wrapper">

CSS

header#header {
  position: relative;
  display: table-row;
}

div#menu-nav-cell {
  position: relative;
  display: table-row;
  text-align: center;
  overflow: hidden;
  background: yellow;
}

nav#menu-nav {
  display: table-row;
  height: 0em;
  width: 100%;
  color: #000;
  background: pink;
}


div#body {
  position: relative;
  display: table-row;
  height: 100%;
}

div#wrapper {
  position: relative;
  height: 100%;
}

Ответ 1

Почему бы просто не использовать display: none?

Возможно, я неправильно понял, так как вы сказали, что у вас есть div с nav внутри, но я не вижу этого в вашем примере html.

Я думаю, вы хотите показать/скрыть навигацию. Это можно сделать, добавив это правило css:

nav#menu-nav.hidden {
    display: none;
}

и javascript

document.getElementById("toggle").onclick = function () {
    document.getElementById("menu-nav").classList.toggle("hidden");
}

jsFiddle


Если вы хотите оживить высоту, вы можете сделать это:

/* new rules that I added */
nav#menu-nav {
  line-height: 1em;
  -webkit-transition: line-height .2s, background-color .2s;
}

nav#menu-nav a {
    display: inline-block;
    overflow: hidden;
    height: 1em;
    -webkit-transition: height .2s;
}

nav#menu-nav.hidden {
    line-height: 0em;
    background-color: transparent;
}
nav#menu-nav.hidden a {
    height: 0;
}

Трюк заключается в использовании overflow: hidden; display:inline-block для ячеек таблицы вместо display:table-cell. Таким образом, изменение высоты и высоты линии до нуля отлично работает.

Тем не менее, по-прежнему существует некоторая высота (около 3 пикселей), поэтому я решил анимировать фоновый цвет и прозрачным. Если вы прокомментируете ту часть, которая оживляет цвет фона, вы поймете, что я имею в виду.

jsFiddle v2