[D3.js] table+getbootstrap 결합

in #dclick6 years ago (edited)

[D3.js] table+getbootstrap 결합



지난 시간에 table 정렬까지 해보았는데 table 스타일이 좀 멋이 없어서 CSS 코딩을 쭉 하려다가 오래 전 getbootstrap.min.css가 생각이 나서 이걸 같이 합쳐서 좀 멋진 테이블일 만들어 보고 싶어서 CSS코딩은 접고 getbootstrap를 이용한 table에 대해 post를 마무리 할까 합니다.

1. getbootstrap



getbootstrap CSS은 다양한 HTML의 시각화 스타일을 자동을 만들어 줍니다. 즉, 여러분들은 뭘 만들지 그 로직만 짜고 겉 모습은 getbootstrap에서 멋지게 디자인 해준다라고 생각하시며 될 듯 싶네요.

  • 링크 :
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

딱 한줄 외부 링크 주소만 만들어 주면 끝납니다.

그리고 테이블이니깐 다음과 같이 코딩하면 끝!

<table class="table"> ... </table>

이렇게 코딩하면 간단한 기본 스타일 테이블이 완성 됩니다. table이란 이름의 클래스명을 가진 table의 스타일을 bootstrap.min.css에서 이미 만들어 놓았기 때문에 기본 테이블이지만 멋지게 출력이 됩니다.

그럼 table을 지난 시간에 table 정렬 시각화한 예제에 적용해 볼까요.

2. table + getbootstrap 시각화



[data.csv]

name,kor,eng,mat
a,90,90,90
b,70,100,70
c,50,60,95

[table 정렬 소스]

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="UTF-8" />
<body>
<style>
     table {
        width: 100%;    
      }
      table, th, td {
        border: 1px solid #ff00bc;
    text-align:center;
    font-weight:bold;
      }
</style>        
<script type="text/javascript" src="http://d3js.org/d3.v5.min.js"></script>
<script type="text/javascript">
d3.csv("data.csv").then(function(data){
      var sortstate = true;          
      var title = d3.keys(data[0]); 

      var table = d3.select('body').append('table');
      var thead = table.append('thead');
      var tbody = table.append('tbody');

      var header = thead.append('tr')
                       .selectAll('th')
                       .data(title).enter()
                       .append('th')
                       .text(function (d) {return d;})
                       .on('click', function (d) {
                          if (sortstate) {
                              rows.sort(function(a, b) { return b[d] > a[d]; });
                              sortstate = false;
                          } else {
                              rows.sort(function(a, b) { return b[d] < a[d]; });
                              sortstate = true;
                          }
                       });
          
     var rows = tbody.selectAll('tr').data(data)
                     .enter()
                     .append('tr');

     var cells =  rows.selectAll('td')
                      .data(function (d) {
                               return title.map(function (title) {
                                     return { 'title': title, 'value': d[title]};
                               });
                      })
                      .enter()
                      .append('td')
                      .text(function (d) { return d.value;});
});
</script>
</body>

여기서 위 css 코딩은 다 삭제합니다. 그리고 이 한줄을 삽입합니다.

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

그 다음으로 table을 기본 속성의 테이블로 출력하기 때문에 이부분을 수정합니다.

var table = d3.select('body').append('table');

위에서 attr()함수로 한개만 class명을 지정해주면 끝납니다.

var table = d3.select('body').append('table')
              .attr("class","table");

끝! 더이상 할 것이 없네요.

[table 정렬 소스+getbootstrap]

<body>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script type="text/javascript" src="http://d3js.org/d3.v5.min.js"></script>

<script type="text/javascript">
d3.csv("data.csv").then(function(data){
      var sortstate = true;          
      var title = d3.keys(data[0]); 

      var table = d3.select('body').append('table')
                     .attr("class","table");
      var thead = table.append('thead');
      var tbody = table.append('tbody');

      var header = thead.append('tr')
                       .selectAll('th')
                       .data(title).enter()
                       .append('th')
                       .text(function (d) {return d;})
                       .on('click', function (d) {
                          if (sortstate) {
                              rows.sort(function(a, b) { return b[d] > a[d]; });
                              sortstate = false;
                          } else {
                              rows.sort(function(a, b) { return b[d] < a[d]; });
                              sortstate = true;
                          }
                       });
          
     var rows = tbody.selectAll('tr').data(data)
                     .enter()
                     .append('tr');

     var cells =  rows.selectAll('td')
                      .data(function (d) {
                               return title.map(function (title) {
                                     return { 'title': title, 'value': d[title]};
                               });
                      })
                      .enter()
                      .append('td')
                      .text(function (d) { return d.value;});
});
</script>
</body>

[결과]
기본 스타일이지만 뭔가 깔끔해 졌죠. 클릭 시 정렬도 잘되고요.

3. 추가 스타일


스타일 변경은 쉽습니다. table, thead, tbody, tr, td 각 태그에 클래스명만 getbootstrap에서 제공되는 이름으로 지정만 해주시면 됩니다.

var table = d3.select('body').append('table')
            .attr("class","table table-dark");

[결과]


var table = d3.select('body').append('table')
            .attr("class","table table-striped");

var thead = table.append('thead')
            .attr("class","thead-dark");

[결과]

마무리


tr, td까지 스타일을 바꿀 수 있지만 이 부분은 여러분들이 한번 해보세요. 위에 getbootstrap에서 가시면 table class명들이 쭉 나열 되어 있고 그 효과에 대해 잘 설명되어 있으니깐 참조하셔서 수정하시면 됩니다.

오늘은 예전 기억이 나서 getbootstrap를 합쳐 봤네요. 원래는 CSS를 직접 코딩해서 스타일을 잡아 볼까도 했는데 그것보다 이런 방법으로 쉬운 코딩을 하는게 더 좋을 것 같아서 쉬운 getbootstrap을 이용 해봤네요.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

짱짱맨 호출에 응답하여 보팅하였습니다.

이번 주 북이오 스팀달러 에어드랍에는 논픽션으로 유명한 바다출판사의 "보고서의 법칙"이 독점으로 올라왔습니다.

이번 주 스팀달러 에어드랍 소개

방문해주셔서 감사합니다.

DS.js 가 도표만들때 편리하게 쓰이는 것 같네요.

활용도가 무궁무진해서 잘만 쓰면 멋진걸 만들 수 있지요.

쉬운게 하나도 없네요.
기본을 알면 응용으로 쉽긴 하겠죠.. 아니.. 그나마요^^:

크리스마스 스팀 고래의 꿈 복사.jpg

d3.js 기본만 이해하면 쉬운데 그게 참 쉽지 않네요.
고퀄리티 예제 보면은 코딩이 몇줄 안되고 멋지게 표현하는 것들을 보면 나도 언제가 저 경지에 올라야 하는데 노력하고 있네요.

어제 친구들만나 요즘 초등학생들도 코딩을 배운다는 이야기를 듣는데 코딩맨님이 생각나더라구요 ㅎㅎ 저도 눈에 익혀는 둬야겠어요.

아하!
그건 스크래치와 엔트리 블록 코딩이지요.
성인은 30분이나 1시간만 투자하시면 쉽게 코딩할 수 있어요.
나중에 이걸로 아두이노같은 전자부품과 결합해서 실제 IOT(사물인터넷)을 구현할 수도 있고요.

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.030
BTC 62779.83
ETH 3443.62
USDT 1.00
SBD 2.50