2016-09-29 2 views
0

다른 div에 포함 된 표가 있는데, 물론 크기가 외부 div보다 큽니다. 현재 스크롤하는 동안 상단에 머리글을 수정하고 표의 내용이 뷰포트를 벗어 났을 때 다시 남겨두기 위해 ScrollToFixed을 사용하고 있습니다. 작동하지만 실제로 못생긴 것은 헤더 행이 고정되어 있지만 내용보다 크고 왼쪽/오른쪽으로 오버플로된다는 것입니다.고정 된 표 머리글이 고정 된 머리글로 고정되어 있습니다.

설명대로 작동하는 the Fiddle을 참조하십시오. 내가 상상할 수있는 것은 어떻게 든 고정 높이와 너비 테이블의 설정이며 오버플로가 있기 때문에 수직 및 수평 스크롤이 가능해야하며 첫 번째 행은 스크롤 할 때 고정되어야합니다. 나는 그것이 작동합니다 설명 코드에 따라

$(document).ready(function() { 
 
    var scrollLeft = 0; 
 
    var leftRoundingRect = $('.table-body')[0].getBoundingClientRect().left; 
 

 
    $('.sticky').scrollToFixed({ 
 
    limit: $('.user.last').offset().top, 
 
    removeOffsets: true, 
 
    zIndex: 0, 
 
    unfixed: function() { 
 
     $(this).offset({ 
 
     left: leftRoundingRect - scrollLeft 
 
     }); 
 
    } 
 
    }); 
 

 
    $(".table-body").scroll(function() { 
 
    scrollLeft = this.scrollLeft; 
 
    $(".user.sticky").offset({ 
 
     left: leftRoundingRect - scrollLeft 
 
    }); 
 
    }); 
 
});
.tab { 
 
    padding: 20px; 
 
    border: 1px solid lightgray; 
 
} 
 

 
.inner-content { 
 
    overflow: hidden; 
 
    padding: 0 10px 0 10px; 
 
} 
 

 
.table-body { 
 
    overflow: auto; 
 
} 
 

 
.users { 
 
    white-space: nowrap; 
 
    font-size: 0; 
 
} 
 

 
.user { 
 
    font-size: 0; 
 
    border-bottom: 1px solid #d3d3d3; 
 
    border-left: 1px solid #d3d3d3; 
 
    color: #555; 
 
    width: 750px; 
 
} 
 

 
.user.odd { 
 
    background: #f4f5f7; 
 
} 
 

 
.sticky { 
 
    background: grey; 
 
} 
 

 
.bold { 
 
    color: #fff; 
 
    font-weight: 600; 
 
} 
 

 
.company, 
 
.firstName, 
 
.lastName, 
 
.roles { 
 
    font-size: 18px; 
 
    border-right: 1px solid lightgray; 
 
    display: inline-block; 
 
    width: 150px; 
 
    padding: 10px; 
 
    overflow: scroll; 
 
    white-space: nowrap; 
 
}
<div class="tab"> 
 
    <div class="inner-content"> 
 
    <div class="users"> 
 
     <div class="user sticky"> 
 
     <div class="firstName bold">First</div> 
 
     <div class="lastName bold">Last</div> 
 
     <div class="roles bold">Role</div> 
 
     <div class="company bold">Company</div> 
 
     </div> 
 
     <div class="table-body"> 
 
     <div class="user"> 
 
      <div class="firstName">Max</div> 
 
      <div class="lastName">Mustermann</div> 
 
      <div class="roles">admin</div> 
 
      <div class="company">HP</div> 
 
     </div> 
 
     <div class="user odd"> 
 
      <div class="firstName">Melanie</div> 
 
      <div class="lastName">Musterfrau</div> 
 
      <div class="roles">readonly</div> 
 
      <div class="company">IBM</div> 
 
     </div> 
 
     <div class="user"> 
 
      <div class="firstName">Max</div> 
 
      <div class="lastName">Mustermann</div> 
 
      <div class="roles">admin</div> 
 
      <div class="company">HP</div> 
 
     </div> 
 
     <div class="user odd"> 
 
      <div class="firstName">Melanie</div> 
 
      <div class="lastName">Musterfrau</div> 
 
      <div class="roles">readonly</div> 
 
      <div class="company">IBM</div> 
 
     </div> 
 
     <div class="user"> 
 
      <div class="firstName">Max</div> 
 
      <div class="lastName">Mustermann</div> 
 
      <div class="roles">admin</div> 
 
      <div class="company">HP</div> 
 
     </div> 
 
     <div class="user odd"> 
 
      <div class="firstName">Melanie</div> 
 
      <div class="lastName">Musterfrau</div> 
 
      <div class="roles">readonly</div> 
 
      <div class="company">IBM</div> 
 
     </div> 
 
     <div class="user last"> 
 
      <div class="firstName">Test</div> 
 
      <div class="lastName">Tester</div> 
 
      <div class="roles">contributor</div> 
 
      <div class="company">SAP</div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div> 
 
