Как добавить вертикальную полосу прокрутки к таблице, в которой первый столбец всегда фиксирован - PullRequest
0 голосов
/ 22 апреля 2019

Я работаю над решением.

Я создал таблицу; его первый столбец всегда будет зафиксирован всякий раз, когда пользователь прокручивает по горизонтали.

Но сейчас я столкнулся с еще одной проблемой: если слишком много записей, пользователи должны перейти в конец страницы, чтобы прокрутить горизонтально.

Возможно ли сделать его вертикально прокручиваемым только с помощью CSS?

Вот мой код:

<style>
   .row {
   display: flex;
   flex-wrap: wrap;
   margin-right: -15px;
   margin-left: -15px;
   }
   /* width */
   ::-webkit-scrollbar {
   width: 10px;
   height:7px;
   }
   /* Track */
   ::-webkit-scrollbar-track {
   background:#eaeaea;
   }
   /* Handle */
   ::-webkit-scrollbar-thumb {
   background: #ccc; 
   }
   .tg{
   overflow:hidden;
   word-break:normal;
   display:table;
   }
   .tg .tg-29qf{
   border-color:inherit;
   text-align:left}
   .tg .tg-xldj{
   border-color:inherit;
   text-align:left}
   .tg .sticky-col-1{
   left: 0;
   position: absolute;
   top: auto;
   width: 445px;
   }
   .zui-scroller {
   margin-left: 445px;
   overflow-x: scroll;
   overflow-y: visible;
   width: 890px;
   }
   .tg .tg-kiyi{
   border-color:inherit;
   text-align:left;
   min-width:150px;
   display:table-cell;
   padding: 7px 0px;
   }
   .tg .cover-head-cell{
   min-width:300px;
   text-align:center;
   }
   .tg .tg-29qf{
   text-align:left;
   min-width:100px;
   }
   .tg .tg-xldj{
   border-color: inherit;
   text-align: left;
   min-width: 150px;
   display: table-cell;
   padding: 15px 0px;
   }
   .pad-l-r-15{
   padding: 10px 5px !important;
   }
   .tg .tg-dvid{
   border-color:inherit;
   text-align:left;
   vertical-align:top;
   min-width:150px;
   }
   @media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;}}
   .report-row div {
   }
   .total-row div {
   padding: 15px 5px !important;
   background: #fff !important;
   font-size: 14px !important;
   color: #575962 !important;
   font-weight: 500;
   border-bottom:1px solid #ccc !important;
   }
   div.report-row.odd,
   .sticky-col-1.odd {
   background-color: #F5F5F5;
   }
   div.report-row.even,
   .sticky-col-1.even {
   background-color: #ffffff;
   }
   .report-row-header div {
   padding: 15px 5px !important;
   background: #f4f3f8 !important;
   font-size: 14px !important;
   border: none !important;
   color: #575962 !important;
   font-weight: 500;
   }
