반응형 테이블을 별도의 강좌로 만들기에는 너무 간단한 것같아서, 간단글로 정리해봤습니다.
반응형 테이블
주로 <table>로 구성되는 (데이터) 테이블은, 가로길이가 긴 경우 폭이 좁은 모바일 화면에서 보여주기 쉽지 않습니다. 대부분의 경우, 항목/필드를 열 (세로방향)로 가르고, 목록/데이터는 행 (가로방향)로 보여주게 되는데, 항목이 많아지게 되면 모바일 화면에서 한꺼번에 표시할 수 없습니다. 그런 경우, (기기에 따라서) 테이블의 일부만 보이거나, 테이블 전체를 보여주는 대신 구체적인 내용은 줌을 해야 보이게 됩니다.
출처: Chris Coyier - http://css-tricks.com/responsive-data-tables/
반응형 테이블은, 이러한 문제점을 해결하기 위하여, 테이블 형태를 조금 바꾸지만, 원래의 테이블 사용 목적에 맞추어, 조정하는 것을 뜻합니다. 이에 대해서, Chris Coyier가 정리한 글을 기반으로, 그 유형을 다시 정리해봤습니다.
제목 반복형 (또는 Reflow table)
항목이 많아질때 테이블의 폭이 넓어지는 것을 피하기 위한 방법으로, 매 행의 데이터를, 항목별 제목을 반복해가면서 보여주는 형태로 바꾸는 것입니다.
아래는 Chris Coyier의 해결 방법입니다. 보시는대로, 기존에는 한 줄로 나오던 한 사람의 내용을, 항목별 내용으로 세로로 보여주고, 매 사람마다 다른 배경색을 사용해서 가독성을 높이고 있습니다.
출처: Chris Coyier - http://css-tricks.com/responsive-data-tables/
Chris Coyier가 사용한 방법은, 테이블의 모든 요소를 block으로 바꾸고, 맨 상단 행인 항목별 제목을 가리고, 적절한 제목이 붙은 <td>를 한줄로 표기하는 것입니다.
@media only screen and (max-width: 760px), (min-device-width: 768px) and (max-device-width: 1024px) {
// Force table to not be like tables anymore */
table, thead, tbody, th, td, tr {
display: block;
}
// Hide table headers (but not display: none;, for accessibility) */
thead tr {
position: absolute;
top: -9999px;
left: -9999px;
}
tr { border: 1px solid #ccc; }
td {
// Behave like a "row" */
border: none;
border-bottom: 1px solid #eee;
position: relative;
padding-left: 50%;
}
td:before {
// Now like a table header */
position: absolute;
/* Top/left values mimic padding */
top: 6px;
left: 6px;
width: 45%;
padding-right: 10px;
white-space: nowrap;
}
//
Label the data
*/
td:nth-of-type(1):before { content: "First Name"; }
td:nth-of-type(2):before { content: "Last Name"; }
td:nth-of-type(3):before { content: "Job Title"; }
td:nth-of-type(4):before { content: "Favorite Color"; }
td:nth-of-type(5):before { content: "Wars of Trek?"; }
td:nth-of-type(6):before { content: "Porn Name"; }
td:nth-of-type(7):before { content: "Date of Birth"; }
td:nth-of-type(8):before { content: "Dream Vacation City"; }
td:nth-of-type(9):before { content: "GPA"; }
td:nth-of-type(10):before { content: "Arbitrary Data"; }
}
이 방법의 단점은,
- IE에서는 table 요소들을 display:block으로 설정하면 의도치 않은 결과가 나올 수 있고
- 각 항목의 제목들을 :before 로 하드코딩 해야 한다
는 점입니다.
비슷한 접근 방법으로 Mobifreaks의 방법도 있습니다. 다른 점은, table요소들 대신에 table display 특성들로 설정된 div 요소들을 이용하여 테이블을 구성하는 것 (IE 문제점 해결)과, 항목제목을 :before에 하드코딩하는 것이 아니라, div의 data-label 을 통해서 넘겨주는 것 (CSS 하드코딩 문제점 부분 해결)입니다.
2311LoremIpsum dolor22Web designer1234567890
.table{
display:table;
}
.table-head{
display:table-header-group;
}
.row{
display:table-row;
}
.column{
display:table-cell;
}
// Responsive table */
@media all and (max-width: 640px){
.table,
.row,
.column,
.column:before{
display:block; // Converts a table, table row, table column and table column:before into a block element */
}
.table-head{
position:absolute; // Hides table head but not using display none */
top:-1000em;
left:-1000em;
}
:
.column:before{ // prints the value of data-label attribute before the column data */
font-weight:bold;
padding-right:20px;
font-size:12px;
content:" "attr(data-label)" //"; // call the attribute value of data-label and adds a string // */
}
}
관련자료
- css-tricks: http://css-tricks.com/responsive-data-tables/
- Mobifreaks: http://mobifreaks.com/user-interface/responsive-and-seo-friendly-data-tables/
- Derek Pennycuffs’ mobile first version: http://jsbin.com/arixic
가로 스크롤 제공형
가로로 스크롤을 제공하여, 필요한 공간을 확보하는 형태입니다. 아래는 테이블의 행과 열을 교체하여, 항목제목은 항상 좌측에 고정하고, 내용을 가로로 스크롤 할 수 있도록 하는 방법입니다.
출처: David Bushell - http://dbushell.com/2012/01/05/responsive-tables-2/
@media only screen and (max-width: 40em) { //640*/
#rt1 { display: block; position: relative; width: 100%; }
#rt1 thead { display: block; float: left; }
#rt1 tbody { display: block; width: auto; position: relative; overflow-x: auto; white-space: nowrap; }
#rt1 thead tr { display: block; }
#rt1 th { display: block; }
#rt1 tbody tr { display: inline-block; vertical-align: top; }
#rt1 td { display: block; min-height: 1.25em; }
}
참고로 이 방법은, 아이토론의 시스템 설명 페이지에서 토론레벨별 권한/제약을 보여지는 데에 사용되었습니다.
각각 테블릿까지 보이는 테이블과, 모바일에서 보이는 반응형 테이블입니다.
또다른 방법으로는, 원 테이블의 행과 열을 그대로두고 항목들을 스크롤 할 수 있도록 제공하는 것입니다. 아래는 zurb가 구현한 가로 스크롤형 반응형 테이블의 구동 원리를 보여주는 그림입니다. zurb는 이를 CSS와 js 화일로 해서 제공하고 있습니다. (github 링크)
출처: zurb blog - http://www.zurb.com/article/982/a-new-take-on-responsive-tables
두가지 방법 모두 사용처가 다르기에, 다른 클래스로 지정해서 사용하거나, 사용자가 선택할 수 있도록 제공하는 것도 좋을것 같습니다.
관련자료
- David Bushell: http://dbushell.com/2012/01/05/responsive-tables-2/
- zurb: http://www.zurb.com/playground/responsive-tables
선택/생략형
또다른 접근 방법으로는, 일부 항목(열)을 선택적으로 가리거나 생략하는 방법입니다.
다음은, 각각 원래 테이블에서 점점 작아지는 스크린에서 보이는 테이블을 보이고 있습니다.
출처: Irishstu.com(Stewart Curry) - http://www.irishstu.com/stublog/2011/12/12/tables-and-responsive-design/
원리는 간단하게, 생략하기 원하는 항목(열)의 th를 display:none; visibility:hidden; 로 가리는 것입니다.
하지만, 때로는 사용자가 보기 원하는 항목을 다를 수도 있기에, 사용자가 직접 항목을 선택하는 방법도 제안되었습니다. 반응형 웹 기법/기술을 선도하고 있는 filament group에서 제안한 방법은, 사용자에게 선택권을 주는 방법입니다. 자세한 코드는 원글에 자세히 설명되어 있으니 직접 참조하세요.
출처: filament group - http://filamentgroup.com/lab/responsive_design_approach_for_complex_multicolumn_data_tables/
관련자료
- Stewart Curry: http://www.irishstu.com/stublog/2011/12/13/tables-responsive-design-part-2-nchilds/
- filament group: http://filamentgroup.com/lab/responsive_design_approach_for_complex_multicolumn_data_tables/
구조변경형
마지막으로, 원래의 테이블 구조를 포기하고 다른 형태로 변형하는 접근방법도 있습니다.
우선, 간단하게 테이블의 구조를 없애고, 각 항목(열)에 해당하는 내용을 색으로 보여주는 방법입니다. (Brad Czerniak’s Rainbow table)
출처: css-tricks.com - http://css-tricks.com/responsive-data-table-roundup/
또다른 방법으로, 테이블을 일종의 썸네일로 보여주고, 한번더 클릭하면 별도의 화면에서 전체 내용을 보여주는 방법입니다. ( Scott Jehl’s 썸네일 방식: http://jsbin.com/apane6/14 )
출처: css-tricks.com - http://css-tricks.com/responsive-data-table-roundup/
마지막으로 가장 창의적인 방법으로, 숫자가 들어있는 테이블을 자동으로 파이차트로 변형하는 방법입니다. ( Scott Jehl’s 그래프 전환: http://jsbin.com/emexa4 ) 당연히 숫자내용이 아닌 테이블의 경우는 적용할 수 없습니다.
출처: css-tricks.com - http://css-tricks.com/responsive-data-table-roundup/
관련자료
- Brad Czerniak’s Rainbow table (테이블 형식을 포기, 각 열을 색으로 구분): http://hawidu.com/2011/04/27/another-responsive-data-tables-approach/
- Scott Jehl’s 그래프 전환: http://jsbin.com/emexa4
- Scott Jehl’s 썸네일 방식: http://jsbin.com/apane6/14
조합/정리된 구현
그밖에 이러한 기법들을 한 곳에 모아서 정리한 것들도 있습니다.
- bootstrap 기반으로 1) 생략형, 2) 행열 교체후 가로스크롤 제공형, 3) 제목반복형을 구현+정리함: http://elvery.net/demo/responsive-tables/
- jquerymobile에서 제공되는 1) 제목반복형 (reflow table), 2) 선택형의 여러 적용사례 들을 구현함: http://jquerymobile.com/branches/tables/docs/tables/
강좌 내용 원본 링크
- 구글 문서 링크
- B. 반응형 테이블
댓글 11개
수치 등, '비교'를 해야 하는 경우는, 가로스크롤 제공형이나 선택형도 괜찮을것 같고요. ^^
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 5230 | 13년 전 | 3061 | ||
| 5229 | 13년 전 | 566 | ||
| 5228 | 13년 전 | 609 | ||
| 5227 | 13년 전 | 715 | ||
| 5226 | 13년 전 | 9169 | ||
| 5225 | 13년 전 | 2181 | ||
| 5224 | 13년 전 | 2594 | ||
| 5223 | 13년 전 | 2564 | ||
| 5222 | 13년 전 | 3129 | ||
| 5221 |
visualp
|
13년 전 | 716 | |
| 5220 |
|
13년 전 | 749 | |
| 5219 | 13년 전 | 4645 | ||
| 5218 |
|
13년 전 | 679 | |
| 5217 |
크라이스트
|
13년 전 | 1365 | |
| 5216 | 13년 전 | 1218 | ||
| 5215 | 13년 전 | 1239 | ||
| 5214 | 13년 전 | 1107 | ||
| 5213 | 13년 전 | 645 | ||
| 5212 | 13년 전 | 1335 | ||
| 5211 | 13년 전 | 731 | ||
| 5210 |
visualp
|
13년 전 | 1451 | |
| 5209 |
visualp
|
13년 전 | 1084 | |
| 5208 |
mammoth
|
13년 전 | 727 | |
| 5207 | 13년 전 | 2106 | ||
| 5206 | 13년 전 | 1074 | ||
| 5205 | 13년 전 | 691 | ||
| 5204 |
|
13년 전 | 2259 | |
| 5203 | 13년 전 | 1173 | ||
| 5202 | 13년 전 | 1193 | ||
| 5201 |
kastel
|
13년 전 | 1353 | |
| 5200 | 13년 전 | 1062 | ||
| 5199 | 13년 전 | 561 | ||
| 5198 | 13년 전 | 626 | ||
| 5197 | 13년 전 | 1563 | ||
| 5196 | 13년 전 | 775 | ||
| 5195 | 13년 전 | 1791 | ||
| 5194 | 13년 전 | 1293 | ||
| 5193 | 13년 전 | 606 | ||
| 5192 | 13년 전 | 4048 | ||
| 5191 | 13년 전 | 729 | ||
| 5190 |
|
13년 전 | 1849 | |
| 5189 | 13년 전 | 1169 | ||
| 5188 | 13년 전 | 1542 | ||
| 5187 |
믹스디자인
|
13년 전 | 804 | |
| 5186 |
|
13년 전 | 2382 | |
| 5185 | 13년 전 | 1427 | ||
| 5184 | 13년 전 | 887 | ||
| 5183 | 13년 전 | 1402 | ||
| 5182 | 13년 전 | 680 | ||
| 5181 | 13년 전 | 711 | ||
| 5180 |
프리온관리자
|
13년 전 | 715 | |
| 5179 | 13년 전 | 982 | ||
| 5178 | 13년 전 | 647 | ||
| 5177 | 13년 전 | 570 | ||
| 5176 | 13년 전 | 680 | ||
| 5175 | 13년 전 | 1396 | ||
| 5174 | 13년 전 | 848 | ||
| 5173 | 13년 전 | 589 | ||
| 5172 |
|
13년 전 | 561 | |
| 5171 | 13년 전 | 898 | ||
| 5170 |
KhanSu
|
13년 전 | 692 | |
| 5169 | 13년 전 | 2157 | ||
| 5168 | 13년 전 | 1485 | ||
| 5167 |
sir24
|
13년 전 | 679 | |
| 5166 | 13년 전 | 1741 | ||
| 5165 | 13년 전 | 727 | ||
| 5164 | 13년 전 | 1650 | ||
| 5163 |
|
13년 전 | 991 | |
| 5162 |
곰도리푸우
|
13년 전 | 4084 | |
| 5161 |
UltraUCC
|
13년 전 | 1224 | |
| 5160 |
|
13년 전 | 883 | |
| 5159 |
그런듯아닌듯
|
13년 전 | 544 | |
| 5158 |
|
13년 전 | 517 | |
| 5157 | 13년 전 | 1651 | ||
| 5156 | 13년 전 | 1152 | ||
| 5155 | 13년 전 | 2631 | ||
| 5154 | 13년 전 | 785 | ||
| 5153 | 13년 전 | 781 | ||
| 5152 |
|
13년 전 | 622 | |
| 5151 | 13년 전 | 825 | ||
| 5150 |
senseme
|
13년 전 | 549 | |
| 5149 |
워드앤코드
|
13년 전 | 999 | |
| 5148 | 13년 전 | 693 | ||
| 5147 |
프로프리랜서
|
13년 전 | 902 | |
| 5146 | 13년 전 | 2392 | ||
| 5145 |
투코아미디어
|
13년 전 | 1488 | |
| 5144 |
there007
|
13년 전 | 1501 | |
| 5143 | 13년 전 | 1362 | ||
| 5142 | 13년 전 | 2085 | ||
| 5141 |
silky
|
13년 전 | 756 | |
| 5140 |
silky
|
13년 전 | 632 | |
| 5139 |
silky
|
13년 전 | 1971 | |
| 5138 |
silky
|
13년 전 | 567 | |
| 5137 |
silky
|
13년 전 | 591 | |
| 5136 |
silky
|
13년 전 | 878 | |
| 5135 |
silky
|
13년 전 | 614 | |
| 5134 |
silky
|
13년 전 | 467 | |
| 5133 |
|
13년 전 | 829 | |
| 5132 |
복이219
|
13년 전 | 969 | |
| 5131 |
바부바부팅이
|
13년 전 | 996 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기