【问题标题】:How to make on a specific element scroll, rather than the entire page?如何在特定元素上滚动,而不是整个页面?
【发布时间】:2015-12-11 17:37:10
【问题描述】:

在特定控件跨越屏幕宽度并创建水平滚动条之前,我遇到过问题。只需将控件封装在 <div style="overflow:auto;"> 中即可修复它,以便仅滚动该 div 的内容。

这是我得到的:

整个页面都有一个水平滚动条,因此如果您滚动查看所有网格的内容,您将无法再看到上面表格中的搜索参数。

截图中包含网格的表格是这样创建的:

<div id="divPageControls" style="padding-right:0px; padding-bottom:15px">

<!-- the table(s) for the 'top half' of the application -->

<table width="100%" cellspacing="0" cellpadding="0" border="0" class="clsBorderColor" style="LEFT:10px; POSITION:relative; TOP:10px;">
    <tr>
        <td height="5px">
        </td>
    </tr>
    <tr>
        <td valign="top" align="center">
        <div style="overflow:auto;width:100%;">
            <asp:datagrid id="dgAuditlog" runat="server" HeaderStyle-CssClass="clsGridHeaderText" ItemStyle-CssClass="clsGridCellText" PageSize="10" bodyHeight="220px" width="98%" CssClass="tblScroll">
                <Columns>
                    <asp:TemplateColumn HeaderText="Select" ItemStyle-HorizontalAlign="Center" HeaderStyle-CssClass="clsGridHeaderText" ItemStyle-Wrap="False" HeaderStyle-Wrap="False">
                        <ItemTemplate>
                            <input type="checkbox" tabindex="-1" />
                        </ItemTemplate>
                    </asp:TemplateColumn>
                </Columns>
            </asp:datagrid>
        </div>
        </td>
    </tr>
    <tr>
        <td height="5px"></td>
    </tr>
</table>
</div>

我尝试移动 div 以仅包含网格,仅包含 tdtr、整个 table。这要么没有任何区别,要么给了我一些可能更不可用的东西:

滚动条剪辑了网格,现在也有一个垂直的,而不是“下拉”来填充页面。

任何人对我可以做些什么来使包含此表的块具有水平滚动条而不是垂直“收缩”有任何想法吗?

编辑这是另一个网格的屏幕截图,在弹出窗口中,只有网格滚动:

在这种情况下,它垂直滚动,而不是水平滚动。但最终我的实际问题中的这个网格应该表现相同;只有特定的元素应该滚动,而不是整个页面。

【问题讨论】:

  • 你试过overflow-x吗?
  • 不幸的是,这并没有什么不同。
  • 不清楚您在寻找什么。你想要一个没有垂直滚动的水平滚动?你已经明白了,对吧。为什么需要更改 DIV?
  • 我希望滚动条被“包含”,这样只有网格滚动,而不是整个页面。当网格水平滚动时,顶部的搜索参数应该仍然可见。 @rkawano 我用一个新的屏幕截图编辑了我的问题,该屏幕截图显示了一个垂直滚动的网格以进行比较。

标签: html css asp.net


【解决方案1】:

好的,再次编辑:

<table style="width: 100%; table-layout: fixed;">
  <tr>
    <td>
      <div style="width: 100%; overflow: auto; background-color: #00F; height: 100px">
        Grid here ...
      </div>
    </td>
  </tr>
</table>

参见此处:How to stop table from resizing when contents grow?

【讨论】:

  • 这在网格下方给了我一个“空”滚动条。我可以看到向左或向右平移的按钮,但没有 actual 滚动条来跟踪位置。此外,这仍然会在实际页面上产生滚动条,如我的第一个屏幕截图所示。
  • 将我的代码更改为溢出自动 + 溢出-y 可见。再看看。
  • 如果我把它放在网格本身周围,在&lt;TR&gt;&lt;TD&gt; grid &lt;/TD&gt;&lt;/TR&gt; 内,那么网格在&lt;TD&gt; 内的左右两侧都有很大的边距。尽管如此,仍然是一个“主页”的整体具有整个滚动条。
  • 现在已经很接近了。我必须从div 中删除height,因为用户可以更改每页显示的记录数。不幸的是,尽管网格有足够的空间向下扩展,但它仍然显示垂直滚动条。我认为这是由于 table-layout: fixed; ?我尝试为table 设置height:auto;,但这会导致类似的行为。
  • 当元素在表格中增长时,表格将调整大小,而不考虑 CSS 溢出定义。这是浏览器上的主要行为,请参阅我发布的链接。设置表格布局将阻止表格调整大小,并且浏览器将使用在子元素上定义的溢出。我相信你必须使用overflow-y (visible|hidden|scroll|auto|initial|inherit) 来解决你的垂直滚动问题。
【解决方案2】:

你真的搞砸了你的问题..但我的理解是你想要一个不滚动的身体部分和一个滚动的 div。如果 div id 是#divPageControls。

您可以使用以下 css 属性:

       #divPageControls
        {
        overflow-x:auto;//If you want it to scroll Horizontally
        overflow-y:auto;//If you want it to scroll Vertically
        }
        body
        {
        overflow:hidden;
         } //Which will make body overflow hidden both horizontal and  vertical

希望它会有所帮助:)

【讨论】:

  • 使用这个,我没有得到滚动条任何地方,我只是得到一个从屏幕上跑出来的网格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多