</style>
<div class="row" style="">
   <div class="tg-wrap">
      <div class="zui-scroller">
         <div class="tg">
            <div class="report-row-header ">
               <div class="tg-kiyi sticky-col-1">#</div>
               <div class="tg-kiyi">Impressions</div>
               <div class="tg-kiyi">Conversion</div>
               <div class="tg-kiyi ">Bids</div>
               <div class="tg-kiyi ">Wins</div>
               <div class="tg-kiyi">Spend</div>
               <div class="tg-kiyi">eCPA</div>
               <div class="tg-kiyi">eCPM</div>
               <div class="tg-kiyi">Win Rate</div>
               <div class="tg-kiyi">Clear Rate</div>
               <div class="tg-kiyi">Actions</div>
            </div>
            <div class="total-row ">
               <div class="tg-xldj sticky-col-1 text-right" style="    border-bottom: 1px solid #ccc !important;
                  height: 52px;"></div>
               <div class="tg-xldj pad-l-r-15">62.36K</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">227.69K</div>
               <div class="tg-xldj pad-l-r-15">108.45K</div>
               <div class="tg-xldj pad-l-r-15">$ 64.11</div>
               <div class="tg-xldj pad-l-r-15">$ 64.11</div>
               <div class="tg-xldj pad-l-r-15">$ 64.11</div>
               <div class="tg-xldj pad-l-r-15">$ 64.11</div>
               <div class="tg-xldj pad-l-r-15">$ 64.11</div>
               <div class="tg-xldj pad-l-r-15">N/A</div>
            </div>
            <!--bindings={
               "ng-reflect-ng-for-of": "[object Object],[object Object"
               }-->
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(255, 255, 255);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(255, 255, 255);">
                  <span class="ng-tns-c0-0 ng-star-inserted">RTB_SA_INR_IOS</span>
               </div>
               <div class="tg-xldj pad-l-r-15">3.38K</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">6.32K</div>
               <div class="tg-xldj pad-l-r-15">3.39K</div>
               <div class="tg-xldj pad-l-r-15">$ 2.75</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.81</div>
               <div class="tg-xldj pad-l-r-15">1.87 %</div>
               <div class="tg-xldj pad-l-r-15">1.87 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(245, 245, 245);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(245, 245, 245);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Grindr - Gay chat</span>
               </div>
               <div class="tg-xldj pad-l-r-15">6.44K</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">33.49K</div>
               <div class="tg-xldj pad-l-r-15">22.47K</div>
               <div class="tg-xldj pad-l-r-15">$ 17.30</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">2.69</div>
               <div class="tg-xldj pad-l-r-15">1.49 %</div>
               <div class="tg-xldj pad-l-r-15">5.20 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(255, 255, 255);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(255, 255, 255);">
                  <span class="ng-tns-c0-0 ng-star-inserted">TextNow - Unlimited Text + Calls</span>
               </div>
               <div class="tg-xldj pad-l-r-15">499.00</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">26.38K</div>
               <div class="tg-xldj pad-l-r-15">25.39K</div>
               <div class="tg-xldj pad-l-r-15">$ 11.08</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">22.21</div>
               <div class="tg-xldj pad-l-r-15">1.04 %</div>
               <div class="tg-xldj pad-l-r-15">52.86 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(245, 245, 245);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(245, 245, 245);">
                  <span class="ng-tns-c0-0 ng-star-inserted">iFunny :)</span>
               </div>
               <div class="tg-xldj pad-l-r-15">6.15K</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">9.41K</div>
               <div class="tg-xldj pad-l-r-15">6.49K</div>
               <div class="tg-xldj pad-l-r-15">$ 2.34</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.38</div>
               <div class="tg-xldj pad-l-r-15">1.45 %</div>
               <div class="tg-xldj pad-l-r-15">1.53 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(255, 255, 255);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(255, 255, 255);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Wordscapes</span>
               </div>
               <div class="tg-xldj pad-l-r-15">10.49K</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">16.34K</div>
               <div class="tg-xldj pad-l-r-15">10.87K</div>
               <div class="tg-xldj pad-l-r-15">$ 5.24</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.50</div>
               <div class="tg-xldj pad-l-r-15">1.50 %</div>
               <div class="tg-xldj pad-l-r-15">1.56 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(245, 245, 245);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(245, 245, 245);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Whisper - Share, Express, Meet</span>
               </div>
               <div class="tg-xldj pad-l-r-15">404.00</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">7.31K</div>
               <div class="tg-xldj pad-l-r-15">400.00</div>
               <div class="tg-xldj pad-l-r-15">$ 0.25</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.63</div>
               <div class="tg-xldj pad-l-r-15">18.29 %</div>
               <div class="tg-xldj pad-l-r-15">18.10 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(255, 255, 255);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(255, 255, 255);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Mr Bullet</span>
               </div>
               <div class="tg-xldj pad-l-r-15">2.72K</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">5.62K</div>
               <div class="tg-xldj pad-l-r-15">2.81K</div>
               <div class="tg-xldj pad-l-r-15">$ 1.22</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.45</div>
               <div class="tg-xldj pad-l-r-15">2.00 %</div>
               <div class="tg-xldj pad-l-r-15">2.07 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(245, 245, 245);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(245, 245, 245);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Trebel Music - Song Downloader</span>
               </div>
               <div class="tg-xldj pad-l-r-15">240.00</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">1.13K</div>
               <div class="tg-xldj pad-l-r-15">233.00</div>
               <div class="tg-xldj pad-l-r-15">$ 0.18</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.74</div>
               <div class="tg-xldj pad-l-r-15">4.86 %</div>
               <div class="tg-xldj pad-l-r-15">4.72 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(255, 255, 255);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(255, 255, 255);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Musi - Unlimited Music For YouTube</span>
               </div>
               <div class="tg-xldj pad-l-r-15">11.21K</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">16.97K</div>
               <div class="tg-xldj pad-l-r-15">15.64K</div>
               <div class="tg-xldj pad-l-r-15">$ 7.80</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.70</div>
               <div class="tg-xldj pad-l-r-15">1.09 %</div>
               <div class="tg-xldj pad-l-r-15">1.51 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(245, 245, 245);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(245, 245, 245);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Happy Color – Color by Number</span>
               </div>
               <div class="tg-xldj pad-l-r-15">4.36K</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">10.65K</div>
               <div class="tg-xldj pad-l-r-15">4.40K</div>
               <div class="tg-xldj pad-l-r-15">$ 3.96</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.91</div>
               <div class="tg-xldj pad-l-r-15">2.42 %</div>
               <div class="tg-xldj pad-l-r-15">2.44 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(255, 255, 255);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(255, 255, 255);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Skout - Chat, Meet New People</span>
               </div>
               <div class="tg-xldj pad-l-r-15">448.00</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">1.25K</div>
               <div class="tg-xldj pad-l-r-15">482.00</div>
               <div class="tg-xldj pad-l-r-15">$ 0.24</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.53</div>
               <div class="tg-xldj pad-l-r-15">2.59 %</div>
               <div class="tg-xldj pad-l-r-15">2.79 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(245, 245, 245);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(245, 245, 245);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Poke Genie for Pokemon Go Auto IV Calculator</span>
               </div>
               <div class="tg-xldj pad-l-r-15">201.00</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">735.00</div>
               <div class="tg-xldj pad-l-r-15">228.00</div>
               <div class="tg-xldj pad-l-r-15">$ 0.10</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.49</div>
               <div class="tg-xldj pad-l-r-15">3.22 %</div>
               <div class="tg-xldj pad-l-r-15">3.66 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(255, 255, 255);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(255, 255, 255);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Sudoku - Classic Logic Game</span>
               </div>
               <div class="tg-xldj pad-l-r-15">646.00</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">1.77K</div>
               <div class="tg-xldj pad-l-r-15">645.00</div>
               <div class="tg-xldj pad-l-r-15">$ 0.41</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.64</div>
               <div class="tg-xldj pad-l-r-15">2.75 %</div>
               <div class="tg-xldj pad-l-r-15">2.74 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(245, 245, 245);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(245, 245, 245);">
                  <span class="ng-tns-c0-0 ng-star-inserted">Solitaire·</span>
               </div>
               <div class="tg-xldj pad-l-r-15">25.00</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">45.10K</div>
               <div class="tg-xldj pad-l-r-15">18.00</div>
               <div class="tg-xldj pad-l-r-15">$ 0.01</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.56</div>
               <div class="tg-xldj pad-l-r-15">2.51K %</div>
               <div class="tg-xldj pad-l-r-15">1.80K %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(255, 255, 255);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(255, 255, 255);">
                  <span class="ng-tns-c0-0 ng-star-inserted">UNICORN - Number Coloring Book</span>
               </div>
               <div class="tg-xldj pad-l-r-15">163.00</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">1.53K</div>
               <div class="tg-xldj pad-l-r-15">195.00</div>
               <div class="tg-xldj pad-l-r-15">$ 0.08</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.47</div>
               <div class="tg-xldj pad-l-r-15">7.87 %</div>
               <div class="tg-xldj pad-l-r-15">9.41 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>
            <div class="report-row ng-tns-c0-0 ng-star-inserted" style="background-color: rgb(245, 245, 245);">
               <div class="tg-xldj sticky-col-1" style="background-color: rgb(245, 245, 245);">
                  <span class="ng-tns-c0-0 ng-star-inserted">theCHIVE</span>
               </div>
               <div class="tg-xldj pad-l-r-15">560.00</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">931.00</div>
               <div class="tg-xldj pad-l-r-15">555.00</div>
               <div class="tg-xldj pad-l-r-15">$ 0.44</div>
               <div class="tg-xldj pad-l-r-15">0.00</div>
               <div class="tg-xldj pad-l-r-15">0.79</div>
               <div class="tg-xldj pad-l-r-15">1.68 %</div>
               <div class="tg-xldj pad-l-r-15">1.66 %</div>
               <div class="tg-xldj pad-l-r-15">
               </div>
            </div>

         </div>
      </div>
   </div>
