縦方向と横方向のデータを含む巨大なテーブルがあります...
このように:jsfiddle
左端の列と一番上の行を固定して、両方向にスクロールしているときに、これらの 2 つ (列と行) を保持できるようにしたいと考えています。ただし、コンテンツのみを移動します。
JS/CSSでこれを達成する方法は?
双方向スクロールがあるため、純粋なcssソリューションではうまくいかないと思います。
someclass { position: fixed }
縦方向と横方向のデータを含む巨大なテーブルがあります...
このように:jsfiddle
左端の列と一番上の行を固定して、両方向にスクロールしているときに、これらの 2 つ (列と行) を保持できるようにしたいと考えています。ただし、コンテンツのみを移動します。
JS/CSSでこれを達成する方法は?
双方向スクロールがあるため、純粋なcssソリューションではうまくいかないと思います。
someclass { position: fixed }
あなたの質問に答えるために必要なコード全体は、ここに含めるには大きすぎます。代わりに、答えを保持しているJSBinにリンクし、スタイリングと JavaScript だけを含めます。
注意事項は次のとおりです。
position: fixed
スタイル属性を設定すると、基本的にテーブルからそれらを分割するためです。
div
ことposition: fixed
を検討してください。HTML:
<!-- Notice I removed background and border color from table tag -->
<table border="0" width="100%" cellpadding="3" cellspacing="1">
<tr>
<td>Dead Cell</td><!-- this cell is not shown -->
...
CSS:
/* Make white space above table since we broke the column headers out of the table */
table {
margin-top: 51px;
position: relative;
}
table td {
border: 1px solid #FFCC00;
height: 44px;
background-color: #FFFFCC;
}
/* styling for column headers */
table tr:first-child {
position: fixed;
top: 0;
left: 57px;
z-index: 100;
}
/* remove first cell in top left position */
table tr:first-child td:first-child {
display: none;
}
table tr:first-child td,
table tr {
position: relative;
}
table tr:first-child td {
background: orange;
}
table tr td:first-child {
background: orange;
position: fixed;
width: 39px
}
/* Make white space to the left of table since we broke the row headers out of the table */
table tr:nth-child(n+2) td:nth-child(2) {
margin-left: 48px;
display: block;
}
JS:
$(function(){ // When document is loaded and ready
$(window).scroll(function() { // When we scroll in the window
// Move column headers into place
$('table tr:first-child td').css('left', - $(this).scrollLeft());
// Move row headers into place
$('table tr td:first-child').each(function() {
$(this).position({ // jQuery UI overloaded function
my: "left top",
at: "left top",
of: $(this).parent(),
using: function(pos) {
$(this).css('top', pos.top);
}
});
});
});
});
繰り返しますが、ここにJSBinへのリンクがあります。