<div style="display:inline-block; height: 1000px; padding-top:50px;">Let's Scroll Baby 
 
</div> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://bigspotteddog.github.io/ScrollToFixed/jquery-scrolltofixed-min.js"></script>

답변

0

작업을 수행합니다.

$(document).ready(function() { 
 
    var scrollLeft = 0; 
 
    var leftRoundingRect = $('.table-body')[0].getBoundingClientRect().left; 
 

 
    $(".table-body").scroll(function() { 
 
    scrollLeft = this.scrollLeft; 
 
    $(".user.sticky").offset({ 
 
     left: leftRoundingRect - scrollLeft 
 
    }); 
 
    }); 
 
    
 
    $(".user").width($(".table-body").get(0).scrollWidth - 1); 
 
    
 
});
.tab { 
 
    padding: 20px; 
 
    border: 1px solid lightgray; 
 
    width:220px; 
 
} 
 
.inner-content { 
 
    padding: 0 10px 0 10px; 
 
    width:200px; 
 
} 
 
.header { 
 
    overflow: hidden; 
 
} 
 
.table-body { 
 
    overflow: auto; 
 
    height: 100px; 
 
} 
 
.users { 
 
    white-space: nowrap; 
 
    font-size: 0; 
 
} 
 
.user { 
 
    font-size: 0; 
 
    border-bottom: 1px solid #d3d3d3; 
 
    border-left: 1px solid #d3d3d3; 
 
    color: #555; 
 
    width: 750px; 
 
} 
 
.user.odd { 
 
    background: #f4f5f7; 
 
} 
 
.sticky { 
 
    background: grey; 
 
} 
 
.bold { 
 
    color: #fff; 
 
    font-weight: 600; 
 
} 
 
.company, 
 
.firstName, 
 
.lastName, 
 
.roles { 
 
    font-size: 18px; 
 
    border-right: 1px solid lightgray; 
 
    display: inline-block; 
 
    width: 150px; 
 
    padding: 10px; 
 
    overflow: scroll; 
 
    white-space: nowrap; 
 
}
<div style="display:inline-block; height: 200px; padding-top:50px;">Other Content 
 
</div> 
 
<div class="tab"> 
 
    <div class="inner-content"> 
 
    <div class="header"> 
 
     <div class="user sticky"> 
 
     <div class="firstName bold">First</div> 
 
     <div class="lastName bold">Last</div> 
 
     <div class="roles bold">Role</div> 
 
     <div class="company bold">Company</div> 
 
     </div> 
 
    </div> 
 
    <div class="table-body"> 
 
     <div class="user"> 
 
     <div class="firstName">Max</div> 
 
     <div class="lastName">Mustermann</div> 
 
     <div class="roles">admin</div> 
 
     <div class="company">HP</div> 
 
     </div> 
 
     <div class="user odd"> 
 
     <div class="firstName">Melanie</div> 
 
     <div class="lastName">Musterfrau</div> 
 
     <div class="roles">readonly</div> 
 
     <div class="company">IBM</div> 
 
     </div> 
 
     <div class="user"> 
 
     <div class="firstName">Max</div> 
 
     <div class="lastName">Mustermann</div> 
 
     <div class="roles">admin</div> 
 
     <div class="company">HP</div> 
 
     </div> 
 
     <div class="user odd"> 
 
     <div class="firstName">Melanie</div> 
 
     <div class="lastName">Musterfrau</div> 
 
     <div class="roles">readonly</div> 
 
     <div class="company">IBM</div> 
 
     </div> 
 
     <div class="user"> 
 
     <div class="firstName">Max</div> 
 
     <div class="lastName">Mustermann</div> 
 
     <div class="roles">admin</div> 
 
     <div class="company">HP</div> 
 
     </div> 
 
     <div class="user odd"> 
 
     <div class="firstName">Melanie</div> 
 
     <div class="lastName">Musterfrau</div> 
 
     <div class="roles">readonly</div> 
 
     <div class="company">IBM</div> 
 
     </div> 
 
     <div class="user last"> 
 
     <div class="firstName">Test</div> 
 
     <div class="lastName">Tester</div> 
 
     <div class="roles">contributor</div> 
 
     <div class="company">SAP</div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div> 
 
<div style="display:inline-block; height: 200px; padding-top:50px;">Other Content 
 
</div> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

관련 문제