旋转文本覆盖粘性导航栏

时间:2017-07-29 15:17:29

标签: html css css-transforms sticky

我正在建立一个有粘性导航栏和桌子的网站。 表格的第一列包含垂直文本。该表足够长,因此可以滚动。但是,滚动时,旋转的文本表现得很有趣:它出现在导航栏上。所有其他文本都按预期运行。

这是我的example.html:

<!DOCTYPE html>
<html lang="en">
    <head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
        <link rel="stylesheet" type="text/css" href="style.css">
        <title>Funny overlay example</title>
    </head>
    <body>
        <nav class="navbar">
            <div>
                Sticky Navbar
            </div>
        </nav>
        <section>
            <div>
                <table>
                    <tr><td rowspan="8" class="cell_vert_text"><div class="rotwrap"><div class="textcon">Problematic Text</div></div></td><td class="cell_horiz_text">Ok Text</td></tr>
                    <tr><td class="cell_horiz_text">Ok Text</td></tr>
                    <tr><td class="cell_horiz_text">Ok Text</td></tr>
                    <tr><td class="cell_horiz_text">Ok Text</td></tr>
                    <tr><td class="cell_horiz_text">Ok Text</td></tr>
                    <tr><td class="cell_horiz_text">Ok Text</td></tr>
                    <tr><td class="cell_horiz_text">Ok Text</td></tr>
                    <tr><td class="cell_horiz_text">Ok Text</td></tr>
                </table>
            </div>
        </section>
    </body>
</html>

还有style.css:

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

.navbar {
    background: #ff0000;
    position: sticky;
    top: 0;
    width: 100%;
}

table td.cell_vert_text {
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    width: 1.5em;
}

table td.cell_vert_text div.rotwrap div.textcon {
    transform: rotate(270deg);
    margin-left: -10em;
    margin-right: -10em;
}

我怀疑旋转对DOM结构有一些副作用,但我真的不明白发生了什么。我尝试通过引入z-index属性来解决问题,但它没有帮助。 我不只是在寻找一种解决方案来推动导航栏后面的旋转文本,而是清楚地解释实际发生的事情。谢谢!

2 个答案:

答案 0 :(得分:2)

对元素进行转换会创建stacking context,因为它的父级都不是堆叠上下文,它与其他堆叠上下文相同,即导航栏(位置粘滞)。

如果我们在同一级别上有2个堆叠上下文,并且两者都没有z-index,则最后一个显示在它之前的那些上面。

解决方案:在导航栏上设置z-index:

.navbar {
  z-index: 1;
  background: #ff0000;
  position: sticky;
  top: 0;
  width: 100%;
}

<强>演示

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.container {
  height: 150px;
  overflow: auto;
}

.navbar {
  z-index: 1;
  background: #ff0000;
  position: sticky;
  top: 0;
  width: 100%;
}

table td.cell_vert_text {
  text-align: center;
  white-space: nowrap;
  vertical-align: middle;
  width: 1.5em;
}

table td.cell_vert_text div.rotwrap div.textcon {
  transform: rotate(270deg);
  margin-left: -10em;
  margin-right: -10em;
}
<div class="container">
  <nav class="navbar">
    <div>
      Sticky Navbar
    </div>
  </nav>
  <section>
    <div>
      <table>
        <tr>
          <td rowspan="8" class="cell_vert_text">
            <div class="rotwrap">
              <div class="textcon">Problematic Text</div>
            </div>
          </td>
          <td class="cell_horiz_text">Ok Text</td>
        </tr>
        <tr>
          <td class="cell_horiz_text">Ok Text</td>
        </tr>
        <tr>
          <td class="cell_horiz_text">Ok Text</td>
        </tr>
        <tr>
          <td class="cell_horiz_text">Ok Text</td>
        </tr>
        <tr>
          <td class="cell_horiz_text">Ok Text</td>
        </tr>
        <tr>
          <td class="cell_horiz_text">Ok Text</td>
        </tr>
        <tr>
          <td class="cell_horiz_text">Ok Text</td>
        </tr>
        <tr>
          <td class="cell_horiz_text">Ok Text</td>
        </tr>
      </table>
    </div>
  </section>
</div>

答案 1 :(得分:2)

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body{
  height: 5000px;
}
.navbar {
    background: #ff0000;
    position: sticky;
    top: 0;
    width: 100%;
  z-index: 1;
}

table td.cell_vert_text {
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    width: 1.5em;
}

table td.cell_vert_text div.rotwrap div.textcon {
    transform: rotate(270deg);
    margin-left: -10em;
    margin-right: -10em;
}
<body>
  <nav class="navbar">
    <div>
      Sticky Navbar
    </div>
  </nav>
  <section>
    <div>
      <table>
        <tr><td rowspan="8" class="cell_vert_text"><div class="rotwrap"><div class="textcon">Problematic Text</div></div></td><td class="cell_horiz_text">Ok Text</td></tr>
        <tr><td class="cell_horiz_text">Ok Text</td></tr>
        <tr><td class="cell_horiz_text">Ok Text</td></tr>
        <tr><td class="cell_horiz_text">Ok Text</td></tr>
        <tr><td class="cell_horiz_text">Ok Text</td></tr>
        <tr><td class="cell_horiz_text">Ok Text</td></tr>
        <tr><td class="cell_horiz_text">Ok Text</td></tr>
        <tr><td class="cell_horiz_text">Ok Text</td></tr>
      </table>
    </div>
  </section>
</body>

为导航栏规则指定正z-index

.navbar {
 background: #ff0000;
 position: sticky;
 top: 0;
 width: 100%;
 z-index: 1
}