DataEdit

#func; table에서 특정영역이 고정된 가로 스크롤 생성

by Bigdaditor

Web

# HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>가로 스크롤</title>
</head>
<body>
<!-- 세로 스크롤이 들어갈 영역 -->
<div class="vertical">
	<div class="wrap">
		<table class="wrapTable">
			<tr>
              <th>1</th>
              <th>2</th>
              <th>3</th>
              <th>4</th>
			</tr>
			<tr>
              <td>1-1</td>
              <td>2-1</td>
              <td>3-1</td>
              <td>4-1</td>
            </tr>
            <tr>
              <td>1-2</td>
              <td>2-2</td>
              <td>3-2</td>
              <td>4-2</td>
            </tr>
            <tr>
              <td>1-3</td>
              <td>2-3</td>
              <td>3-3</td>
              <td>4-3</td>
            </tr>
		</table>
	</div>
    <!-- 가로 스크롤이 반영되는 영역 -->
    <div class="horizon">
      <table class="horizonTable">
        <tr>
          <th>6</th>
          <th>7</th>
          <th>8</th>
          <th>9</th>
          <th>10</th>
        </tr>
        <tr>
          <td>6-1</td>
          <td>7-1</td>
          <td>8-1</td>
          <td>9-1</td>
          <td>10-1</td>
        </tr>
        <tr>
          <td>6-2</td>
          <td>7-2</td>
          <td>8-2</td>
          <td>9-2</td>
          <td>10-2</td>
        </tr>
        <tr>
          <td>6-3</td>
          <td>7-3</td>
          <td>8-3</td>
          <td>9-3</td>
          <td>10-3</td>
        </tr>
      </table>
	</div>
</div>
<!-- 가로 스크롤 영역 -->
<div class="scroll">
	<div class="scrollContent">
	</div>
</div>
</body>
</html>

- table을 움직이지 않는 table(wrapTable)하나와 그렇지 않은 table(horizonTable)을 나눠서 만들어줍니다.

- div(scroll)에 가로 스크롤을 만들어 줍니다.

 

# CSS

/*
	내용이 세로로 많으면 스크롤 지정
*/
.vertical {
	width: max-content;
	overflow-y: scroll;
}
/*
	두 개의 테이블을 옆으로 나란히 배치하기 위해
	float 속성을 사용함
*/
.wrap {
	float: left;
}
.wrapTable tr th,td {
	border: 1px solid black;
}
/*
	스크롤이 생성되는 영역이 아니고
	내용이 안보여야해서 overflow속성은 hidden으로 지정
*/
.horizon {
	width: 100px;
	overflow-x: hidden;
}
.horizonTable {
	width: max-content;
}
.horizonTable tr th,td {
	border: 1px solid black;
}
/*
	실제로 스크롤이 생성되는 영역이라서
	내용이 overflow속성을 scroll로 지정
*/
.scroll {
	height: 20px;
	overflow-x: scroll;
}
.scrollContent {
	height: 20px;
}

 

# JQuery

$(function() {
	$(".scroll").width($(".horizon").width());
	$(".scrollContent").width($(".horizonTable").width());
	$(".scroll").on("scroll", function(e){
		$(".horizon").scrollLeft($(".scroll").scrollLeft());
	});
});

- div(scroll)div(horizon)과 같은 크기로 지정해줍니다.

- div(scroll) 안에 div(scrollContent)table(horizonTable)과 같은 크기로 지정해줍니다.

- div(scroll)overflow-x속성이 scroll입니다.

- div(scrollContent)의 크기를 table(horizonTable)과 같은 크기를 줬기 때문에 스크롤이 같습니다.

- scrollLeft 함수는 선택자가 가로로 스크롤한 위치 값을 반환합니다.

- div(scroll)이 가로로 스크롤한 위치값을 div(horizon)에 반영해서 동시에 움직이는 것 처럼 보이게 해줍니다.

 

 

'Web' 카테고리의 다른 글

#func; 사이드 드롭다운 메뉴 숨기기  (0) 2021.06.24

블로그의 정보

DataEdit

Bigdaditor

활동하기