</div>

Вот jsfiddle с тем же кодом: https://jsfiddle.net/vjg0a7o8/

Ответы [ 7 ]

3 голосов
/ 01 мая 2019

Можно ли сделать его вертикально прокручиваемым только с помощью CSS?

Краткий ответ: да, но давайте сначала проанализируем проблему:

Чтобы показать это, я сделал ваш минимальный пример (я использовал реальный table, а не divs и выбрал макет, который немного отличается, но проблемы по-прежнему будут такими же и применяются к вашим фрагментам кодаа также).

.wrapper {
  display: flex;
  overflow: auto;
}

.sticky-left {
  text-align: left;
  left: 0;
  position: absolute;
}

.sticky-left td {
  max-width: 200px;
  min-width: 200px;
  background: lightgrey;
}

thead th {
  padding: 15px 5px;
  background: #f4f3f8;
  font-size: 14px;
  border: none;
  color: #575962;
  max-width: 200px;
  min-width: 200px;
}

.content-table {
  margin-left: 200px;
}
<div class="wrapper">
  <table class="sticky-left">
    <thead>
      <tr>
        <th>#</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>February</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>February</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>February</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>February</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>February</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>February</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>February</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>February</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>February</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
      </tr>
    </tbody>
  </table>
  <table class="content-table">
    <thead>
      <tr>
        <th>#</th>
        <th>#</th>
        <th>#</th>
        <th>#</th>
        <th>#</th>
        <th>#</th>
        <th>#</th>
        <th>#</th>
        <th>#</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
      <tr>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
        <td>January</td>
      </tr>
    </tbody>
  </table>
