如何隐藏和显示表行(css-tables)

时间:2014-07-22 21:24:20

标签: html css3

我试图使用css-tables和纯JavaScript(无jQuery)隐藏和显示表格行。

我的div设置为display且其中table-rownav。无论我做什么,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 个答案:

答案 0 :(得分: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。 这样,将高度和行高改为零就可以了。

然而仍然可以看到一些高度(大约3px),所以我决定将背景颜色设置为透明动画。如果你评论那个动画背景颜色的部分,你就会理解我的意思。

<强> jsFiddle v2