如何设置 div 的样式以使里面的表格部分隐藏并且可以滚动

Posted

技术标签:

【中文标题】如何设置 div 的样式以使里面的表格部分隐藏并且可以滚动【英文标题】:How to style a div so that the table inside gets partially hidden and can be scrolled 【发布时间】:2018-03-02 22:24:06 【问题描述】:

我有一个表格,我想将它放在一个 div 中,以便表格只显示到 div 的高度,并且可以滚动以查看表格的其余部分。这是我的代码:

#listTimes 
  margin-right: 0;
  height: 100px;


#timesList table 
  border-collapse: collapse;
  margin: 0 auto;
  right: 0;
  left: 0;


#timesList table, td, th 
  border: 1px solid black;
  padding: 5px;


#timesList th 
  text-align: left;


#session 
  border-radius: 5px 5px 0 0;
  height: 10px;
  width: 20%;
  margin: 0 auto;
<html>
  <body>
    <div class="listTimes">
      <form id="session">
	          <select name="sessions" onchange="showUser(this.value)">
	            <option value="1">Session 1</option>
	            <option value="2">Session 2</option>
	            <option value="3">Session 3</option>
	            <option value="4">Session 4</option>
	            <option value="5">Session 5</option>
	          </select>
	         </form>
	         <br>
	         <div id="timesList">
             <!-- This is where the table is -->
             <table>
               <tr>
                 <th>No.</th>
                 <th>foo</th>
                 <th>bar</th>
               </tr>
               <tr>
                 <th>1</th>
                 <th>fubar</th>
                 <th>lnrbaaet</th>
               </tr>
             </table>
	         </div>
	      </div>
    </div>
  </body>
</html>

现在,表格只是按原样显示。我想同时为表格和表格设置一个高度,当我滚动查看表格时,表格应该跟随我。我尝试使用高度属性、溢出属性,但它们都不起作用。

【问题讨论】:

【参考方案1】:

不确定您所说的“表格应该跟随我”是什么意思,但我认为您的意思是它应该保持不变。在这种情况下,您需要将高度和溢出添加到 #timesList 元素。如果没有,请将其添加到 #listTimes 元素。

#listTimes 
  margin-right: 0;
  height: 100px;

#timesList 
  height: 50px;
  overflow: auto;

#timesList table 
  border-collapse: collapse;
  margin: 0 auto;
  right: 0;
  left: 0;


#timesList table, td, th 
  border: 1px solid black;
  padding: 5px;


#timesList th 
  text-align: left;


#session 
  border-radius: 5px 5px 0 0;
  height: 10px;
  width: 20%;
  margin: 0 auto;
<html>
  <body>
    <div class="listTimes">
      <form id="session">
	          <select name="sessions" onchange="showUser(this.value)">
	            <option value="1">Session 1</option>
	            <option value="2">Session 2</option>
	            <option value="3">Session 3</option>
	            <option value="4">Session 4</option>
	            <option value="5">Session 5</option>
	          </select>
	         </form>
	         <br>
	         <div id="timesList">
             <!-- This is where the table is -->
             <table>
               <tr>
                 <th>No.</th>
                 <th>foo</th>
                 <th>bar</th>
               </tr>
               <tr>
                 <th>1</th>
                 <th>fubar</th>
                 <th>lnrbaaet</th>
               </tr>
             </table>
	         </div>
	      </div>
    </div>
  </body>
</html>

【讨论】:

哇,谢谢!它完全有效!我看到另一个有效的答案也已发布,我将接受这一点,但为了记录,您的两个答案都有效。我实际上只是这样做,因为我不能接受 2 个答案。但我支持你!【参考方案2】:

#timesList 上添加overflow-y 属性集height

 #timesList 
      margin-right: 0;
      height: 100px;
      overflow-y: scroll;
    

.listTimes 
  height: 100px;
  overflow: hidden;


#timesList 
  height: 100%;
  overflow-y: scroll;
  /* rough width of scrollbar */
  padding-right: 20px;
  margin-right: -20px;


#timesList table 
  border-collapse: collapse;
  margin: 0 auto;
  right: 0;
  left: 0;


#timesList table,
td,
th 
  border: 1px solid black;
  padding: 5px;


#timesList th 
  text-align: left;


#session 
  border-radius: 5px 5px 0 0;
  height: 10px;
  width: 20%;
  margin: 0 auto;
<div class="listTimes">
  <form id="session">
    <select name="sessions" onchange="showUser(this.value)">
	            <option value="1">Session 1</option>
	            <option value="2">Session 2</option>
	            <option value="3">Session 3</option>
	            <option value="4">Session 4</option>
	            <option value="5">Session 5</option>
	          </select>
  </form>
  <br>
  <div id="timesList">
    <!-- This is where the table is -->
    <table>
      <tr>
        <th>No.</th>
        <th>foo</th>
        <th>bar</th>
      </tr>
      <tr>
        <th>1</th>
        <th>fubar</th>
        <th>lnrbaaet</th>
      </tr>
      <tr>
        <th>1</th>
        <th>fubar</th>
        <th>lnrbaaet</th>
      </tr>
      <tr>
        <th>1</th>
        <th>fubar</th>
        <th>lnrbaaet</th>
      </tr>
      <tr>
        <th>1</th>
        <th>fubar</th>
        <th>lnrbaaet</th>
      </tr>
    </table>
  </div>
</div>

【讨论】:

你能告诉我如何隐藏出现的滚动条吗? @Cubetastic 已更新。您可以使用::-webkit-scrollbar display: none;,但我不确定它是否支持 Firefox 或 Edge... padding-right: 20px; margin-right: -20px; 不起作用,它只是改变了滚动条的位置。有没有办法单独降低z-index? ::-webkit-scrollbar display: none; 可以在 chrome 中使用,但不能在 Firefox 中使用,就像你说的那样。 除了::-webkit-scrollbar 我不知道隐藏滚动条的另一种方法。它应该可以正常工作,就像在我的 sn-p 中一样。你能提供一个你的标记的演示吗?可能因为其他影响它而无法正常工作

以上是关于如何设置 div 的样式以使里面的表格部分隐藏并且可以滚动的主要内容,如果未能解决你的问题,请参考以下文章

css表格没数据tbody

如何使用 Tailwind 为类似于 HTML 表格的内容设置样式

js怎么根据div id修改其他div样式

CSS如何隐藏td里面超出的文字?

原生DIV,控制两个DIV显示隐藏切换,且切换后样式形状不乱

DIV,CSS如何实现“加减号”“显示隐藏”效果