</div>

К элементу добавляется полоса прокрутки, если содержимое переполняет flow.Другими словами:

overflow property указывает, следует ли обрезать содержимое или добавлять полосы прокрутки, если содержимое элемента слишком велико, чтобы поместиться в указанной области.

Источник .


Задача # 1

Таким образом, первым подходом будет просто добавить горизонтальную полосу прокрутки на оси Y, просто сделавстолик меньше.Итак, давайте так:
Добавьте height: 200px (или любой другой размер) к классу .wrapper.

https://jsfiddle.net/gwz3rce6/
(Я должен использовать JSFiddle, потому что символпредел был бы превышен, если бы я каждый раз добавлял фрагменты кода)

На первый взгляд это кажется очень многообещающим.У вас есть полоса прокрутки там, где вы хотите.
Проблема в том, что в фиксированном столбце с левой стороны нет потока, поскольку мы добавили position: absolute и left: 0.Проблема в том, что position: absolute использует тело документа и перемещается вместе с прокруткой страницы, пока он не находится внутри позиционированного предка (например, родительский элемент с position: relative).

Проблема # 2

Так почему бы нам просто не добавить position: relative к .wrapper?Фиксированный столбец должен находиться внутри контейнера и не должен ориентироваться в теле документа.
Хорошо, и это так!

https://jsfiddle.net/gwz3rce6/1/

Но это приводит к проблеме!Левый столбец больше не фиксируется ... почему?Теперь это немного усложняется:

Чтобы понять проблему, давайте представим, что левый столбец фактически находится вне элемента .wrapper, и мы разместили его absolute, как в моем первом примере.У вас все еще будет проблема в Проблема № 1 , но по крайней мере у вас не будет проблемы, описанной в начале Проблема № 2 .Таким образом, левый столбец фактически зафиксирован на левой стороне.

Обратите внимание, что у вас есть два контейнера: таблица с вертикальной полосой прокрутки и документ.Прокручивая таблицу, она не оказывает влияния на левый столбец прямо сейчас, потому что она находится за пределами вашей таблицы и, следовательно, не имеет к этому никакого отношения.И это то, что делает position: absolute.Он имитирует элемент вне вашего контейнера, если он не находится в позиционированном контейнере (например, position: relative).

Поскольку он ориентируется на документе, вы получите эффект, если добавите полосу прокрутки к body.

