2016-10-20 7 views
0

D3, js를 사용하여 간단한 막대 차트를 만들고 텍스트 색상에 문제가 있습니다. 텍스트가 막대 안에 있으면 꽤 잘 보이지만 텍스트가 너무 길면 읽을 수 없게됩니다. 그렇지 않으면 기본 색상 - - 다른 색상이 가능D3을 사용하여 배경에 따라 텍스트 색상을 변경하십시오.

텍스트를 덧붙이 경우가 크롬/FF/IE11/에지에서 작동하는지? 내가 텍스트가 RECT 내부에있는 경우 (빨간색 RECT 폭에 따라 텍스트의 색상을 변경할 수있는 방법 enter image description here 바에 :

bar.append("text") 
    .attr('class', 'x-name-text') 
    .attr("x", 10) 
    .attr("y", barHeight/2) 
    .attr("dy", ".35em") 
    .text(function(d) { 
     return d.name; 
    }); 

jsfiddle demo

UPDATE : 이것 가능한 용액 :
1) 아래에 추가 층 text :

bar.append("text") 
    .attr('class', 'x-name-text') 
    .attr("x", 10) 
    .attr("y", barHeight/2) 
    .attr("fill", "red") 
    .attr("dy", ".35em") 
    .text(function(d) { 
     return d.name; 
    }); 

2) 추가 rect는 (고유 id 잊지 않는 각 rect)

bar.append("rect") 
    .attr("fill", color(0)) 
    .attr("id", function(d) { 
    return d.id; 
}) 
... 

3) clipPath를 추가하고 id이를 이용한 필요한 rectxlink:href와 링크 :

// clipPath depending on rect width 
bar.append('clipPath') 
    .attr('id', function(listItem, index) { 
    return listItem.id + '' + index; 
    }) 
    .append('use') 
    .attr('xlink:href', function(listItem){ 
    return '#' + listItem.id; 
    }); 

4) 오버레이 clipPath SVG 요소의 ID에 연결 yer의 textclip-path 스타일 때에 프로퍼티 :

bar.append('text') 
    .attr("x", 10) 
    .attr("y", barHeight/2) 
    .attr("dy", ".35em") 
    .attr('class', 'overflow-name') 
    .style('clip-path', function(listItem, index) { 
     return 'url(#' + listItem.id + '' + index + ')'; 
    }) 
    .text(function(d) { 
     return d.name; 
    }); 

Working demo

+0

가능한 복제 (HTTP ://stackoverflow.com/questions/29273237/svg-text-color-with-correspond-to-background) – altocumulus

답변

1

이 문제를 해결하기 위해 여러 가지 방법이 있습니다. 그들 중 하나는 CSS mix-blend-mode을 사용하고 있습니다. 여기

.chart .x-name-text { 
    text-anchor: start; 
    mix-blend-mode: difference; 
} 

이 바이올린입니다 : https://jsfiddle.net/nmmgLe95/

그리고 여기 당신이 mix-blend-mode 다른 옵션 목록을 가지고 : https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode

[배경 대응과 SVG 텍스트 색상]의
+0

감사합니다. 하지만 IE11/Edge는 그것을 지원하지 않으며 심지어이 속성을 설정하는 텍스트 색상을 제어 할 수 없습니다. 이 문제를 해결하는 다른 방법이 있습니까? – dieTrying

+0

실제로 IE는 그것을 지원하지 않습니다 (지원하지 않는 수천 가지 다른 것들 ...). –

+1

@GerardoFurtado 다시, 당신의 멋진 답변! 그러나이 질문을 중복으로 표시했으며이 중요한 정보를 잃지 않기 위해 이전 질문에이 답변을 게시 해달라고 요청하고 싶습니다. IE 호환성 노트를 추가하십시오. – altocumulus

관련 문제