【问题标题】:Scroll within a fixed position overlay在固定位置覆盖范围内滚动
【发布时间】:2013-09-13 16:14:13
【问题描述】:

JsBin。单击左侧的按钮。第一个是不需要滚动的覆盖示例(因此它可以完美运行),第二个按钮什么也不做,第三个按钮是我正在描述的问题。请注意,我在 css 选项卡中的主要样式之前复制/粘贴了 ZenPen 样式。

我正在使用 Bootstrap 3.0 和 ZenPen。这个想法是我在屏幕左侧有一个菜单,您可以在其中单击一个按钮来隐藏和显示不同的“应用程序”或覆盖。这些覆盖使用position: fixed,但我不能为 ZenPen 覆盖这样做,否则我将无法在其中滚动。

如果我将#wordInner { position: fixed; 改为#wordInner { position: absolute;,它将能够滚动,但不会占据整个页面(而是像普通的container 类一样位于屏幕中间。在JsBin,它在position: absolute,但更改它以查看我正在谈论的问题。

我的代码背后的逻辑是我使用了col-lg-12,并设置了相同的 div 样式,以便它占据整个页面(因为width: 100% 显然不起作用。)

主css:

#wrap {
    position: relative;
}
#main {
    position: relative;
}

ZenPen 的 css(默认链接ZenPen css):

#word {
    overflow: hidden;
    text-shadow: none;
}

#word b, #word strong {
    color: #000;
}

#wordInner {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;

    padding: 5px;
    /* because nav is about 100 px, zenpen's icon menu is about 65px */
    padding-left: 165px;
}

#word {
    overflow-y: scroll;

-webkit-transition: all 600ms;
-moz-transition: all 600ms;
-ms-transition: all 600ms;
-o-transition: all 600ms;
    transition: all 600ms;
}

#word section {
    height: 100%;
    margin: auto;
}

及相关html(链接至ZenPen html:ZenPen html):

 <div class="container" id="wrap">
      <div class="container" id="main">
      <!-- snip irrelevant html -->
      </div>
  </div>

<div class="container" id="apps">
    <div class="row">
       <div class="col-lg-12"  id="appsInner">
         <div><a href="#" id="close_apps">Close</a></div>
         <input type="text" class="form-control" placeholder="Search here" />
       </div>
    </div>
</div>

  <div class="container" id="word">
    <div class="row">
    <div class="col-lg-12 yin" id="wordInner" >
    <div><a href="#" id="close_word">Close</a></div>
    <!-- snip zenpen html -->
    </div>
    </div>
    </div>
  </div>
  </div>

    <nav>
    <ul>
        <li><a href="#" class="btn light"  id="open_apps"><span class="entypo-search"></span></a><span class='button-text'>Apps</span></li>
        <li><a href="#" class="btn red"  id="home"><span class="entypo-home"></span></a><span class='button-text'>Home</span></li>
        <li><a href="#" class="btn green"  id="open_word"><span class="entypo-leaf"></span></a><span class='button-text'>Word</span></li>
    </ul>
  </nav>

【问题讨论】:

    标签: html css twitter-bootstrap


    【解决方案1】:

    您可以将html, body 上的溢出设置为overflow: hidden,然后设置#wordInner { position: fixed; overflow: auto;。这将确保页面右侧只有一个可见的滚动条,并且仅在需要时。如果您需要将其他页面的overflow 设置为visible,您可以在打开和关闭#word 应用程序时使用jQuery 进行设置(因为您已经在使用它了)。

    选项 1(仅使用 CSS):jsBin

    html, body
    {
      overflow: hidden;
    }
    
    #wordInner {  
      position: fixed;
      overflow: auto;
      ...
    }
    

    选项 2(使用 CSS 和 jQuery):jsBin

    CSS

    #wordInner {  
      position: fixed;
      overflow: auto;
      ...
    }
    

    jQuery

    $("#open_word").click(function(event) {
      event.preventDefault();   
      $("html, body").css("overflow", "hidden");
      $("#word").show();
    });
    
    $("#close_word").click(function(event) {
      event.preventDefault();
      $("html, body").css("overflow", "visible");
      $("#word").hide();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 2015-12-30
      • 2014-01-12
      • 2017-05-26
      • 1970-01-01
      • 2014-09-15
      • 2015-11-03
      • 2019-04-25
      相关资源
      最近更新 更多