Итак, давайте снова поместим левый столбец внутри вашего контейнера.При добавлении position: relative элемент с абсолютным позиционированием может перемещаться только внутри этого контейнера и не ориентируется на документе.Вот почему он теперь внутри контейнера, а не снаружи (как в Problem # 1 ) его.Но это также причина, почему это больше не исправлено.По той же причине добавление полосы прокрутки к телу может повлиять на левый столбец в Задача # 1 .

Да, это довольно сложно понять ... ноэто также довольно трудно выразить словами.Я все еще надеюсь, что вы чему-то научились из этого, и это ответило на ваш вопрос, хотя я еще не дал решения.

Существуют и другие подходы к задаче, но ни один из них не работает (кроме одногоСейчас опишу) и я рассмотрел наиболее перспективный подход.Кроме того, если я сделал что-то не так и пропустил что-то, не стесняйтесь комментировать.


Решение

Решением этой проблемы является использование position: sticky.

https://jsfiddle.net/zvgn7u49/

В вашем случае вы бы добавили это в класс .tg .sticky-col-1 вместо position: absolute.

Элемент с position: sticky; позиционируется на основе позиции прокрутки пользователя.

Липкий элемент переключается между relative и fixed, в зависимости от позиции прокрутки.Он позиционируется относительно до тех пор, пока в окне просмотра не будет достигнута заданная позиция смещения - затем он «залипнет» на месте (как position:fixed).

Источник .

Но будьте осторожны, так как в нем отсутствует поддержка браузером определенных элементов.Некоторые браузеры (например, Safari) также требуют префикса -webkit-.Вы можете получить дополнительную информацию здесь .

Редактировать: Пока я делал скрипку для вашего кода, я обнаружил, что @ Icaro Heimig уже охваченэто решение, а также сделал ручку.

Я сделал пример на codepen: https://codepen.io/icaromh/pen/gyJdvZ

0 голосов
/ 01 мая 2019

Невозможно иметь фиксированный по x столбец и полосы прокрутки по осям x и y одновременно только по css.

Полосы прокрутки могут быть внизу или справа от элемента div, или и того и другого - я пробовал всеми способами:

Внешняя полоса прокрутки div может скрывать внутреннюю панель прокрутки div - недопустимо.Это потому, что внутренняя прокрутка должна быть на краю div и может быть прокручена за границу.Единственная возможность в css иметь обе полосы прокрутки одновременно - это установить их на один и тот же div с помощью:

overflow-x: scroll; overflow-y: scroll;

.., что равно ..

overflow: auto;

Это прекрасно работает!Итак, теперь вы хотите фиксированный столбец на этом?Единственный способ - позиция : абсолют , фиксированный или липкий .Это единственные способы отсоединить элемент от документа.И ни один из них не может отсоединить только ось x или y для прокрутки на другой оси.

Сделайте это насколько возможно с помощью css и прикрепите панель (и) к документу с помощью небольшого фрагмента JavaScript.Те, у кого отключен JavaScript, могут иметь дополнительную вертикальную полосу прокрутки для столбца.

0 голосов
/ 30 апреля 2019

Возможно ли использовать позицию sticky в вашем приложении?

Я сделал пример для codepen: https://codepen.io/icaromh/pen/gyJdvZ

Если возможно использовать position: sticky, это довольно легковоспроизведите это в своем коде: D

Редактировать: Я удалил много overflows и применил только для родительского div.Кроме того, я изменил некоторые значения z-index, чтобы заголовки и первый столбец отображались правильно.

Можно ли использовать : https://caniuse.com/css-sticky

0 голосов
/ 26 апреля 2019

Я думаю, у меня есть решение для вас.

Добавьте это в свой CSS.

**** CSS *****

.tg-wrap{
    width: 100%;
    position: absolute;
    height: 50%;
    overflow-y: scroll;
}

И удалите атрибут width: 890px из .zui-scroller.

Примечание: я добавил 50%только для демонстрационных целей.Вы можете установить свой рост.Надеюсь, это поможет!

0 голосов
/ 22 апреля 2019

Вы пытались поместить заголовок / первый столбец в отдельный документ .html, а затем остальные в другой. Затем создайте третий файл .html и добавьте два фрейма. Это базовый подход.

0 голосов
/ 22 апреля 2019
.tg-wrap{
         height:100vh; /*covers whole screen*/
         overflow:scroll;
        }
0 голосов
/ 22 апреля 2019

Вы можете создать элемент, имитирующий полосу прокрутки, и поместить его в нужное вам место.Без использования JS вряд ли получится желаемый результат.

Или попробуйте использовать jquery.doubleScroll

$(document).ready(function(){
  $('#double-scroll').doubleScroll();
});
#double-scroll{
  width: 400px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<div id="double-scroll">
  <table id="very-wide-element">
    <tbody>
      <tr>
        <td></td>
      </tr>
    </tbody>
  </table>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...